From 2904969dbe0ab9cdd184d860e588aa32b44d6f6e Mon Sep 17 00:00:00 2001 From: neha298 <32795246+neha298@users.noreply.github.com> Date: Sun, 12 Mar 2023 20:57:43 +0530 Subject: [PATCH 001/390] Configure feign client URL --- .../cloud/openfeign/client/AlbumClient.java | 15 ++++ .../cloud/openfeign/client/PostClient.java | 12 +++ .../cloud/openfeign/client/TodoClient.java | 13 +++ .../config/DynamicUrlInterceptor.java | 23 ++++++ .../ConfigureFeignUrlController.java | 80 +++++++++++++++++++ .../baeldung/cloud/openfeign/model/Album.java | 32 ++++++++ .../baeldung/cloud/openfeign/model/Todo.java | 40 ++++++++++ .../src/main/resources/application.properties | 2 + 8 files changed, 217 insertions(+) create mode 100644 spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/client/AlbumClient.java create mode 100644 spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/client/PostClient.java create mode 100644 spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/client/TodoClient.java create mode 100644 spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/config/DynamicUrlInterceptor.java create mode 100644 spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/controller/ConfigureFeignUrlController.java create mode 100644 spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/model/Album.java create mode 100644 spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/model/Todo.java diff --git a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/client/AlbumClient.java b/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/client/AlbumClient.java new file mode 100644 index 000000000000..b1db2dbcabf2 --- /dev/null +++ b/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/client/AlbumClient.java @@ -0,0 +1,15 @@ +package com.baeldung.cloud.openfeign.client; + +import com.baeldung.cloud.openfeign.model.Album; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; + +@FeignClient(name = "albumClient", url = "https://jsonplaceholder.typicode.com/albums/") +public interface AlbumClient { + @GetMapping(value = "/{id}") + Album getAlbumById(@PathVariable(value = "id") Integer id); + + @GetMapping(value = "/{id}") + Album getAlbumByIdAndDynamicUrl(@PathVariable(name = "id") Integer id); +} diff --git a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/client/PostClient.java b/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/client/PostClient.java new file mode 100644 index 000000000000..e8e773b6a134 --- /dev/null +++ b/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/client/PostClient.java @@ -0,0 +1,12 @@ +package com.baeldung.cloud.openfeign.client; + +import com.baeldung.cloud.openfeign.model.Post; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; + +@FeignClient(name = "postClient", url = "${spring.cloud.openfeign.client.config.postClient.url}") +public interface PostClient { + @GetMapping(value = "/{id}") + Post getPostById(@PathVariable(value = "id") Integer id); +} diff --git a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/client/TodoClient.java b/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/client/TodoClient.java new file mode 100644 index 000000000000..c768ef6b5f68 --- /dev/null +++ b/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/client/TodoClient.java @@ -0,0 +1,13 @@ +package com.baeldung.cloud.openfeign.client; + +import com.baeldung.cloud.openfeign.model.Todo; +import feign.RequestLine; +import org.springframework.cloud.openfeign.FeignClient; + +import java.net.URI; + +@FeignClient(name = "todoClient") +public interface TodoClient { + @RequestLine(value = "GET") + Todo getTodoById(URI uri); +} diff --git a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/config/DynamicUrlInterceptor.java b/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/config/DynamicUrlInterceptor.java new file mode 100644 index 000000000000..286426edb3f5 --- /dev/null +++ b/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/config/DynamicUrlInterceptor.java @@ -0,0 +1,23 @@ +package com.baeldung.cloud.openfeign.config; + +import feign.RequestInterceptor; +import feign.RequestTemplate; + +import java.util.function.Supplier; + +public class DynamicUrlInterceptor implements RequestInterceptor { + + private final Supplier urlSupplier; + + public DynamicUrlInterceptor(Supplier urlSupplier) { + this.urlSupplier = urlSupplier; + } + + @Override + public void apply(RequestTemplate template) { + String url = urlSupplier.get(); + if (url != null) { + template.target(url); + } + } +} diff --git a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/controller/ConfigureFeignUrlController.java b/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/controller/ConfigureFeignUrlController.java new file mode 100644 index 000000000000..c048e7e1f7cf --- /dev/null +++ b/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/controller/ConfigureFeignUrlController.java @@ -0,0 +1,80 @@ +package com.baeldung.cloud.openfeign.controller; + +import com.baeldung.cloud.openfeign.config.DynamicUrlInterceptor; +import com.baeldung.cloud.openfeign.client.AlbumClient; +import com.baeldung.cloud.openfeign.client.PostClient; +import com.baeldung.cloud.openfeign.client.TodoClient; +import com.baeldung.cloud.openfeign.model.Album; +import com.baeldung.cloud.openfeign.model.Post; +import com.baeldung.cloud.openfeign.model.Todo; +import feign.Feign; +import feign.Target; +import feign.codec.Decoder; +import feign.codec.Encoder; +import org.springframework.beans.factory.ObjectFactory; +import org.springframework.beans.factory.ObjectProvider; +import org.springframework.boot.autoconfigure.http.HttpMessageConverters; +import org.springframework.cloud.openfeign.FeignClientsConfiguration; +import org.springframework.cloud.openfeign.support.HttpMessageConverterCustomizer; +import org.springframework.cloud.openfeign.support.SpringDecoder; +import org.springframework.cloud.openfeign.support.SpringEncoder; +import org.springframework.cloud.openfeign.support.SpringMvcContract; +import org.springframework.context.annotation.Import; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RestController; + +import java.net.URI; + +@RestController +@Import(FeignClientsConfiguration.class) +public class ConfigureFeignUrlController { + private final AlbumClient albumClient; + private final PostClient postClient; + + private final TodoClient todoClient; + private final ObjectFactory messageConverters; + + private final ObjectProvider customizers; + + public ConfigureFeignUrlController(AlbumClient albumClient, + PostClient postClient, + Decoder decoder, + Encoder encoder, + ObjectFactory messageConverters, ObjectProvider customizers) { + this.albumClient = albumClient; + this.postClient = postClient; + this.messageConverters = messageConverters; + this.customizers = customizers; + this.todoClient = Feign.builder().encoder(encoder).decoder(decoder).target(Target.EmptyTarget.create(TodoClient.class)); + } + + @GetMapping(value = "albums/{id}") + public Album getAlbumById(@PathVariable(value = "id") Integer id) { + return albumClient.getAlbumById(id); + } + + @GetMapping(value = "posts/{id}") + public Post getPostById(@PathVariable(value = "id") Integer id) { + return postClient.getPostById(id); + } + + @GetMapping(value = "todos/{id}") + public Todo getTodoById(@PathVariable(value = "id") Integer id) { + return todoClient.getTodoById(URI.create("https://jsonplaceholder.typicode.com/todos/" + id)); + } + +@GetMapping(value = "/dynamicAlbums/{id}") +public Album getAlbumByIdAndDynamicUrl(@PathVariable(value = "id") Integer id) { + AlbumClient client = Feign.builder() + .requestInterceptor(new DynamicUrlInterceptor(() -> "https://jsonplaceholder.typicode.com/albums/")) + .contract(new SpringMvcContract()) + .encoder(new SpringEncoder(messageConverters)) + .decoder(new SpringDecoder(messageConverters, customizers)) + .target(Target.EmptyTarget.create(AlbumClient.class)); + + return client.getAlbumByIdAndDynamicUrl(id); +} +} + + diff --git a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/model/Album.java b/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/model/Album.java new file mode 100644 index 000000000000..ae9c01f3b13c --- /dev/null +++ b/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/model/Album.java @@ -0,0 +1,32 @@ +package com.baeldung.cloud.openfeign.model; + +public class Album { + + private Integer id; + private Integer userId; + private String title; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Integer getUserId() { + return userId; + } + + public void setUserId(Integer userId) { + this.userId = userId; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } +} diff --git a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/model/Todo.java b/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/model/Todo.java new file mode 100644 index 000000000000..887a3496c5cd --- /dev/null +++ b/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/model/Todo.java @@ -0,0 +1,40 @@ +package com.baeldung.cloud.openfeign.model; + +public class Todo { + private Integer id; + private Integer userId; + private String title; + private Boolean completed; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Integer getUserId() { + return userId; + } + + public void setUserId(Integer userId) { + this.userId = userId; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public Boolean getCompleted() { + return completed; + } + + public void setCompleted(Boolean completed) { + this.completed = completed; + } +} diff --git a/spring-cloud-modules/spring-cloud-openfeign/src/main/resources/application.properties b/spring-cloud-modules/spring-cloud-openfeign/src/main/resources/application.properties index a0d9d899348c..f4ea32483dc6 100644 --- a/spring-cloud-modules/spring-cloud-openfeign/src/main/resources/application.properties +++ b/spring-cloud-modules/spring-cloud-openfeign/src/main/resources/application.properties @@ -8,3 +8,5 @@ spring.security.oauth2.client.registration.keycloak.authorization-grant-type=cli spring.security.oauth2.client.registration.keycloak.client-id=payment-app spring.security.oauth2.client.registration.keycloak.client-secret=863e9de4-33d4-4471-b35e-f8d2434385bb spring.security.oauth2.client.provider.keycloak.token-uri=http://localhost:8083/auth/realms/master/protocol/openid-connect/token + +spring.cloud.openfeign.client.config.postClient.url=https://jsonplaceholder.typicode.com/posts/ \ No newline at end of file From 35c4b8cebc2466cba13ac5cebd735aa12e4fabeb Mon Sep 17 00:00:00 2001 From: neha298 <32795246+neha298@users.noreply.github.com> Date: Sun, 12 Mar 2023 21:54:30 +0530 Subject: [PATCH 002/390] Spacing modifications --- .../ConfigureFeignUrlController.java | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/controller/ConfigureFeignUrlController.java b/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/controller/ConfigureFeignUrlController.java index c048e7e1f7cf..ca49bca605c1 100644 --- a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/controller/ConfigureFeignUrlController.java +++ b/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/controller/ConfigureFeignUrlController.java @@ -30,9 +30,11 @@ @Import(FeignClientsConfiguration.class) public class ConfigureFeignUrlController { private final AlbumClient albumClient; + private final PostClient postClient; private final TodoClient todoClient; + private final ObjectFactory messageConverters; private final ObjectProvider customizers; @@ -64,17 +66,17 @@ public Todo getTodoById(@PathVariable(value = "id") Integer id) { return todoClient.getTodoById(URI.create("https://jsonplaceholder.typicode.com/todos/" + id)); } -@GetMapping(value = "/dynamicAlbums/{id}") -public Album getAlbumByIdAndDynamicUrl(@PathVariable(value = "id") Integer id) { - AlbumClient client = Feign.builder() - .requestInterceptor(new DynamicUrlInterceptor(() -> "https://jsonplaceholder.typicode.com/albums/")) - .contract(new SpringMvcContract()) - .encoder(new SpringEncoder(messageConverters)) - .decoder(new SpringDecoder(messageConverters, customizers)) - .target(Target.EmptyTarget.create(AlbumClient.class)); + @GetMapping(value = "/dynamicAlbums/{id}") + public Album getAlbumByIdAndDynamicUrl(@PathVariable(value = "id") Integer id) { + AlbumClient client = Feign.builder() + .requestInterceptor(new DynamicUrlInterceptor(() -> "https://jsonplaceholder.typicode.com/albums/")) + .contract(new SpringMvcContract()) + .encoder(new SpringEncoder(messageConverters)) + .decoder(new SpringDecoder(messageConverters, customizers)) + .target(Target.EmptyTarget.create(AlbumClient.class)); - return client.getAlbumByIdAndDynamicUrl(id); -} + return client.getAlbumByIdAndDynamicUrl(id); + } } From bece5ebffa8f788804bbb2a0d320fb4a13e1083e Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Tue, 14 Mar 2023 12:37:31 +0100 Subject: [PATCH 003/390] simplify StandardCharsets use --- .../inputstreamtostring/JavaInputStreamToXUnitTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core-java-modules/core-java-io-conversions-2/src/test/java/com/baeldung/inputstreamtostring/JavaInputStreamToXUnitTest.java b/core-java-modules/core-java-io-conversions-2/src/test/java/com/baeldung/inputstreamtostring/JavaInputStreamToXUnitTest.java index 03f528766b89..341a820b015a 100644 --- a/core-java-modules/core-java-io-conversions-2/src/test/java/com/baeldung/inputstreamtostring/JavaInputStreamToXUnitTest.java +++ b/core-java-modules/core-java-io-conversions-2/src/test/java/com/baeldung/inputstreamtostring/JavaInputStreamToXUnitTest.java @@ -49,7 +49,7 @@ public final void givenUsingJava5_whenConvertingAnInputStreamToAString_thenCorre final InputStream inputStream = new ByteArrayInputStream(originalString.getBytes()); final StringBuilder textBuilder = new StringBuilder(); - try (Reader reader = new BufferedReader(new InputStreamReader(inputStream, Charset.forName(StandardCharsets.UTF_8.name())))) { + try (Reader reader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8))) { int c; while ((c = reader.read()) != -1) { textBuilder.append((char) c); @@ -63,7 +63,7 @@ public void givenUsingJava8_whenConvertingAnInputStreamToAString_thenCorrect() { final String originalString = randomAlphabetic(DEFAULT_SIZE); final InputStream inputStream = new ByteArrayInputStream(originalString.getBytes()); - final String text = new BufferedReader(new InputStreamReader(inputStream, Charset.forName(StandardCharsets.UTF_8.name()))) + final String text = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8)) .lines() .collect(Collectors.joining("\n")); From 06fa64fcd934ffb38be6bbc529fe7fd9285ada0d Mon Sep 17 00:00:00 2001 From: Fabio Bento Luiz Date: Sat, 25 Mar 2023 19:57:45 +0100 Subject: [PATCH 004/390] Get the user id from the original event instead of creating a new oe --- .../java/com/baeldung/patterns/es/service/UserUtility.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/patterns-modules/cqrs-es/src/main/java/com/baeldung/patterns/es/service/UserUtility.java b/patterns-modules/cqrs-es/src/main/java/com/baeldung/patterns/es/service/UserUtility.java index e44e40458801..08334575077c 100644 --- a/patterns-modules/cqrs-es/src/main/java/com/baeldung/patterns/es/service/UserUtility.java +++ b/patterns-modules/cqrs-es/src/main/java/com/baeldung/patterns/es/service/UserUtility.java @@ -23,8 +23,7 @@ public static User recreateUserState(EventStore store, String userId) { for (Event event : events) { if (event instanceof UserCreatedEvent) { UserCreatedEvent e = (UserCreatedEvent) event; - user = new User(UUID.randomUUID() - .toString(), e.getFirstName(), e.getLastName()); + user = new User(e.getUserId(), e.getFirstName(), e.getLastName()); } if (event instanceof UserAddressAddedEvent) { UserAddressAddedEvent e = (UserAddressAddedEvent) event; From 2bbcc50584ef10ef67c558c08ece3338e6586ffa Mon Sep 17 00:00:00 2001 From: Eugene Kovko <37694937+eukovko@users.noreply.github.com> Date: Fri, 31 Mar 2023 23:27:40 +0200 Subject: [PATCH 005/390] BAEL-6282 Add Native Image Condition (#13739) --- .../ConditionalAnnotationsUnitTest.java | 25 ++++++++++--------- 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/testing-modules/junit5-annotations/src/test/java/com/baeldung/junit5/conditional/ConditionalAnnotationsUnitTest.java b/testing-modules/junit5-annotations/src/test/java/com/baeldung/junit5/conditional/ConditionalAnnotationsUnitTest.java index 0d4013116fca..f4d0807dc3d1 100644 --- a/testing-modules/junit5-annotations/src/test/java/com/baeldung/junit5/conditional/ConditionalAnnotationsUnitTest.java +++ b/testing-modules/junit5-annotations/src/test/java/com/baeldung/junit5/conditional/ConditionalAnnotationsUnitTest.java @@ -2,18 +2,7 @@ import org.junit.jupiter.api.RepeatedTest; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.condition.DisabledForJreRange; -import org.junit.jupiter.api.condition.DisabledIfEnvironmentVariable; -import org.junit.jupiter.api.condition.DisabledIfSystemProperty; -import org.junit.jupiter.api.condition.DisabledOnJre; -import org.junit.jupiter.api.condition.DisabledOnOs; -import org.junit.jupiter.api.condition.EnabledForJreRange; -import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariable; -import org.junit.jupiter.api.condition.EnabledIfSystemProperty; -import org.junit.jupiter.api.condition.EnabledOnJre; -import org.junit.jupiter.api.condition.EnabledOnOs; -import org.junit.jupiter.api.condition.JRE; -import org.junit.jupiter.api.condition.OS; +import org.junit.jupiter.api.condition.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -44,6 +33,18 @@ public void shouldOnlyRunOnJava10And11() { LOGGER.debug("runs with java 10 and 11"); } + @Test + @EnabledInNativeImage + void shouldOnlyRunWithinNativeImage() { + LOGGER.debug("Should run only within native images."); + } + + @Test + @DisabledInNativeImage + void shouldNeverRunWithinNativeImage() { + LOGGER.debug("Shouldn't run within native images."); + } + @Test @EnabledForJreRange(min = JRE.JAVA_8, max = JRE.JAVA_13) public void shouldOnlyRunOnJava8UntilJava13() { From e8e29e275ddd641a57a20188d8eeb2c684783fa1 Mon Sep 17 00:00:00 2001 From: Kai Yuan Date: Sat, 1 Apr 2023 17:06:23 +0200 Subject: [PATCH 006/390] [str-to-uuid] uuid from string (#13736) * [str-to-uuid] uuid from string * [str-to-uuid] rename test methods --- .../baeldung/uuid/UUIDFromStringUnitTest.java | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDFromStringUnitTest.java diff --git a/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDFromStringUnitTest.java b/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDFromStringUnitTest.java new file mode 100644 index 000000000000..381d8715d58d --- /dev/null +++ b/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDFromStringUnitTest.java @@ -0,0 +1,62 @@ +package com.baeldung.uuid; + +import org.junit.jupiter.api.Test; + +import java.util.UUID; + +import static org.junit.jupiter.api.Assertions.*; + +public class UUIDFromStringUnitTest { + @Test + void whenStringInUUIDFormat_thenFromStringWorks() { + String inputStr = "bbcc4621-d88f-4a94-ae2f-b38072bf5087"; + + UUID uuid = UUID.fromString(inputStr); + UUID uuid2 = UUID.fromString(inputStr); + UUID uuid3 = UUID.fromString(inputStr); + + assertEquals(inputStr, uuid.toString()); + + assertEquals(uuid, uuid2); + assertEquals(uuid, uuid3); + + } + + @Test + void whenStringNotInUUIDFormat_thenFromStringRaisesException() { + String inputStr = "I am not a standard UUID representation."; + assertThrows(IllegalArgumentException.class, () -> UUID.fromString(inputStr)); + } + + @Test + void whenStringInFreeFormat_thenNameUUIDFromBytesWorks() { + String inputStr = "I am not a standard UUID representation."; + + UUID uuid = UUID.nameUUIDFromBytes(inputStr.getBytes()); + UUID uuid2 = UUID.nameUUIDFromBytes(inputStr.getBytes()); + UUID uuid3 = UUID.nameUUIDFromBytes(inputStr.getBytes()); + + assertTrue(uuid != null); + + assertEquals(uuid, uuid2); + assertEquals(uuid, uuid3); + + assertEquals(3, uuid.version()); + } + + @Test + void whenStringInFreeFormat_thenGenerateVer5UUIDWorks() { + String inputStr = "I am not a standard UUID representation."; + + UUID uuid = UUIDGenerator.generateType5UUID(inputStr); + UUID uuid2 = UUIDGenerator.generateType5UUID(inputStr); + UUID uuid3 = UUIDGenerator.generateType5UUID(inputStr); + + assertEquals(5, uuid.version()); + + assertTrue(uuid != null); + + assertEquals(uuid, uuid2); + assertEquals(uuid, uuid3); + } +} \ No newline at end of file From 3ea43177365642f0ff1f326fd8d64c26f248c265 Mon Sep 17 00:00:00 2001 From: cesarevalenti90 <50798547+cesarevalenti90@users.noreply.github.com> Date: Sun, 2 Apr 2023 17:57:11 +0200 Subject: [PATCH 007/390] BAEL-6277 - A Guide To Spring Cloud Azure (#13704) * BAEL-6255 - Run a Spring Boot application in AWS Lambda * BAEL-6255 - Run a Spring Boot application in AWS Lambda * fix on template.yaml * fix on template.yaml * removed log from test * resolved issues reported on PR * BAEL-6277 - A Guide To Spring Cloud Azure First commit * BAEL-6277 - A Guide To Spring Cloud Azure Added to README.md the steps to create the secrets * BAEL-6277 - A Guide To Spring Cloud Azure Added the integration Azure Key Vault Properties * BAEL-6277 - A Guide To Spring Cloud Azure Added the integration Azure Key Vault Properties * BAEL-6277 - A Guide To Spring Cloud Azure Key Vault Added one level package keyvault * BAEL-6277 - A Guide To Spring Cloud Azure Key Vault removed target release version * BAEL-6277 - A Guide To Spring Cloud Azure Key Vault fix compilation of NoSuchElementException * BAEL-6277 - A Guide To Spring Cloud Azure Key Vault fix pom.xml * Revert "BAEL-6277 - A Guide To Spring Cloud Azure Key Vault" This reverts commit 1cca1d0d692646001a6d7de106f3a37fb22839ce. * BAEL-6277 - A Guide To Spring Cloud Azure Key Vault fix pom.xml * BAEL-6277 - A Guide To Spring Cloud Azure Key Vault downgrade version to fix jenkins pipeline error * BAEL-6277 - A Guide To Spring Cloud Azure Key Vault comment run on main class --------- Co-authored-by: Cesare --- spring-cloud-modules/pom.xml | 3 +- .../spring-cloud-azure/README.md | 13 ++++ .../spring-cloud-azure/pom.xml | 59 +++++++++++++++++++ .../cloud/azure/keyvault/Application.java | 36 +++++++++++ .../keyvault/data/KeyVaultProperties.java | 52 ++++++++++++++++ .../service/KeyVaultAutoconfiguredClient.java | 19 ++++++ .../keyvault/service/KeyVaultClient.java | 21 +++++++ .../KeyVaultManuallyConfiguredClient.java | 31 ++++++++++ .../src/main/resources/application.yaml | 21 +++++++ .../KeyVaultAutoconfiguredClientUnitTest.java | 26 ++++++++ .../src/test/resources/application.yaml | 21 +++++++ 11 files changed, 301 insertions(+), 1 deletion(-) create mode 100644 spring-cloud-modules/spring-cloud-azure/README.md create mode 100644 spring-cloud-modules/spring-cloud-azure/pom.xml create mode 100644 spring-cloud-modules/spring-cloud-azure/src/main/java/com/baeldung/spring/cloud/azure/keyvault/Application.java create mode 100644 spring-cloud-modules/spring-cloud-azure/src/main/java/com/baeldung/spring/cloud/azure/keyvault/data/KeyVaultProperties.java create mode 100644 spring-cloud-modules/spring-cloud-azure/src/main/java/com/baeldung/spring/cloud/azure/keyvault/service/KeyVaultAutoconfiguredClient.java create mode 100644 spring-cloud-modules/spring-cloud-azure/src/main/java/com/baeldung/spring/cloud/azure/keyvault/service/KeyVaultClient.java create mode 100644 spring-cloud-modules/spring-cloud-azure/src/main/java/com/baeldung/spring/cloud/azure/keyvault/service/KeyVaultManuallyConfiguredClient.java create mode 100644 spring-cloud-modules/spring-cloud-azure/src/main/resources/application.yaml create mode 100644 spring-cloud-modules/spring-cloud-azure/src/test/java/com/baeldung/spring/cloud/azure/keyvault/KeyVaultAutoconfiguredClientUnitTest.java create mode 100644 spring-cloud-modules/spring-cloud-azure/src/test/resources/application.yaml diff --git a/spring-cloud-modules/pom.xml b/spring-cloud-modules/pom.xml index 68c7d45b7cad..dafc5b628e83 100644 --- a/spring-cloud-modules/pom.xml +++ b/spring-cloud-modules/pom.xml @@ -54,7 +54,8 @@ spring-cloud-bus spring-cloud-data-flow spring-cloud-sleuth - spring-cloud-open-telemetry + spring-cloud-open-telemetry + spring-cloud-azure diff --git a/spring-cloud-modules/spring-cloud-azure/README.md b/spring-cloud-modules/spring-cloud-azure/README.md new file mode 100644 index 000000000000..810efbc8dc4a --- /dev/null +++ b/spring-cloud-modules/spring-cloud-azure/README.md @@ -0,0 +1,13 @@ +# Spring Cloud Azure + +# Relevant Articles + +# Azure KeyVault: +In order to create the secrets, follow these steps: +- create an Azure account +- install the Azure Cli an run the following commands +- login on Azure -> _az-login_ +- create a resource group: _az group create --name spring_cloud_azure --location eastus_ +- create a keyvault storage: _az keyvault create --name new_keyvault --resource-group spring_cloud_azure --location eastus_ +- create the secrets: > az keyvault secret set --name my-database-secret --value my-database-secret-value --vault-name new_keyvault,> az keyvault secret set --name my-secret --value my-secret-value --vault-name new_keyvault +``` \ No newline at end of file diff --git a/spring-cloud-modules/spring-cloud-azure/pom.xml b/spring-cloud-modules/spring-cloud-azure/pom.xml new file mode 100644 index 000000000000..86706c794f85 --- /dev/null +++ b/spring-cloud-modules/spring-cloud-azure/pom.xml @@ -0,0 +1,59 @@ + + + 4.0.0 + com.baeldung.spring.cloud + spring-cloud-azure + spring-cloud-azure + + + + org.apache.maven.plugins + maven-compiler-plugin + + + + jar + Spring Cloud Azure Examples + 1.0.0-SNAPSHOT + + + com.baeldung.spring.cloud + spring-cloud-modules + 1.0.0-SNAPSHOT + + + + + org.springframework.boot + spring-boot-dependencies + 2.7.8 + pom + import + + + org.springframework.cloud + spring-cloud-dependencies + ${spring-cloud-dependencies.version} + pom + import + + + + + + + + com.azure.spring + spring-cloud-azure-starter-keyvault-secrets + ${azure-key-vault-extension-version} + + + + + 2021.0.3 + 4.0.0 + + + \ No newline at end of file diff --git a/spring-cloud-modules/spring-cloud-azure/src/main/java/com/baeldung/spring/cloud/azure/keyvault/Application.java b/spring-cloud-modules/spring-cloud-azure/src/main/java/com/baeldung/spring/cloud/azure/keyvault/Application.java new file mode 100644 index 000000000000..8a44a502deff --- /dev/null +++ b/spring-cloud-modules/spring-cloud-azure/src/main/java/com/baeldung/spring/cloud/azure/keyvault/Application.java @@ -0,0 +1,36 @@ +package com.baeldung.spring.cloud.azure.keyvault; + +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.CommandLineRunner; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +import com.azure.security.keyvault.secrets.models.KeyVaultSecret; +import com.baeldung.spring.cloud.azure.keyvault.service.KeyVaultClient; +import com.baeldung.spring.cloud.azure.keyvault.service.KeyVaultAutoconfiguredClient; + +@SpringBootApplication +public class Application implements CommandLineRunner { + + @Value("${database.secret.value}") + private String mySecret; + + private final KeyVaultClient keyVaultClient; + + public Application(@Qualifier(value = "KeyVaultAutoconfiguredClient") KeyVaultAutoconfiguredClient keyVaultAutoconfiguredClient) { + this.keyVaultClient = keyVaultAutoconfiguredClient; + } + + public static void main(String[] args) { + SpringApplication.run(Application.class); + + } + + @Override + public void run(String... args) throws Exception { + //KeyVaultSecret keyVaultSecret = keyVaultClient.getSecret("my-secret"); + //System.out.println("Hey, our secret is here ->" + keyVaultSecret.getValue()); + //System.out.println("Hey, our secret is here from application properties file ->" + mySecret); + } +} diff --git a/spring-cloud-modules/spring-cloud-azure/src/main/java/com/baeldung/spring/cloud/azure/keyvault/data/KeyVaultProperties.java b/spring-cloud-modules/spring-cloud-azure/src/main/java/com/baeldung/spring/cloud/azure/keyvault/data/KeyVaultProperties.java new file mode 100644 index 000000000000..edd7c014166f --- /dev/null +++ b/spring-cloud-modules/spring-cloud-azure/src/main/java/com/baeldung/spring/cloud/azure/keyvault/data/KeyVaultProperties.java @@ -0,0 +1,52 @@ +package com.baeldung.spring.cloud.azure.keyvault.data; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.context.properties.ConstructorBinding; + +@ConfigurationProperties("azure.keyvault") +@ConstructorBinding +public class KeyVaultProperties { + private String vaultUrl; + private String tenantId; + private String clientId; + private String clientSecret; + + public KeyVaultProperties(String vaultUrl, String tenantId, String clientId, String clientSecret) { + this.vaultUrl = vaultUrl; + this.tenantId = tenantId; + this.clientId = clientId; + this.clientSecret = clientSecret; + } + + public String getVaultUrl() { + return vaultUrl; + } + + public void setVaultUrl(String vaultUrl) { + this.vaultUrl = vaultUrl; + } + + public String getTenantId() { + return tenantId; + } + + public void setTenantId(String tenantId) { + this.tenantId = tenantId; + } + + public String getClientId() { + return clientId; + } + + public void setClientId(String clientId) { + this.clientId = clientId; + } + + public String getClientSecret() { + return clientSecret; + } + + public void setClientSecret(String clientSecret) { + this.clientSecret = clientSecret; + } +} diff --git a/spring-cloud-modules/spring-cloud-azure/src/main/java/com/baeldung/spring/cloud/azure/keyvault/service/KeyVaultAutoconfiguredClient.java b/spring-cloud-modules/spring-cloud-azure/src/main/java/com/baeldung/spring/cloud/azure/keyvault/service/KeyVaultAutoconfiguredClient.java new file mode 100644 index 000000000000..392c15c6b48f --- /dev/null +++ b/spring-cloud-modules/spring-cloud-azure/src/main/java/com/baeldung/spring/cloud/azure/keyvault/service/KeyVaultAutoconfiguredClient.java @@ -0,0 +1,19 @@ +package com.baeldung.spring.cloud.azure.keyvault.service; + +import org.springframework.stereotype.Component; + +import com.azure.security.keyvault.secrets.SecretClient; + +@Component("KeyVaultAutoconfiguredClient") +public class KeyVaultAutoconfiguredClient implements KeyVaultClient { + private final SecretClient secretClient; + + public KeyVaultAutoconfiguredClient(SecretClient secretClient) { + this.secretClient = secretClient; + } + + @Override + public SecretClient getSecretClient() { + return secretClient; + } +} diff --git a/spring-cloud-modules/spring-cloud-azure/src/main/java/com/baeldung/spring/cloud/azure/keyvault/service/KeyVaultClient.java b/spring-cloud-modules/spring-cloud-azure/src/main/java/com/baeldung/spring/cloud/azure/keyvault/service/KeyVaultClient.java new file mode 100644 index 000000000000..4f4148250efe --- /dev/null +++ b/spring-cloud-modules/spring-cloud-azure/src/main/java/com/baeldung/spring/cloud/azure/keyvault/service/KeyVaultClient.java @@ -0,0 +1,21 @@ +package com.baeldung.spring.cloud.azure.keyvault.service; + +import java.util.NoSuchElementException; + +import com.azure.security.keyvault.secrets.SecretClient; +import com.azure.security.keyvault.secrets.models.KeyVaultSecret; + +public interface KeyVaultClient { + + SecretClient getSecretClient(); + + default KeyVaultSecret getSecret(String key) { + KeyVaultSecret secret; + try { + secret = getSecretClient().getSecret(key); + } catch (Exception ex) { + throw new NoSuchElementException(); + } + return secret; + } +} diff --git a/spring-cloud-modules/spring-cloud-azure/src/main/java/com/baeldung/spring/cloud/azure/keyvault/service/KeyVaultManuallyConfiguredClient.java b/spring-cloud-modules/spring-cloud-azure/src/main/java/com/baeldung/spring/cloud/azure/keyvault/service/KeyVaultManuallyConfiguredClient.java new file mode 100644 index 000000000000..33a85f6bb942 --- /dev/null +++ b/spring-cloud-modules/spring-cloud-azure/src/main/java/com/baeldung/spring/cloud/azure/keyvault/service/KeyVaultManuallyConfiguredClient.java @@ -0,0 +1,31 @@ +package com.baeldung.spring.cloud.azure.keyvault.service; + +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.stereotype.Component; + +import com.azure.identity.ClientSecretCredentialBuilder; +import com.azure.security.keyvault.secrets.SecretClient; +import com.azure.security.keyvault.secrets.SecretClientBuilder; +import com.baeldung.spring.cloud.azure.keyvault.data.KeyVaultProperties; + +@EnableConfigurationProperties(KeyVaultProperties.class) +@Component("KeyVaultManuallyConfiguredClient") +public class KeyVaultManuallyConfiguredClient implements KeyVaultClient { + + private KeyVaultProperties keyVaultProperties; + + private SecretClient secretClient; + + @Override + public SecretClient getSecretClient() { + if (secretClient == null) { + secretClient = new SecretClientBuilder().vaultUrl(keyVaultProperties.getVaultUrl()) + .credential(new ClientSecretCredentialBuilder().tenantId(keyVaultProperties.getTenantId()) + .clientId(keyVaultProperties.getClientId()) + .clientSecret(keyVaultProperties.getClientSecret()) + .build()) + .buildClient(); + } + return secretClient; + } +} diff --git a/spring-cloud-modules/spring-cloud-azure/src/main/resources/application.yaml b/spring-cloud-modules/spring-cloud-azure/src/main/resources/application.yaml new file mode 100644 index 000000000000..4bea8d789be3 --- /dev/null +++ b/spring-cloud-modules/spring-cloud-azure/src/main/resources/application.yaml @@ -0,0 +1,21 @@ +spring: + cloud: + azure: + compatibility-verifier: + enabled: false + keyvault: + secret: + property-sources[0]: + name: key-vault-property-source-1 + endpoint: https://spring-cloud-azure.vault.azure.net/ + property-source-enabled: true + endpoint: https://spring-cloud-azure.vault.azure.net/ +azure: + keyvault: + vaultUrl: myVaultUrl + tenantId: myTenantId + clientId: myClientId + clientSecret: myClientSecret +database: + secret: + value: ${my-database-secret} \ No newline at end of file diff --git a/spring-cloud-modules/spring-cloud-azure/src/test/java/com/baeldung/spring/cloud/azure/keyvault/KeyVaultAutoconfiguredClientUnitTest.java b/spring-cloud-modules/spring-cloud-azure/src/test/java/com/baeldung/spring/cloud/azure/keyvault/KeyVaultAutoconfiguredClientUnitTest.java new file mode 100644 index 000000000000..0e3779e2c2fa --- /dev/null +++ b/spring-cloud-modules/spring-cloud-azure/src/test/java/com/baeldung/spring/cloud/azure/keyvault/KeyVaultAutoconfiguredClientUnitTest.java @@ -0,0 +1,26 @@ +package com.baeldung.spring.cloud.azure.keyvault; + +import java.util.NoSuchElementException; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.test.context.SpringBootTest; + +import com.baeldung.spring.cloud.azure.keyvault.service.KeyVaultAutoconfiguredClient; + +@SpringBootTest(classes = Application.class) +public class KeyVaultAutoconfiguredClientUnitTest { + + @Autowired + @Qualifier(value = "KeyVaultAutoconfiguredClient") + private KeyVaultAutoconfiguredClient keyVaultAutoconfiguredClient; + + @Test + void whenANotExistingKeyIsProvided_thenShouldReturnAnError() { + String secretKey = "mySecret"; + Assertions.assertThrows(NoSuchElementException.class, () -> keyVaultAutoconfiguredClient.getSecret(secretKey)); + } + +} diff --git a/spring-cloud-modules/spring-cloud-azure/src/test/resources/application.yaml b/spring-cloud-modules/spring-cloud-azure/src/test/resources/application.yaml new file mode 100644 index 000000000000..88c54b32eb0a --- /dev/null +++ b/spring-cloud-modules/spring-cloud-azure/src/test/resources/application.yaml @@ -0,0 +1,21 @@ +spring: + cloud: + azure: + compatibility-verifier: + enabled: false + keyvault: + secret: + endpoint: https://spring-cloud-azure.vault.azure.net/ + property-source-enabled: true + property-sources: + name: key-vault-property-source-1 + endpoint: https://spring-cloud-azure.vault.azure.net/ +azure: + keyvault: + vaultUrl: myVaultUrl + tenantId: myTenantId + clientId: myClientId + clientSecret: myClientSecret +database: + secret: + value: my-database-secret \ No newline at end of file From 38fa542b6e0810d576f2a88a6cc702e9e230b9e7 Mon Sep 17 00:00:00 2001 From: Viktor Ardelean Date: Mon, 3 Apr 2023 00:00:58 +0300 Subject: [PATCH 008/390] BAEL-6093 add spring boot 3 url matching code sample (#13744) --- .../spring-boot-3-url-matching/README.md | 1 + .../spring-boot-3-url-matching/pom.xml | 101 ++++++++++++++++++ .../sample/URLMatchingApplication.java | 12 +++ .../com/baeldung/sample/config/WebConfig.java | 31 ++++++ .../filters/TrailingSlashRedirectFilter.java | 52 +++++++++ .../TrailingSlashRedirectFilterReactive.java | 27 +++++ .../sample/resources/GreetingsController.java | 19 ++++ .../GreetingsControllerReactive.java | 20 ++++ .../src/main/resources/application.yml | 7 ++ ...GreetingsControllerApiIntegrationTest.java | 45 ++++++++ ...sControllerReactiveApiIntegrationTest.java | 46 ++++++++ 11 files changed, 361 insertions(+) create mode 100644 spring-boot-modules/spring-boot-3-url-matching/README.md create mode 100644 spring-boot-modules/spring-boot-3-url-matching/pom.xml create mode 100644 spring-boot-modules/spring-boot-3-url-matching/src/main/java/com/baeldung/sample/URLMatchingApplication.java create mode 100644 spring-boot-modules/spring-boot-3-url-matching/src/main/java/com/baeldung/sample/config/WebConfig.java create mode 100644 spring-boot-modules/spring-boot-3-url-matching/src/main/java/com/baeldung/sample/filters/TrailingSlashRedirectFilter.java create mode 100644 spring-boot-modules/spring-boot-3-url-matching/src/main/java/com/baeldung/sample/filters/TrailingSlashRedirectFilterReactive.java create mode 100644 spring-boot-modules/spring-boot-3-url-matching/src/main/java/com/baeldung/sample/resources/GreetingsController.java create mode 100644 spring-boot-modules/spring-boot-3-url-matching/src/main/java/com/baeldung/sample/resources/GreetingsControllerReactive.java create mode 100644 spring-boot-modules/spring-boot-3-url-matching/src/main/resources/application.yml create mode 100644 spring-boot-modules/spring-boot-3-url-matching/src/test/java/com/baeldung/sample/resources/GreetingsControllerApiIntegrationTest.java create mode 100644 spring-boot-modules/spring-boot-3-url-matching/src/test/java/com/baeldung/sample/resources/GreetingsControllerReactiveApiIntegrationTest.java diff --git a/spring-boot-modules/spring-boot-3-url-matching/README.md b/spring-boot-modules/spring-boot-3-url-matching/README.md new file mode 100644 index 000000000000..8b137891791f --- /dev/null +++ b/spring-boot-modules/spring-boot-3-url-matching/README.md @@ -0,0 +1 @@ + diff --git a/spring-boot-modules/spring-boot-3-url-matching/pom.xml b/spring-boot-modules/spring-boot-3-url-matching/pom.xml new file mode 100644 index 000000000000..ca8213e1cf1c --- /dev/null +++ b/spring-boot-modules/spring-boot-3-url-matching/pom.xml @@ -0,0 +1,101 @@ + + + 4.0.0 + spring-boot-3 + 0.0.1-SNAPSHOT + spring-boot-3 + URL Matching in Spring Boot + + + com.baeldung + parent-boot-3 + 0.0.1-SNAPSHOT + ../../parent-boot-3 + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-hateoas + + + org.springframework.boot + spring-boot-starter-validation + + + org.springframework.boot + spring-boot-devtools + runtime + true + + + org.springframework.boot + spring-boot-configuration-processor + true + + + org.springframework.boot + spring-boot-starter-test + + + org.springframework + spring-test + 6.0.6 + test + + + javax.servlet + javax.servlet-api + 3.1.0 + provided + + + org.springframework.boot + spring-boot-starter-webflux + + + io.projectreactor + reactor-core + 3.5.4 + + + io.projectreactor + reactor-test + 3.5.4 + test + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + 3.0.0-M7 + + + \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-3-url-matching/src/main/java/com/baeldung/sample/URLMatchingApplication.java b/spring-boot-modules/spring-boot-3-url-matching/src/main/java/com/baeldung/sample/URLMatchingApplication.java new file mode 100644 index 000000000000..914f2e1e539b --- /dev/null +++ b/spring-boot-modules/spring-boot-3-url-matching/src/main/java/com/baeldung/sample/URLMatchingApplication.java @@ -0,0 +1,12 @@ +package com.baeldung.sample; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; + +@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class }) +public class URLMatchingApplication { + public static void main(String[] args) { + SpringApplication.run(URLMatchingApplication.class, args); + } +} diff --git a/spring-boot-modules/spring-boot-3-url-matching/src/main/java/com/baeldung/sample/config/WebConfig.java b/spring-boot-modules/spring-boot-3-url-matching/src/main/java/com/baeldung/sample/config/WebConfig.java new file mode 100644 index 000000000000..d4b70c63fa70 --- /dev/null +++ b/spring-boot-modules/spring-boot-3-url-matching/src/main/java/com/baeldung/sample/config/WebConfig.java @@ -0,0 +1,31 @@ +package com.baeldung.sample.config; + +import com.baeldung.sample.filters.TrailingSlashRedirectFilterReactive; +import jakarta.servlet.Filter; +import org.springframework.web.server.WebFilter; +import org.springframework.boot.web.servlet.FilterRegistrationBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import com.baeldung.sample.filters.TrailingSlashRedirectFilter; + + + +@Configuration +public class WebConfig { + @Bean + public WebFilter trailingSlashRedirectReactiveFilter() { + return new TrailingSlashRedirectFilterReactive(); + } + @Bean + public Filter trailingSlashRedirectFilter() { + return new TrailingSlashRedirectFilter(); + } + @Bean + public FilterRegistrationBean trailingSlashFilter() { + FilterRegistrationBean registrationBean = new FilterRegistrationBean<>(); + registrationBean.setFilter(trailingSlashRedirectFilter()); + registrationBean.addUrlPatterns("/*"); + return registrationBean; + } +} diff --git a/spring-boot-modules/spring-boot-3-url-matching/src/main/java/com/baeldung/sample/filters/TrailingSlashRedirectFilter.java b/spring-boot-modules/spring-boot-3-url-matching/src/main/java/com/baeldung/sample/filters/TrailingSlashRedirectFilter.java new file mode 100644 index 000000000000..6db83b73f245 --- /dev/null +++ b/spring-boot-modules/spring-boot-3-url-matching/src/main/java/com/baeldung/sample/filters/TrailingSlashRedirectFilter.java @@ -0,0 +1,52 @@ +package com.baeldung.sample.filters; + +import java.io.IOException; +import jakarta.servlet.http.HttpServletRequestWrapper; +import org.springframework.stereotype.Component; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; + +@Component +public class TrailingSlashRedirectFilter implements Filter { + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) + throws IOException, ServletException { + HttpServletRequest httpRequest = (HttpServletRequest) request; + String path = httpRequest.getRequestURI(); + + if (path.endsWith("/")) { + String newPath = path.substring(0, path.length() - 1); + HttpServletRequest newRequest = new CustomHttpServletRequestWrapper(httpRequest, newPath); + chain.doFilter(newRequest, response); + } else { + chain.doFilter(request, response); + } + } + + private static class CustomHttpServletRequestWrapper extends HttpServletRequestWrapper { + + private final String newPath; + + public CustomHttpServletRequestWrapper(HttpServletRequest request, String newPath) { + super(request); + this.newPath = newPath; + } + + @Override + public String getRequestURI() { + return newPath; + } + + @Override + public StringBuffer getRequestURL() { + StringBuffer url = new StringBuffer(); + url.append(getScheme()).append("://").append(getServerName()).append(":").append(getServerPort()) + .append(newPath); + return url; + } + } +} diff --git a/spring-boot-modules/spring-boot-3-url-matching/src/main/java/com/baeldung/sample/filters/TrailingSlashRedirectFilterReactive.java b/spring-boot-modules/spring-boot-3-url-matching/src/main/java/com/baeldung/sample/filters/TrailingSlashRedirectFilterReactive.java new file mode 100644 index 000000000000..f983d8144138 --- /dev/null +++ b/spring-boot-modules/spring-boot-3-url-matching/src/main/java/com/baeldung/sample/filters/TrailingSlashRedirectFilterReactive.java @@ -0,0 +1,27 @@ +package com.baeldung.sample.filters; + +import org.springframework.http.server.reactive.ServerHttpRequest; +import org.springframework.stereotype.Component; +import org.springframework.web.server.ServerWebExchange; +import org.springframework.web.server.WebFilter; +import org.springframework.web.server.WebFilterChain; + +import reactor.core.publisher.Mono; + +@Component +public class TrailingSlashRedirectFilterReactive implements WebFilter { + + @Override + public Mono filter(ServerWebExchange exchange, WebFilterChain chain) { + ServerHttpRequest request = exchange.getRequest(); + String path = request.getPath().value(); + + if (path.endsWith("/")) { + String newPath = path.substring(0, path.length() - 1); + ServerHttpRequest newRequest = request.mutate().path(newPath).build(); + return chain.filter(exchange.mutate().request(newRequest).build()); + } + + return chain.filter(exchange); + } +} diff --git a/spring-boot-modules/spring-boot-3-url-matching/src/main/java/com/baeldung/sample/resources/GreetingsController.java b/spring-boot-modules/spring-boot-3-url-matching/src/main/java/com/baeldung/sample/resources/GreetingsController.java new file mode 100644 index 000000000000..5c98ed764ef7 --- /dev/null +++ b/spring-boot-modules/spring-boot-3-url-matching/src/main/java/com/baeldung/sample/resources/GreetingsController.java @@ -0,0 +1,19 @@ +package com.baeldung.sample.resources; + +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class GreetingsController { + + @GetMapping("/some/greeting") + public String greeting() { + return "Hello"; + } + + @GetMapping("/some/greeting/") + public String greetingTrailingSlash() { + return "Hello with slash"; + } + +} diff --git a/spring-boot-modules/spring-boot-3-url-matching/src/main/java/com/baeldung/sample/resources/GreetingsControllerReactive.java b/spring-boot-modules/spring-boot-3-url-matching/src/main/java/com/baeldung/sample/resources/GreetingsControllerReactive.java new file mode 100644 index 000000000000..fde353ac43d2 --- /dev/null +++ b/spring-boot-modules/spring-boot-3-url-matching/src/main/java/com/baeldung/sample/resources/GreetingsControllerReactive.java @@ -0,0 +1,20 @@ +package com.baeldung.sample.resources; + +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +import reactor.core.publisher.Mono; + +@RestController +public class GreetingsControllerReactive { + + @GetMapping("/some/reactive/greeting") + public Mono greeting() { + return Mono.just("Hello reactive"); + } + + @GetMapping("/some/reactive/greeting/") + public Mono greetingTrailingSlash() { + return Mono.just("Hello with slash reactive"); + } +} diff --git a/spring-boot-modules/spring-boot-3-url-matching/src/main/resources/application.yml b/spring-boot-modules/spring-boot-3-url-matching/src/main/resources/application.yml new file mode 100644 index 000000000000..8d047336f6aa --- /dev/null +++ b/spring-boot-modules/spring-boot-3-url-matching/src/main/resources/application.yml @@ -0,0 +1,7 @@ +spring: + mvc: + throw-exception-if-no-handler-found: true + jackson: + deserialization: + FAIL_ON_UNKNOWN_PROPERTIES: true + property-naming-strategy: SNAKE_CASE diff --git a/spring-boot-modules/spring-boot-3-url-matching/src/test/java/com/baeldung/sample/resources/GreetingsControllerApiIntegrationTest.java b/spring-boot-modules/spring-boot-3-url-matching/src/test/java/com/baeldung/sample/resources/GreetingsControllerApiIntegrationTest.java new file mode 100644 index 000000000000..754ef4aafe5f --- /dev/null +++ b/spring-boot-modules/spring-boot-3-url-matching/src/test/java/com/baeldung/sample/resources/GreetingsControllerApiIntegrationTest.java @@ -0,0 +1,45 @@ +package com.baeldung.sample.resources; + +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.http.MediaType; +import org.springframework.test.web.servlet.MockMvc; + +@WebMvcTest(controllers = GreetingsController.class) +class GreetingsControllerApiIntegrationTest { + + private static final String BASEURL = "/some"; + private static final String DEFAULT_MEDIA_TYPE = MediaType.APPLICATION_JSON_VALUE; + + @Autowired + MockMvc mvc; + + @Test + public void testGreeting() throws Exception { + mvc.perform(get(BASEURL + "/greeting").accept(DEFAULT_MEDIA_TYPE)) + .andExpect(status().isOk()) + .andExpect(content().string("Hello")); + } + + @Test + @Disabled("Disabled while TrailingSlashRedirectFilter is in use.") + public void testGreetingTrailingSlash() throws Exception { + mvc.perform(get(BASEURL + "/greeting/").accept(DEFAULT_MEDIA_TYPE)) + .andExpect(status().isOk()) + .andExpect(content().string("Hello with slash")); + } + + @Test + public void testGreetingTrailingSlashWithFilter() throws Exception { + mvc.perform(get(BASEURL + "/greeting/").accept(DEFAULT_MEDIA_TYPE)) + .andExpect(status().isOk()) + .andExpect(content().string("Hello")); + } + +} diff --git a/spring-boot-modules/spring-boot-3-url-matching/src/test/java/com/baeldung/sample/resources/GreetingsControllerReactiveApiIntegrationTest.java b/spring-boot-modules/spring-boot-3-url-matching/src/test/java/com/baeldung/sample/resources/GreetingsControllerReactiveApiIntegrationTest.java new file mode 100644 index 000000000000..9d5e439a747d --- /dev/null +++ b/spring-boot-modules/spring-boot-3-url-matching/src/test/java/com/baeldung/sample/resources/GreetingsControllerReactiveApiIntegrationTest.java @@ -0,0 +1,46 @@ +package com.baeldung.sample.resources; + +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.reactive.WebFluxTest; +import org.springframework.test.web.reactive.server.WebTestClient; +import static org.junit.jupiter.api.Assertions.assertTrue; + +@WebFluxTest +public class GreetingsControllerReactiveApiIntegrationTest { + private static final String BASEURL = "/some/reactive"; + @Autowired + private WebTestClient webClient; + @Test + public void testGreeting() { + webClient.get().uri( BASEURL + "/greeting") + .exchange() + .expectStatus().isOk() + .expectBody().consumeWith(result -> { + String responseBody = new String(result.getResponseBody()); + assertTrue(responseBody.contains("Hello reactive")); + }); + } + @Test + @Disabled("Disabled while TrailingSlashRedirectFilter is in use.") + public void testGreetingTrailingSlash() { + webClient.get().uri(BASEURL + "/greeting/") + .exchange() + .expectStatus().isOk() + .expectBody().consumeWith(result -> { + String responseBody = new String(result.getResponseBody()); + assertTrue(responseBody.contains("Hello with slash reactive")); + }); + } + @Test + public void testGreetingTrailingSlashWithFilter() { + webClient.get().uri(BASEURL + "/greeting/") + .exchange() + .expectStatus().isOk() + .expectBody().consumeWith(result -> { + String responseBody = new String(result.getResponseBody()); + assertTrue(responseBody.contains("Hello reactive")); + }); + } +} From c3487c11a8dea04cf835a26f40e9c9f2257d18fa Mon Sep 17 00:00:00 2001 From: Chris <34248815+chrisociepa@users.noreply.github.com> Date: Mon, 3 Apr 2023 08:59:45 +0200 Subject: [PATCH 009/390] Prevent NPE when trying to create a deep copy (#13513) --- .../baeldung/hibernate/arraymapping/CustomIntegerArrayType.java | 2 +- .../baeldung/hibernate/arraymapping/CustomStringArrayType.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/persistence-modules/hibernate-mapping/src/main/java/com/baeldung/hibernate/arraymapping/CustomIntegerArrayType.java b/persistence-modules/hibernate-mapping/src/main/java/com/baeldung/hibernate/arraymapping/CustomIntegerArrayType.java index 233bb95dc156..eedaf2529fb4 100644 --- a/persistence-modules/hibernate-mapping/src/main/java/com/baeldung/hibernate/arraymapping/CustomIntegerArrayType.java +++ b/persistence-modules/hibernate-mapping/src/main/java/com/baeldung/hibernate/arraymapping/CustomIntegerArrayType.java @@ -59,7 +59,7 @@ public void nullSafeSet(PreparedStatement st, Object value, int index, SharedSes @Override public Object deepCopy(Object value) throws HibernateException { Integer[] a = (Integer[])value; - return Arrays.copyOf(a, a.length); + return a != null ? Arrays.copyOf(a, a.length) : null; } @Override diff --git a/persistence-modules/hibernate-mapping/src/main/java/com/baeldung/hibernate/arraymapping/CustomStringArrayType.java b/persistence-modules/hibernate-mapping/src/main/java/com/baeldung/hibernate/arraymapping/CustomStringArrayType.java index 7bd284def753..7d3893393e5c 100644 --- a/persistence-modules/hibernate-mapping/src/main/java/com/baeldung/hibernate/arraymapping/CustomStringArrayType.java +++ b/persistence-modules/hibernate-mapping/src/main/java/com/baeldung/hibernate/arraymapping/CustomStringArrayType.java @@ -59,7 +59,7 @@ public void nullSafeSet(PreparedStatement st, Object value, int index, SharedSes @Override public Object deepCopy(Object value) throws HibernateException { String[] a = (String[])value; - return Arrays.copyOf(a, a.length); + return a != null ? Arrays.copyOf(a, a.length) : null; } @Override From c8867dd347967ac52de8de35a87e3887124d2fe5 Mon Sep 17 00:00:00 2001 From: Deboshree Date: Mon, 3 Apr 2023 15:11:48 +0530 Subject: [PATCH 010/390] https://jira.baeldung.com/browse/BAEL- moved the code to a different module --- .../core-java-string-conversions-3/README.md | 6 +++ .../core-java-string-conversions-3/pom.xml | 34 ++++++++++++ .../stringtoint/StringToIntConverter.java | 3 +- .../StringToIntConverterUnitTest.java | 53 +++++++++++++++++++ .../StringToIntConverterUnitTest.java | 53 ------------------- 5 files changed, 95 insertions(+), 54 deletions(-) create mode 100644 core-java-modules/core-java-string-conversions-3/README.md create mode 100644 core-java-modules/core-java-string-conversions-3/pom.xml rename core-java-modules/{core-java-string-conversions => core-java-string-conversions-3}/src/main/java/com/baeldung/stringtoint/StringToIntConverter.java (99%) create mode 100644 core-java-modules/core-java-string-conversions-3/src/test/java/com/baeldung/stringtoint/StringToIntConverterUnitTest.java delete mode 100644 core-java-modules/core-java-string-conversions/src/test/java/com/baeldung/stringtoint/StringToIntConverterUnitTest.java diff --git a/core-java-modules/core-java-string-conversions-3/README.md b/core-java-modules/core-java-string-conversions-3/README.md new file mode 100644 index 000000000000..4e03f060fbbc --- /dev/null +++ b/core-java-modules/core-java-string-conversions-3/README.md @@ -0,0 +1,6 @@ +## Java String Conversions + +This module contains articles about string conversions from/to another type. + +### Relevant Articles: +- More articles: [[next -->]](/core-java-modules/core-java-string-conversions-2) diff --git a/core-java-modules/core-java-string-conversions-3/pom.xml b/core-java-modules/core-java-string-conversions-3/pom.xml new file mode 100644 index 000000000000..ef51c0dfdffb --- /dev/null +++ b/core-java-modules/core-java-string-conversions-3/pom.xml @@ -0,0 +1,34 @@ + + + 4.0.0 + core-java-string-conversions-3 + 0.1.0-SNAPSHOT + core-java-string-conversions-3 + jar + + + com.baeldung.core-java-modules + core-java-modules + 0.0.1-SNAPSHOT + + + + + org.apache.commons + commons-lang3 + ${commons-lang3.version} + + + + + core-java-string-conversions-3 + + + src/main/resources + true + + + + \ No newline at end of file diff --git a/core-java-modules/core-java-string-conversions/src/main/java/com/baeldung/stringtoint/StringToIntConverter.java b/core-java-modules/core-java-string-conversions-3/src/main/java/com/baeldung/stringtoint/StringToIntConverter.java similarity index 99% rename from core-java-modules/core-java-string-conversions/src/main/java/com/baeldung/stringtoint/StringToIntConverter.java rename to core-java-modules/core-java-string-conversions-3/src/main/java/com/baeldung/stringtoint/StringToIntConverter.java index 03d77c2aea1a..fd19ca61d61f 100644 --- a/core-java-modules/core-java-string-conversions/src/main/java/com/baeldung/stringtoint/StringToIntConverter.java +++ b/core-java-modules/core-java-string-conversions-3/src/main/java/com/baeldung/stringtoint/StringToIntConverter.java @@ -4,7 +4,7 @@ import org.apache.commons.lang3.math.NumberUtils; public class StringToIntConverter { - + private StringToIntConverter() { } @@ -50,3 +50,4 @@ public static int convertStringToIntUsingNumberUtils(String input){ return NumberUtils.toInt(input, Integer.MIN_VALUE); } } + diff --git a/core-java-modules/core-java-string-conversions-3/src/test/java/com/baeldung/stringtoint/StringToIntConverterUnitTest.java b/core-java-modules/core-java-string-conversions-3/src/test/java/com/baeldung/stringtoint/StringToIntConverterUnitTest.java new file mode 100644 index 000000000000..a1d365b3615c --- /dev/null +++ b/core-java-modules/core-java-string-conversions-3/src/test/java/com/baeldung/stringtoint/StringToIntConverterUnitTest.java @@ -0,0 +1,53 @@ +package com.baeldung.stringtoint; + +import java.util.Arrays; +import java.util.List; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +class StringToIntConverterUnitTest { + + @Test + void whenConvertingIntToString_thenInvalidCasesReturnIntegerMinValue() { + List testData = Arrays.asList( + new TestData("", Integer.MIN_VALUE), + new TestData(null, Integer.MIN_VALUE), + new TestData("23,56", Integer.MIN_VALUE), + new TestData("2147483648", Integer.MIN_VALUE), + new TestData("-2147483649", Integer.MIN_VALUE), + new TestData("hello", Integer.MIN_VALUE) + ); + testData.forEach(data -> { + Assertions.assertEquals(data.expectedOutput, StringToIntConverter.convertStringToIntUsingIntegerParseInt(data.input)); + Assertions.assertEquals(data.expectedOutput, StringToIntConverter.convertStringToIntUsingIntegerValueOf(data.input)); + Assertions.assertEquals(data.expectedOutput, StringToIntConverter.convertStringToIntUsingOptional(data.input)); + Assertions.assertEquals(data.expectedOutput, StringToIntConverter.convertStringToIntUsingIntegerDecode(data.input)); + Assertions.assertEquals(data.expectedOutput, StringToIntConverter.convertStringToIntUsingNumberUtils(data.input)); + }); + } + + @Test + void whenConvertingIntToString_thenValidCasesReturnUnboxedInt() { + List testData = Arrays.asList( + new TestData("23", 23), + new TestData("-23", -23) + ); + testData.forEach(data -> { + Assertions.assertEquals(data.expectedOutput, StringToIntConverter.convertStringToIntUsingIntegerParseInt(data.input)); + Assertions.assertEquals(data.expectedOutput, StringToIntConverter.convertStringToIntUsingIntegerValueOf(data.input)); + Assertions.assertEquals(data.expectedOutput, StringToIntConverter.convertStringToIntUsingOptional(data.input)); + Assertions.assertEquals(data.expectedOutput, StringToIntConverter.convertStringToIntUsingNumberUtils(data.input)); + Assertions.assertEquals(data.expectedOutput, StringToIntConverter.convertStringToIntUsingIntegerDecode(data.input)); + }); + } + + public static class TestData{ + String input; + Integer expectedOutput; + + TestData(String input, Integer expectedOutput){ + this.input = input; + this.expectedOutput = expectedOutput; + } + } +} diff --git a/core-java-modules/core-java-string-conversions/src/test/java/com/baeldung/stringtoint/StringToIntConverterUnitTest.java b/core-java-modules/core-java-string-conversions/src/test/java/com/baeldung/stringtoint/StringToIntConverterUnitTest.java deleted file mode 100644 index 2bfb4db161ac..000000000000 --- a/core-java-modules/core-java-string-conversions/src/test/java/com/baeldung/stringtoint/StringToIntConverterUnitTest.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.baeldung.stringtoint; - -import java.util.Arrays; -import java.util.List; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - -class StringToIntConverterUnitTest { - - @Test - void whenConvertingIntToString_thenInvalidCasesReturnIntegerMinValue() { - List testData = Arrays.asList( - new TestData("", Integer.MIN_VALUE), - new TestData(null, Integer.MIN_VALUE), - new TestData("23,56", Integer.MIN_VALUE), - new TestData("2147483648", Integer.MIN_VALUE), - new TestData("-2147483649", Integer.MIN_VALUE), - new TestData("hello", Integer.MIN_VALUE) - ); - testData.forEach(data -> { - Assertions.assertEquals(data.expectedOutput, StringToIntConverter.convertStringToIntUsingIntegerParseInt(data.input)); - Assertions.assertEquals(data.expectedOutput, StringToIntConverter.convertStringToIntUsingIntegerValueOf(data.input)); - Assertions.assertEquals(data.expectedOutput, StringToIntConverter.convertStringToIntUsingOptional(data.input)); - Assertions.assertEquals(data.expectedOutput, StringToIntConverter.convertStringToIntUsingIntegerDecode(data.input)); - Assertions.assertEquals(data.expectedOutput, StringToIntConverter.convertStringToIntUsingNumberUtils(data.input)); - }); - } - - @Test - void whenConvertingIntToString_thenValidCasesReturnUnboxedInt() { - List testData = Arrays.asList( - new TestData("23", 23), - new TestData("-23", -23) - ); - testData.forEach(data -> { - Assertions.assertEquals(data.expectedOutput, StringToIntConverter.convertStringToIntUsingIntegerParseInt(data.input)); - Assertions.assertEquals(data.expectedOutput, StringToIntConverter.convertStringToIntUsingIntegerValueOf(data.input)); - Assertions.assertEquals(data.expectedOutput, StringToIntConverter.convertStringToIntUsingOptional(data.input)); - Assertions.assertEquals(data.expectedOutput, StringToIntConverter.convertStringToIntUsingNumberUtils(data.input)); - Assertions.assertEquals(data.expectedOutput, StringToIntConverter.convertStringToIntUsingIntegerDecode(data.input)); - }); - } - - public static class TestData{ - String input; - Integer expectedOutput; - - TestData(String input, Integer expectedOutput){ - this.input = input; - this.expectedOutput = expectedOutput; - } - } -} \ No newline at end of file From 9dedaa523af8565fad406d1be66eb5bc26f0b3f8 Mon Sep 17 00:00:00 2001 From: Bipin kumar Date: Mon, 3 Apr 2023 19:54:23 +0530 Subject: [PATCH 011/390] JAVA-19726: Changes made for cleaning code (#13763) * JAVA-19726: Changes made for cleaning code * JAVA-19726: Changes made for cleaning code * JAVA-19726: Changes made for cleaning code --- .../hibernate/arraymapping/CustomIntegerArrayType.java | 5 +++-- .../hibernate/arraymapping/CustomStringArrayType.java | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/persistence-modules/hibernate-mapping/src/main/java/com/baeldung/hibernate/arraymapping/CustomIntegerArrayType.java b/persistence-modules/hibernate-mapping/src/main/java/com/baeldung/hibernate/arraymapping/CustomIntegerArrayType.java index eedaf2529fb4..1155a59a5757 100644 --- a/persistence-modules/hibernate-mapping/src/main/java/com/baeldung/hibernate/arraymapping/CustomIntegerArrayType.java +++ b/persistence-modules/hibernate-mapping/src/main/java/com/baeldung/hibernate/arraymapping/CustomIntegerArrayType.java @@ -7,6 +7,7 @@ import java.sql.SQLException; import java.sql.Types; import java.util.Arrays; +import java.util.Objects; import org.hibernate.HibernateException; import org.hibernate.engine.spi.SharedSessionContractImplementor; @@ -58,8 +59,8 @@ public void nullSafeSet(PreparedStatement st, Object value, int index, SharedSes @Override public Object deepCopy(Object value) throws HibernateException { - Integer[] a = (Integer[])value; - return a != null ? Arrays.copyOf(a, a.length) : null; + Integer[] arr = (Integer[]) value; + return arr != null ? Arrays.copyOf(arr, arr.length) : null; } @Override diff --git a/persistence-modules/hibernate-mapping/src/main/java/com/baeldung/hibernate/arraymapping/CustomStringArrayType.java b/persistence-modules/hibernate-mapping/src/main/java/com/baeldung/hibernate/arraymapping/CustomStringArrayType.java index 7d3893393e5c..ce50196513e8 100644 --- a/persistence-modules/hibernate-mapping/src/main/java/com/baeldung/hibernate/arraymapping/CustomStringArrayType.java +++ b/persistence-modules/hibernate-mapping/src/main/java/com/baeldung/hibernate/arraymapping/CustomStringArrayType.java @@ -7,6 +7,7 @@ import java.sql.SQLException; import java.sql.Types; import java.util.Arrays; +import java.util.Objects; import org.hibernate.HibernateException; import org.hibernate.engine.spi.SharedSessionContractImplementor; @@ -58,8 +59,8 @@ public void nullSafeSet(PreparedStatement st, Object value, int index, SharedSes @Override public Object deepCopy(Object value) throws HibernateException { - String[] a = (String[])value; - return a != null ? Arrays.copyOf(a, a.length) : null; + String[] arr = (String[]) value; + return arr != null ? Arrays.copyOf(arr, arr.length) : null; } @Override From 5ea41e8a3094f5ad9b19e081e758610758f20b09 Mon Sep 17 00:00:00 2001 From: anuragkumawat Date: Mon, 3 Apr 2023 21:11:26 +0530 Subject: [PATCH 012/390] JAVA-19549 Move A Spring Custom Annotation for a Better DAO article from spring-core-3 module to spring-data-jpa-annotations module (#13748) --- persistence-modules/spring-data-jpa-annotations/README.md | 1 + .../baeldung/customannotation/CustomAnnotationConfiguration.java | 0 .../src/main/java/com/baeldung/customannotation/DataAccess.java | 0 .../baeldung/customannotation/DataAccessAnnotationProcessor.java | 0 .../com/baeldung/customannotation/DataAccessFieldCallback.java | 0 .../src/main/java/com/baeldung/customannotation/GenericDAO.java | 0 .../src/test/java/com/baeldung/customannotation/Account.java | 0 .../java/com/baeldung/customannotation/BeanWithGenericDAO.java | 0 .../customannotation/DataAccessAnnotationIntegrationTest.java | 0 .../customannotation/DataAccessFieldCallbackIntegrationTest.java | 0 .../src/test/java/com/baeldung/customannotation/Person.java | 0 spring-core-3/README.md | 1 - 12 files changed, 1 insertion(+), 1 deletion(-) rename {spring-core-3 => persistence-modules/spring-data-jpa-annotations}/src/main/java/com/baeldung/customannotation/CustomAnnotationConfiguration.java (100%) rename {spring-core-3 => persistence-modules/spring-data-jpa-annotations}/src/main/java/com/baeldung/customannotation/DataAccess.java (100%) rename {spring-core-3 => persistence-modules/spring-data-jpa-annotations}/src/main/java/com/baeldung/customannotation/DataAccessAnnotationProcessor.java (100%) rename {spring-core-3 => persistence-modules/spring-data-jpa-annotations}/src/main/java/com/baeldung/customannotation/DataAccessFieldCallback.java (100%) rename {spring-core-3 => persistence-modules/spring-data-jpa-annotations}/src/main/java/com/baeldung/customannotation/GenericDAO.java (100%) rename {spring-core-3 => persistence-modules/spring-data-jpa-annotations}/src/test/java/com/baeldung/customannotation/Account.java (100%) rename {spring-core-3 => persistence-modules/spring-data-jpa-annotations}/src/test/java/com/baeldung/customannotation/BeanWithGenericDAO.java (100%) rename {spring-core-3 => persistence-modules/spring-data-jpa-annotations}/src/test/java/com/baeldung/customannotation/DataAccessAnnotationIntegrationTest.java (100%) rename {spring-core-3 => persistence-modules/spring-data-jpa-annotations}/src/test/java/com/baeldung/customannotation/DataAccessFieldCallbackIntegrationTest.java (100%) rename {spring-core-3 => persistence-modules/spring-data-jpa-annotations}/src/test/java/com/baeldung/customannotation/Person.java (100%) diff --git a/persistence-modules/spring-data-jpa-annotations/README.md b/persistence-modules/spring-data-jpa-annotations/README.md index 5a5440b1edaf..d7e6189ae540 100644 --- a/persistence-modules/spring-data-jpa-annotations/README.md +++ b/persistence-modules/spring-data-jpa-annotations/README.md @@ -10,6 +10,7 @@ This module contains articles about annotations used in Spring Data JPA - [Programmatic Transaction Management in Spring](https://www.baeldung.com/spring-programmatic-transaction-management) - [JPA Entity Lifecycle Events](https://www.baeldung.com/jpa-entity-lifecycle-events) - [Overriding Column Definition With @AttributeOverride](https://www.baeldung.com/jpa-attributeoverride) +- [A Spring Custom Annotation for a Better DAO](http://www.baeldung.com/spring-annotation-bean-pre-processor) ### Eclipse Config After importing the project into Eclipse, you may see the following error: diff --git a/spring-core-3/src/main/java/com/baeldung/customannotation/CustomAnnotationConfiguration.java b/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/customannotation/CustomAnnotationConfiguration.java similarity index 100% rename from spring-core-3/src/main/java/com/baeldung/customannotation/CustomAnnotationConfiguration.java rename to persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/customannotation/CustomAnnotationConfiguration.java diff --git a/spring-core-3/src/main/java/com/baeldung/customannotation/DataAccess.java b/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/customannotation/DataAccess.java similarity index 100% rename from spring-core-3/src/main/java/com/baeldung/customannotation/DataAccess.java rename to persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/customannotation/DataAccess.java diff --git a/spring-core-3/src/main/java/com/baeldung/customannotation/DataAccessAnnotationProcessor.java b/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/customannotation/DataAccessAnnotationProcessor.java similarity index 100% rename from spring-core-3/src/main/java/com/baeldung/customannotation/DataAccessAnnotationProcessor.java rename to persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/customannotation/DataAccessAnnotationProcessor.java diff --git a/spring-core-3/src/main/java/com/baeldung/customannotation/DataAccessFieldCallback.java b/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/customannotation/DataAccessFieldCallback.java similarity index 100% rename from spring-core-3/src/main/java/com/baeldung/customannotation/DataAccessFieldCallback.java rename to persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/customannotation/DataAccessFieldCallback.java diff --git a/spring-core-3/src/main/java/com/baeldung/customannotation/GenericDAO.java b/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/customannotation/GenericDAO.java similarity index 100% rename from spring-core-3/src/main/java/com/baeldung/customannotation/GenericDAO.java rename to persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/customannotation/GenericDAO.java diff --git a/spring-core-3/src/test/java/com/baeldung/customannotation/Account.java b/persistence-modules/spring-data-jpa-annotations/src/test/java/com/baeldung/customannotation/Account.java similarity index 100% rename from spring-core-3/src/test/java/com/baeldung/customannotation/Account.java rename to persistence-modules/spring-data-jpa-annotations/src/test/java/com/baeldung/customannotation/Account.java diff --git a/spring-core-3/src/test/java/com/baeldung/customannotation/BeanWithGenericDAO.java b/persistence-modules/spring-data-jpa-annotations/src/test/java/com/baeldung/customannotation/BeanWithGenericDAO.java similarity index 100% rename from spring-core-3/src/test/java/com/baeldung/customannotation/BeanWithGenericDAO.java rename to persistence-modules/spring-data-jpa-annotations/src/test/java/com/baeldung/customannotation/BeanWithGenericDAO.java diff --git a/spring-core-3/src/test/java/com/baeldung/customannotation/DataAccessAnnotationIntegrationTest.java b/persistence-modules/spring-data-jpa-annotations/src/test/java/com/baeldung/customannotation/DataAccessAnnotationIntegrationTest.java similarity index 100% rename from spring-core-3/src/test/java/com/baeldung/customannotation/DataAccessAnnotationIntegrationTest.java rename to persistence-modules/spring-data-jpa-annotations/src/test/java/com/baeldung/customannotation/DataAccessAnnotationIntegrationTest.java diff --git a/spring-core-3/src/test/java/com/baeldung/customannotation/DataAccessFieldCallbackIntegrationTest.java b/persistence-modules/spring-data-jpa-annotations/src/test/java/com/baeldung/customannotation/DataAccessFieldCallbackIntegrationTest.java similarity index 100% rename from spring-core-3/src/test/java/com/baeldung/customannotation/DataAccessFieldCallbackIntegrationTest.java rename to persistence-modules/spring-data-jpa-annotations/src/test/java/com/baeldung/customannotation/DataAccessFieldCallbackIntegrationTest.java diff --git a/spring-core-3/src/test/java/com/baeldung/customannotation/Person.java b/persistence-modules/spring-data-jpa-annotations/src/test/java/com/baeldung/customannotation/Person.java similarity index 100% rename from spring-core-3/src/test/java/com/baeldung/customannotation/Person.java rename to persistence-modules/spring-data-jpa-annotations/src/test/java/com/baeldung/customannotation/Person.java diff --git a/spring-core-3/README.md b/spring-core-3/README.md index 7232ad71a1d1..394f6e18573a 100644 --- a/spring-core-3/README.md +++ b/spring-core-3/README.md @@ -9,6 +9,5 @@ This module contains articles about core Spring functionality - [How to use the Spring FactoryBean?](https://www.baeldung.com/spring-factorybean) - [Design Patterns in the Spring Framework](https://www.baeldung.com/spring-framework-design-patterns) - [Difference Between BeanFactory and ApplicationContext](https://www.baeldung.com/spring-beanfactory-vs-applicationcontext) -- [A Spring Custom Annotation for a Better DAO](http://www.baeldung.com/spring-annotation-bean-pre-processor) - [Custom Scope in Spring](http://www.baeldung.com/spring-custom-scope) - More articles: [[<-- prev]](/spring-core-2) [[next -->]](/spring-core-4) From 6dd3dcd3730e685da3be19bf3a6e46cbcee142e0 Mon Sep 17 00:00:00 2001 From: anuragkumawat Date: Mon, 3 Apr 2023 22:14:08 +0530 Subject: [PATCH 013/390] JAVA-19554 Move Constructor Injection in Spring with Lombok article from spring-core-4 module to lombok-2 module (#13758) --- lombok-modules/lombok-2/README.md | 1 + lombok-modules/lombok-2/pom.xml | 4 ++++ .../src/main/java/com/baeldung/lombok/ApologizeService.java | 0 .../src/main/java/com/baeldung/lombok/FarewellService.java | 0 .../src/main/java/com/baeldung/lombok/GreetingService.java | 0 .../src/main/java/com/baeldung/lombok/ThankingService.java | 0 .../src/main/java/com/baeldung/lombok/Translator.java | 0 .../lombok/ApologizeServiceAutowiringIntegrationTest.java | 0 .../com/baeldung/lombok/ApologizeServiceIntegrationTest.java | 0 .../baeldung/lombok/FarewellAutowiringIntegrationTest.java | 0 .../com/baeldung/lombok/FarewellServiceIntegrationTest.java | 0 .../com/baeldung/lombok/GreetingServiceIntegrationTest.java | 0 .../src/test/java/com/baeldung/lombok/TestConfig.java | 0 .../lombok/ThankingServiceAutowiringIntegrationTest.java | 0 .../com/baeldung/lombok/ThankingServiceIntegrationTest.java | 0 spring-core-4/README.md | 1 - 16 files changed, 5 insertions(+), 1 deletion(-) rename {spring-core-4 => lombok-modules/lombok-2}/src/main/java/com/baeldung/lombok/ApologizeService.java (100%) rename {spring-core-4 => lombok-modules/lombok-2}/src/main/java/com/baeldung/lombok/FarewellService.java (100%) rename {spring-core-4 => lombok-modules/lombok-2}/src/main/java/com/baeldung/lombok/GreetingService.java (100%) rename {spring-core-4 => lombok-modules/lombok-2}/src/main/java/com/baeldung/lombok/ThankingService.java (100%) rename {spring-core-4 => lombok-modules/lombok-2}/src/main/java/com/baeldung/lombok/Translator.java (100%) rename {spring-core-4 => lombok-modules/lombok-2}/src/test/java/com/baeldung/lombok/ApologizeServiceAutowiringIntegrationTest.java (100%) rename {spring-core-4 => lombok-modules/lombok-2}/src/test/java/com/baeldung/lombok/ApologizeServiceIntegrationTest.java (100%) rename {spring-core-4 => lombok-modules/lombok-2}/src/test/java/com/baeldung/lombok/FarewellAutowiringIntegrationTest.java (100%) rename {spring-core-4 => lombok-modules/lombok-2}/src/test/java/com/baeldung/lombok/FarewellServiceIntegrationTest.java (100%) rename {spring-core-4 => lombok-modules/lombok-2}/src/test/java/com/baeldung/lombok/GreetingServiceIntegrationTest.java (100%) rename {spring-core-4 => lombok-modules/lombok-2}/src/test/java/com/baeldung/lombok/TestConfig.java (100%) rename {spring-core-4 => lombok-modules/lombok-2}/src/test/java/com/baeldung/lombok/ThankingServiceAutowiringIntegrationTest.java (100%) rename {spring-core-4 => lombok-modules/lombok-2}/src/test/java/com/baeldung/lombok/ThankingServiceIntegrationTest.java (100%) diff --git a/lombok-modules/lombok-2/README.md b/lombok-modules/lombok-2/README.md index d3b128734633..55149c0312c6 100644 --- a/lombok-modules/lombok-2/README.md +++ b/lombok-modules/lombok-2/README.md @@ -9,4 +9,5 @@ This module contains articles about Project Lombok. - [Lombok Using @With Annotations](https://www.baeldung.com/lombok-with-annotations) - [Lombok’s @ToString Annotation](https://www.baeldung.com/lombok-tostring) - [Jackson’s Deserialization With Lombok](https://www.baeldung.com/java-jackson-deserialization-lombok) +- [Constructor Injection in Spring with Lombok](https://www.baeldung.com/spring-injection-lombok) - More articles: [[<-- prev]](../lombok) diff --git a/lombok-modules/lombok-2/pom.xml b/lombok-modules/lombok-2/pom.xml index 0a7ad27ad63c..b805e6a31e87 100644 --- a/lombok-modules/lombok-2/pom.xml +++ b/lombok-modules/lombok-2/pom.xml @@ -25,6 +25,10 @@ jackson-databind ${jackson.version} + + org.springframework.boot + spring-boot-starter-web + \ No newline at end of file diff --git a/spring-core-4/src/main/java/com/baeldung/lombok/ApologizeService.java b/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/ApologizeService.java similarity index 100% rename from spring-core-4/src/main/java/com/baeldung/lombok/ApologizeService.java rename to lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/ApologizeService.java diff --git a/spring-core-4/src/main/java/com/baeldung/lombok/FarewellService.java b/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/FarewellService.java similarity index 100% rename from spring-core-4/src/main/java/com/baeldung/lombok/FarewellService.java rename to lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/FarewellService.java diff --git a/spring-core-4/src/main/java/com/baeldung/lombok/GreetingService.java b/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/GreetingService.java similarity index 100% rename from spring-core-4/src/main/java/com/baeldung/lombok/GreetingService.java rename to lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/GreetingService.java diff --git a/spring-core-4/src/main/java/com/baeldung/lombok/ThankingService.java b/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/ThankingService.java similarity index 100% rename from spring-core-4/src/main/java/com/baeldung/lombok/ThankingService.java rename to lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/ThankingService.java diff --git a/spring-core-4/src/main/java/com/baeldung/lombok/Translator.java b/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/Translator.java similarity index 100% rename from spring-core-4/src/main/java/com/baeldung/lombok/Translator.java rename to lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/Translator.java diff --git a/spring-core-4/src/test/java/com/baeldung/lombok/ApologizeServiceAutowiringIntegrationTest.java b/lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/ApologizeServiceAutowiringIntegrationTest.java similarity index 100% rename from spring-core-4/src/test/java/com/baeldung/lombok/ApologizeServiceAutowiringIntegrationTest.java rename to lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/ApologizeServiceAutowiringIntegrationTest.java diff --git a/spring-core-4/src/test/java/com/baeldung/lombok/ApologizeServiceIntegrationTest.java b/lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/ApologizeServiceIntegrationTest.java similarity index 100% rename from spring-core-4/src/test/java/com/baeldung/lombok/ApologizeServiceIntegrationTest.java rename to lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/ApologizeServiceIntegrationTest.java diff --git a/spring-core-4/src/test/java/com/baeldung/lombok/FarewellAutowiringIntegrationTest.java b/lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/FarewellAutowiringIntegrationTest.java similarity index 100% rename from spring-core-4/src/test/java/com/baeldung/lombok/FarewellAutowiringIntegrationTest.java rename to lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/FarewellAutowiringIntegrationTest.java diff --git a/spring-core-4/src/test/java/com/baeldung/lombok/FarewellServiceIntegrationTest.java b/lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/FarewellServiceIntegrationTest.java similarity index 100% rename from spring-core-4/src/test/java/com/baeldung/lombok/FarewellServiceIntegrationTest.java rename to lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/FarewellServiceIntegrationTest.java diff --git a/spring-core-4/src/test/java/com/baeldung/lombok/GreetingServiceIntegrationTest.java b/lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/GreetingServiceIntegrationTest.java similarity index 100% rename from spring-core-4/src/test/java/com/baeldung/lombok/GreetingServiceIntegrationTest.java rename to lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/GreetingServiceIntegrationTest.java diff --git a/spring-core-4/src/test/java/com/baeldung/lombok/TestConfig.java b/lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/TestConfig.java similarity index 100% rename from spring-core-4/src/test/java/com/baeldung/lombok/TestConfig.java rename to lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/TestConfig.java diff --git a/spring-core-4/src/test/java/com/baeldung/lombok/ThankingServiceAutowiringIntegrationTest.java b/lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/ThankingServiceAutowiringIntegrationTest.java similarity index 100% rename from spring-core-4/src/test/java/com/baeldung/lombok/ThankingServiceAutowiringIntegrationTest.java rename to lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/ThankingServiceAutowiringIntegrationTest.java diff --git a/spring-core-4/src/test/java/com/baeldung/lombok/ThankingServiceIntegrationTest.java b/lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/ThankingServiceIntegrationTest.java similarity index 100% rename from spring-core-4/src/test/java/com/baeldung/lombok/ThankingServiceIntegrationTest.java rename to lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/ThankingServiceIntegrationTest.java diff --git a/spring-core-4/README.md b/spring-core-4/README.md index 45011d15a98f..0338d5d6e809 100644 --- a/spring-core-4/README.md +++ b/spring-core-4/README.md @@ -7,6 +7,5 @@ This module contains articles about core Spring functionality - [Creating Spring Beans Through Factory Methods](https://www.baeldung.com/spring-beans-factory-methods) - [Spring BeanPostProcessor](https://www.baeldung.com/spring-beanpostprocessor) - [Using @Autowired in Abstract Classes](https://www.baeldung.com/spring-autowired-abstract-class) -- [Constructor Injection in Spring with Lombok](https://www.baeldung.com/spring-injection-lombok) - [The Spring ApplicationContext](https://www.baeldung.com/spring-application-context) - More articles: [[<-- prev]](/spring-core-3) [[next -->]](/spring-core-5) From d260f51d8bac16601bd76e56ea907149a28c2020 Mon Sep 17 00:00:00 2001 From: 3hsan <56245694+ehsansasanian@users.noreply.github.com> Date: Mon, 3 Apr 2023 19:13:45 +0200 Subject: [PATCH 014/390] Upgrade osgi module to JDK 11 by moving it to jdk9-and-above profile (#13728) --- osgi/pom.xml | 13 +++++++++++++ pom.xml | 4 ++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/osgi/pom.xml b/osgi/pom.xml index 3fa2dcdf027f..ecc8758ef90d 100644 --- a/osgi/pom.xml +++ b/osgi/pom.xml @@ -67,6 +67,17 @@ + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + ${maven.compiler.source} + ${maven.compiler.target} + + + @@ -84,6 +95,8 @@ 1.1 6.0.0 3.3.0 + 11 + 11 \ No newline at end of file diff --git a/pom.xml b/pom.xml index 0f532beaf22f..12688defa67d 100644 --- a/pom.xml +++ b/pom.xml @@ -367,7 +367,6 @@ muleesb - osgi persistence-modules web-modules @@ -567,7 +566,6 @@ lombok-modules muleesb - osgi persistence-modules web-modules @@ -744,6 +742,7 @@ + osgi spring-katharsis logging-modules spring-boot-modules @@ -991,6 +990,7 @@ + osgi spring-katharsis logging-modules spring-boot-modules From 61cf039ec19aef4ec16a2e7f1c68203c93c9900c Mon Sep 17 00:00:00 2001 From: panos-kakos <102670093+panos-kakos@users.noreply.github.com> Date: Mon, 3 Apr 2023 20:22:11 +0300 Subject: [PATCH 015/390] [JAVA-19668] (#13721) * [JAVA-19668] Moved libraries-5 module to jdk9-and-above profile * [JAVA-19668] Moved libraries-4 module to jdk9-and-above profile * [JAVA-19668] Moved libraries-6 module to jdk9-and-above profile * [JAVA-19668] Moved libraries module to jdk9-and-above profile + reverted changes fro libraries-6 * [JAVA-19668] Created libraries-jdk8 module * [JAVA-19668] Clean up --- core-java-modules/core-java-9/README.md | 1 - libraries-4/pom.xml | 11 +++ libraries-5/pom.xml | 2 +- libraries-6/README.md | 2 +- libraries-6/pom.xml | 66 +++++++++++++-- .../java/com/baeldung/sbe/MarketData.java | 0 .../com/baeldung/sbe/MarketDataSource.java | 0 .../baeldung/sbe/MarketDataStreamServer.java | 0 .../java/com/baeldung/sbe/MarketDataUtil.java | 0 .../src/main/resources/schema.xml | 0 .../com/baeldung/r/FastRMeanUnitTest.java | 1 + .../test/EncodeDecodeMarketDataUnitTest.java | 0 libraries-7/pom.xml | 81 ------------------- {libraries-7 => libraries-jdk8}/README.md | 4 +- libraries-jdk8/pom.xml | 40 +++++++++ .../chronicle/queue/ChronicleQueue.java | 0 .../main/java/reflections/ReflectionsApp.java | 71 ++++++++++++++++ .../queue/ChronicleQueueIntegrationTest.java | 3 + .../java/reflections/ReflectionsUnitTest.java | 50 ++++++++++++ libraries/pom.xml | 43 +++++----- pom.xml | 19 ++--- 21 files changed, 275 insertions(+), 119 deletions(-) rename {libraries-7 => libraries-6}/src/main/java/com/baeldung/sbe/MarketData.java (100%) rename {libraries-7 => libraries-6}/src/main/java/com/baeldung/sbe/MarketDataSource.java (100%) rename {libraries-7 => libraries-6}/src/main/java/com/baeldung/sbe/MarketDataStreamServer.java (100%) rename {libraries-7 => libraries-6}/src/main/java/com/baeldung/sbe/MarketDataUtil.java (100%) rename {libraries-7 => libraries-6}/src/main/resources/schema.xml (100%) rename {libraries-7 => libraries-6}/src/test/java/com/baeldung/test/EncodeDecodeMarketDataUnitTest.java (100%) delete mode 100644 libraries-7/pom.xml rename {libraries-7 => libraries-jdk8}/README.md (75%) create mode 100644 libraries-jdk8/pom.xml rename {libraries => libraries-jdk8}/src/main/java/com/baeldung/chronicle/queue/ChronicleQueue.java (100%) create mode 100644 libraries-jdk8/src/main/java/reflections/ReflectionsApp.java rename {libraries => libraries-jdk8}/src/test/java/com/baeldung/chronicle/queue/ChronicleQueueIntegrationTest.java (95%) create mode 100644 libraries-jdk8/src/test/java/reflections/ReflectionsUnitTest.java diff --git a/core-java-modules/core-java-9/README.md b/core-java-modules/core-java-9/README.md index 38965d88f1be..bd7df0c8a618 100644 --- a/core-java-modules/core-java-9/README.md +++ b/core-java-modules/core-java-9/README.md @@ -5,7 +5,6 @@ This module contains articles about Java 9 core features ### Relevant Articles: - [Method Handles in Java](https://www.baeldung.com/java-method-handles) -- [Introduction to Chronicle Queue](https://www.baeldung.com/java-chronicle-queue) - [Iterate Through a Range of Dates in Java](https://www.baeldung.com/java-iterate-date-range) - [Initialize a HashMap in Java](https://www.baeldung.com/java-initialize-hashmap) - [Immutable ArrayList in Java](https://www.baeldung.com/java-immutable-list) diff --git a/libraries-4/pom.xml b/libraries-4/pom.xml index 7d19f6d5041c..87e618ee5b7b 100644 --- a/libraries-4/pom.xml +++ b/libraries-4/pom.xml @@ -99,6 +99,16 @@ javax.el ${glassfish.web.version} + + org.openjfx + javafx-controls + ${javafx.version} + + + org.openjfx + javafx-fxml + ${javafx.version} + @@ -118,6 +128,7 @@ 3.0.0 2.2.4 1.2.0 + 19 \ No newline at end of file diff --git a/libraries-5/pom.xml b/libraries-5/pom.xml index fa1f232d1c25..c98a66c094b9 100644 --- a/libraries-5/pom.xml +++ b/libraries-5/pom.xml @@ -139,7 +139,7 @@ 4.3.8.RELEASE 2.12 2.5.11 - 0.6.5 + 0.8.1 3.0.14 2.5.5 3.0.2 diff --git a/libraries-6/README.md b/libraries-6/README.md index 8ef60b2e5498..bbebcbc1e007 100644 --- a/libraries-6/README.md +++ b/libraries-6/README.md @@ -12,8 +12,8 @@ Remember, for advanced libraries like [Jackson](/jackson) and [JUnit](/testing-m - [Guide to Resilience4j](https://www.baeldung.com/resilience4j) - [Implementing a FTP-Client in Java](https://www.baeldung.com/java-ftp-client) - [Introduction to Functional Java](https://www.baeldung.com/java-functional-library) -- [A Guide to the Reflections Library](https://www.baeldung.com/reflections-library) - [Introduction to Protonpack](https://www.baeldung.com/java-protonpack) +- [Guide to Simple Binary Encoding](https://www.baeldung.com/java-sbe) - [Java-R Integration](https://www.baeldung.com/java-r-integration) - [Using libphonenumber to Validate Phone Numbers](https://www.baeldung.com/java-libphonenumber) - [Apache Commons Collections vs Google Guava](https://www.baeldung.com/apache-commons-collections-vs-guava) diff --git a/libraries-6/pom.xml b/libraries-6/pom.xml index 3b932f2bd290..234fa1349e8e 100644 --- a/libraries-6/pom.xml +++ b/libraries-6/pom.xml @@ -53,12 +53,6 @@ ${mockftpserver.version} test - - - org.reflections - reflections - ${reflections.version} - org.apache.commons commons-lang3 @@ -106,6 +100,11 @@ modelmapper ${org.modelmapper.version} + + org.agrona + agrona + 1.17.1 + @@ -119,6 +118,60 @@ + + org.codehaus.mojo + exec-maven-plugin + 1.6.0 + + + generate-sources + + java + + + + + false + true + uk.co.real_logic.sbe.SbeTool + + + sbe.output.dir + ${project.build.directory}/generated-sources/java + + + + ${project.basedir}/src/main/resources/schema.xml + + ${project.build.directory}/generated-sources/java + + + + uk.co.real-logic + sbe-tool + 1.27.0 + + + + + org.codehaus.mojo + build-helper-maven-plugin + 3.0.0 + + + add-source + generate-sources + + add-source + + + + ${project.build.directory}/generated-sources/java/ + + + + + org.apache.maven.plugins maven-compiler-plugin @@ -137,7 +190,6 @@ 1.10.0 - 0.9.11 2.7.1 4.8.1 0.12.1 diff --git a/libraries-7/src/main/java/com/baeldung/sbe/MarketData.java b/libraries-6/src/main/java/com/baeldung/sbe/MarketData.java similarity index 100% rename from libraries-7/src/main/java/com/baeldung/sbe/MarketData.java rename to libraries-6/src/main/java/com/baeldung/sbe/MarketData.java diff --git a/libraries-7/src/main/java/com/baeldung/sbe/MarketDataSource.java b/libraries-6/src/main/java/com/baeldung/sbe/MarketDataSource.java similarity index 100% rename from libraries-7/src/main/java/com/baeldung/sbe/MarketDataSource.java rename to libraries-6/src/main/java/com/baeldung/sbe/MarketDataSource.java diff --git a/libraries-7/src/main/java/com/baeldung/sbe/MarketDataStreamServer.java b/libraries-6/src/main/java/com/baeldung/sbe/MarketDataStreamServer.java similarity index 100% rename from libraries-7/src/main/java/com/baeldung/sbe/MarketDataStreamServer.java rename to libraries-6/src/main/java/com/baeldung/sbe/MarketDataStreamServer.java diff --git a/libraries-7/src/main/java/com/baeldung/sbe/MarketDataUtil.java b/libraries-6/src/main/java/com/baeldung/sbe/MarketDataUtil.java similarity index 100% rename from libraries-7/src/main/java/com/baeldung/sbe/MarketDataUtil.java rename to libraries-6/src/main/java/com/baeldung/sbe/MarketDataUtil.java diff --git a/libraries-7/src/main/resources/schema.xml b/libraries-6/src/main/resources/schema.xml similarity index 100% rename from libraries-7/src/main/resources/schema.xml rename to libraries-6/src/main/resources/schema.xml diff --git a/libraries-6/src/test/java/com/baeldung/r/FastRMeanUnitTest.java b/libraries-6/src/test/java/com/baeldung/r/FastRMeanUnitTest.java index 4e7426b75a0e..2412bb751b65 100644 --- a/libraries-6/src/test/java/com/baeldung/r/FastRMeanUnitTest.java +++ b/libraries-6/src/test/java/com/baeldung/r/FastRMeanUnitTest.java @@ -1,5 +1,6 @@ package com.baeldung.r; + import org.junit.Assert; import org.junit.Ignore; import org.junit.Test; diff --git a/libraries-7/src/test/java/com/baeldung/test/EncodeDecodeMarketDataUnitTest.java b/libraries-6/src/test/java/com/baeldung/test/EncodeDecodeMarketDataUnitTest.java similarity index 100% rename from libraries-7/src/test/java/com/baeldung/test/EncodeDecodeMarketDataUnitTest.java rename to libraries-6/src/test/java/com/baeldung/test/EncodeDecodeMarketDataUnitTest.java diff --git a/libraries-7/pom.xml b/libraries-7/pom.xml deleted file mode 100644 index 67cc2326ebef..000000000000 --- a/libraries-7/pom.xml +++ /dev/null @@ -1,81 +0,0 @@ - - - 4.0.0 - libraries-7 - - - parent-modules - com.baeldung - 1.0.0-SNAPSHOT - - - - - org.agrona - agrona - 1.17.1 - - - - - - - org.codehaus.mojo - exec-maven-plugin - 1.6.0 - - - generate-sources - - java - - - - - false - true - uk.co.real_logic.sbe.SbeTool - - - sbe.output.dir - ${project.build.directory}/generated-sources/java - - - - ${project.basedir}/src/main/resources/schema.xml - - ${project.build.directory}/generated-sources/java - - - - uk.co.real-logic - sbe-tool - 1.27.0 - - - - - org.codehaus.mojo - build-helper-maven-plugin - 3.0.0 - - - add-source - generate-sources - - add-source - - - - ${project.build.directory}/generated-sources/java/ - - - - - - - - - \ No newline at end of file diff --git a/libraries-7/README.md b/libraries-jdk8/README.md similarity index 75% rename from libraries-7/README.md rename to libraries-jdk8/README.md index 6f0a7d2505a8..1aefc5428983 100644 --- a/libraries-7/README.md +++ b/libraries-jdk8/README.md @@ -8,5 +8,7 @@ The code examples related to different libraries are each in their own module. Remember, for advanced libraries like [Jackson](/jackson) and [JUnit](/testing-modules) we already have separate modules. Please make sure to have a look at the existing modules in such cases. ### Relevant articles -- [Guide to Simple Binary Encoding](https://www.baeldung.com/java-sbe) +- [Introduction to Chronicle Queue](https://www.baeldung.com/java-chronicle-queue) +- [A Guide to the Reflections Library](https://www.baeldung.com/reflections-library) + - More articles [[<-- prev]](/libraries-6) diff --git a/libraries-jdk8/pom.xml b/libraries-jdk8/pom.xml new file mode 100644 index 000000000000..31582e0bdd6e --- /dev/null +++ b/libraries-jdk8/pom.xml @@ -0,0 +1,40 @@ + + + 4.0.0 + libraries-jdk8 + + + parent-modules + com.baeldung + 1.0.0-SNAPSHOT + + + + + + org.reflections + reflections + ${reflections.version} + + + + net.openhft + chronicle + ${chronicle.version} + + + com.sun.java + tools + + + + + + + 0.9.11 + 3.6.4 + + + \ No newline at end of file diff --git a/libraries/src/main/java/com/baeldung/chronicle/queue/ChronicleQueue.java b/libraries-jdk8/src/main/java/com/baeldung/chronicle/queue/ChronicleQueue.java similarity index 100% rename from libraries/src/main/java/com/baeldung/chronicle/queue/ChronicleQueue.java rename to libraries-jdk8/src/main/java/com/baeldung/chronicle/queue/ChronicleQueue.java diff --git a/libraries-jdk8/src/main/java/reflections/ReflectionsApp.java b/libraries-jdk8/src/main/java/reflections/ReflectionsApp.java new file mode 100644 index 000000000000..39d0fafb1002 --- /dev/null +++ b/libraries-jdk8/src/main/java/reflections/ReflectionsApp.java @@ -0,0 +1,71 @@ +package reflections; + +import java.lang.reflect.Constructor; +import java.lang.reflect.Method; +import java.util.Date; +import java.util.Set; +import java.util.regex.Pattern; + +import org.reflections.Reflections; +import org.reflections.scanners.MethodAnnotationsScanner; +import org.reflections.scanners.MethodParameterScanner; +import org.reflections.scanners.ResourcesScanner; +import org.reflections.scanners.Scanner; +import org.reflections.scanners.SubTypesScanner; +import org.reflections.util.ClasspathHelper; +import org.reflections.util.ConfigurationBuilder; + +public class ReflectionsApp { + + public Set> getReflectionsSubTypes() { + Reflections reflections = new Reflections("org.reflections"); + Set> scannersSet = reflections.getSubTypesOf(Scanner.class); + return scannersSet; + } + + public Set> getJDKFunctinalInterfaces() { + Reflections reflections = new Reflections("java.util.function"); + Set> typesSet = reflections.getTypesAnnotatedWith(FunctionalInterface.class); + return typesSet; + } + + public Set getDateDeprecatedMethods() { + Reflections reflections = new Reflections(Date.class, new MethodAnnotationsScanner()); + Set deprecatedMethodsSet = reflections.getMethodsAnnotatedWith(Deprecated.class); + return deprecatedMethodsSet; + } + + @SuppressWarnings("rawtypes") + public Set getDateDeprecatedConstructors() { + Reflections reflections = new Reflections(Date.class, new MethodAnnotationsScanner()); + Set constructorsSet = reflections.getConstructorsAnnotatedWith(Deprecated.class); + return constructorsSet; + } + + public Set getMethodsWithDateParam() { + Reflections reflections = new Reflections(java.text.SimpleDateFormat.class, new MethodParameterScanner()); + Set methodsSet = reflections.getMethodsMatchParams(Date.class); + return methodsSet; + } + + public Set getMethodsWithVoidReturn() { + Reflections reflections = new Reflections(java.text.SimpleDateFormat.class, new MethodParameterScanner()); + Set methodsSet = reflections.getMethodsReturn(void.class); + return methodsSet; + } + + public Set getPomXmlPaths() { + Reflections reflections = new Reflections(new ResourcesScanner()); + Set resourcesSet = reflections.getResources(Pattern.compile(".*pom\\.xml")); + return resourcesSet; + } + + public Set> getReflectionsSubTypesUsingBuilder() { + Reflections reflections = new Reflections(new ConfigurationBuilder().setUrls(ClasspathHelper.forPackage("org.reflections")) + .setScanners(new SubTypesScanner())); + + Set> scannersSet = reflections.getSubTypesOf(Scanner.class); + return scannersSet; + } + +} diff --git a/libraries/src/test/java/com/baeldung/chronicle/queue/ChronicleQueueIntegrationTest.java b/libraries-jdk8/src/test/java/com/baeldung/chronicle/queue/ChronicleQueueIntegrationTest.java similarity index 95% rename from libraries/src/test/java/com/baeldung/chronicle/queue/ChronicleQueueIntegrationTest.java rename to libraries-jdk8/src/test/java/com/baeldung/chronicle/queue/ChronicleQueueIntegrationTest.java index 00e950031870..7e0bcb7d33f0 100644 --- a/libraries/src/test/java/com/baeldung/chronicle/queue/ChronicleQueueIntegrationTest.java +++ b/libraries-jdk8/src/test/java/com/baeldung/chronicle/queue/ChronicleQueueIntegrationTest.java @@ -8,6 +8,8 @@ import org.junit.Test; +import com.baeldung.chronicle.queue.ChronicleQueue; + import net.openhft.chronicle.Chronicle; import net.openhft.chronicle.ChronicleQueueBuilder; import net.openhft.chronicle.ExcerptTailer; @@ -15,6 +17,7 @@ public class ChronicleQueueIntegrationTest { +// @Ignore @Test public void givenSetOfValues_whenWriteToQueue_thenWriteSuccesfully() throws IOException { File queueDir = Files.createTempDirectory("chronicle-queue").toFile(); diff --git a/libraries-jdk8/src/test/java/reflections/ReflectionsUnitTest.java b/libraries-jdk8/src/test/java/reflections/ReflectionsUnitTest.java new file mode 100644 index 000000000000..510485520890 --- /dev/null +++ b/libraries-jdk8/src/test/java/reflections/ReflectionsUnitTest.java @@ -0,0 +1,50 @@ +package reflections; + +import static org.junit.jupiter.api.Assertions.assertFalse; + +import org.junit.jupiter.api.Test; + +public class ReflectionsUnitTest { + + @Test + public void givenTypeThenGetAllSubTypes() { + ReflectionsApp reflectionsApp = new ReflectionsApp(); + assertFalse(reflectionsApp.getReflectionsSubTypes() + .isEmpty()); + } + + @Test + public void givenTypeAndUsingBuilderThenGetAllSubTypes() { + ReflectionsApp reflectionsApp = new ReflectionsApp(); + assertFalse(reflectionsApp.getReflectionsSubTypesUsingBuilder() + .isEmpty()); + } + + @Test + public void givenAnnotationThenGetAllAnnotatedMethods() { + ReflectionsApp reflectionsApp = new ReflectionsApp(); + assertFalse(reflectionsApp.getDateDeprecatedMethods() + .isEmpty()); + } + + @Test + public void givenAnnotationThenGetAllAnnotatedConstructors() { + ReflectionsApp reflectionsApp = new ReflectionsApp(); + assertFalse(reflectionsApp.getDateDeprecatedConstructors() + .isEmpty()); + } + + @Test + public void givenParamTypeThenGetAllMethods() { + ReflectionsApp reflectionsApp = new ReflectionsApp(); + assertFalse(reflectionsApp.getMethodsWithDateParam() + .isEmpty()); + } + + @Test + public void givenReturnTypeThenGetAllMethods() { + ReflectionsApp reflectionsApp = new ReflectionsApp(); + assertFalse(reflectionsApp.getMethodsWithVoidReturn() + .isEmpty()); + } +} diff --git a/libraries/pom.xml b/libraries/pom.xml index 7bef56deb02b..2ab345c46989 100644 --- a/libraries/pom.xml +++ b/libraries/pom.xml @@ -64,7 +64,7 @@ org.datanucleus datanucleus-api-jdo - ${datanucleus.version} + ${datanucleus-api.version} org.datanucleus @@ -86,17 +86,7 @@ datanucleus-jdo-query ${datanucleus-jdo-query.version} - - net.openhft - chronicle - ${chronicle.version} - - - com.sun.java - tools - - - + org.springframework spring-web @@ -180,6 +170,23 @@ + + org.apache.maven.plugins + maven-surefire-plugin + + + --add-exports=java.base/jdk.internal.ref=ALL-UNNAMED + --add-exports=java.base/sun.nio.ch=ALL-UNNAMED + --add-exports=jdk.unsupported/sun.misc=ALL-UNNAMED + --add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED + --add-opens=jdk.compiler/com.sun.tools.javac=ALL-UNNAMED + --add-opens=java.base/java.lang=ALL-UNNAMED + --add-opens=java.base/java.lang.reflect=ALL-UNNAMED + --add-opens=java.base/java.io=ALL-UNNAMED + --add-opens=java.base/java.util=ALL-UNNAMED + + + org.datanucleus @@ -273,16 +280,16 @@ 1.15 1.23.0 0.9.4.0006L - 3.2.0-m7 - 5.1.1 - 5.0.2 + 3.2.1 + 6.0.3 + 6.0.1 + 6.0.0-release 5.0.0-release - 5.0.2 - 3.6.4 + 6.0.1 4.3.8.RELEASE 3.0.3 2.3.0 - 3.21.0-GA + 3.29.2-GA 0.9.12 3.0.2 3.6 diff --git a/pom.xml b/pom.xml index 12688defa67d..a81247211397 100644 --- a/pom.xml +++ b/pom.xml @@ -362,6 +362,7 @@ language-interop libraries-3 + libraries-jdk8 lombok-modules @@ -491,11 +492,7 @@ jhipster-5 jws - libraries - libraries-4 - libraries-5 libraries-6 - @@ -562,6 +559,7 @@ language-interop libraries-3 + libraries-jdk8 lombok-modules muleesb @@ -673,9 +671,6 @@ jhipster-5 jws - libraries - libraries-4 - libraries-5 libraries-6 @@ -896,8 +891,12 @@ jsoup ksqldb jsf + + libraries libraries-2 - libraries-7 + libraries-4 + libraries-5 + libraries-apache-commons libraries-apache-commons-collections libraries-apache-commons-io @@ -1145,7 +1144,9 @@ jsf ksqldb - libraries-7 + libraries + libraries-4 + libraries-5 libraries-apache-commons libraries-apache-commons-collections libraries-apache-commons-io From d186dc699727e5b3bda6b652f295b9e1254d4ca4 Mon Sep 17 00:00:00 2001 From: panos-kakos <102670093+panos-kakos@users.noreply.github.com> Date: Mon, 3 Apr 2023 20:27:36 +0300 Subject: [PATCH 016/390] [JAVA-18144] Moved jmh module to jdk9-and-above profile (#13725) * [JAVA-18144] Moved jmh module to jdk9-and-above profile * [JAVA-18144] Added configuration * [JAVA-18144] Upgraded dependencies * [JAVA-18144] Added compile argument --- jmh/pom.xml | 24 +++++++++++++------ .../com/baeldung/falsesharing/Striped64.java | 2 +- pom.xml | 4 ++-- 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/jmh/pom.xml b/jmh/pom.xml index 61f62efd5acb..6487b24ff483 100644 --- a/jmh/pom.xml +++ b/jmh/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 jmh 1.0-SNAPSHOT @@ -20,12 +20,12 @@ org.openjdk.jmh jmh-core - ${jmh-core.version} + 1.36 org.openjdk.jmh jmh-generator-annprocess - ${jmh-generator.version} + 1.36 org.openjdk.jol @@ -36,6 +36,15 @@ + + org.apache.maven.plugins + maven-compiler-plugin + + + --add-exports=java.base/jdk.internal.vm.annotation=ALL-UNNAMED + + + org.apache.maven.plugins maven-jar-plugin @@ -76,9 +85,10 @@ - 3.0.2 - 0.10 - 3.2.0 + 3.3.0 + 0.17 + 3.5.0 + 3.11.0 \ No newline at end of file diff --git a/jmh/src/main/java/com/baeldung/falsesharing/Striped64.java b/jmh/src/main/java/com/baeldung/falsesharing/Striped64.java index 71c34a9de34b..1cb55f3f4ec7 100644 --- a/jmh/src/main/java/com/baeldung/falsesharing/Striped64.java +++ b/jmh/src/main/java/com/baeldung/falsesharing/Striped64.java @@ -88,7 +88,7 @@ abstract class Striped64 extends Number { * JVM intrinsics note: It would be possible to use a release-only * form of CAS here, if it were provided. */ - @sun.misc.Contended static final class Cell { + @jdk.internal.vm.annotation.Contended static final class Cell { volatile long value; Cell(long x) { value = x; } final boolean cas(long cmp, long val) { diff --git a/pom.xml b/pom.xml index a81247211397..d44b83660778 100644 --- a/pom.xml +++ b/pom.xml @@ -358,7 +358,6 @@ jetbrains jhipster-5 - jmh language-interop libraries-3 @@ -555,7 +554,6 @@ java-jdi jhipster-5 - jmh language-interop libraries-3 @@ -813,6 +811,7 @@ data-structures ddd-contexts jackson-modules + jmh deeplearning4j docker-modules drools @@ -1063,6 +1062,7 @@ data-structures ddd-contexts jackson-modules + jmh deeplearning4j jmeter docker-modules From 3cdc10d6bb892a1dbd42b67d6649f33ac2b14c7f Mon Sep 17 00:00:00 2001 From: Michael Olayemi Date: Tue, 4 Apr 2023 03:06:12 +0100 Subject: [PATCH 017/390] BAEL-6226 Calculate Pi Java Program (#13693) * BAEL-6226 Calculate Pi Java Program * BAEL-6226 Calculate Pi Java Program --- .../core-java-numbers-6/README.md | 2 ++ core-java-modules/core-java-numbers-6/pom.xml | 29 +++++++++++++++++ .../com/baeldung/pi/PiProgramUnitTest.java | 31 +++++++++++++++++++ core-java-modules/pom.xml | 1 + 4 files changed, 63 insertions(+) create mode 100644 core-java-modules/core-java-numbers-6/README.md create mode 100644 core-java-modules/core-java-numbers-6/pom.xml create mode 100644 core-java-modules/core-java-numbers-6/src/test/java/com/baeldung/pi/PiProgramUnitTest.java diff --git a/core-java-modules/core-java-numbers-6/README.md b/core-java-modules/core-java-numbers-6/README.md new file mode 100644 index 000000000000..a96ddccabb39 --- /dev/null +++ b/core-java-modules/core-java-numbers-6/README.md @@ -0,0 +1,2 @@ +### Relevant Articles: + diff --git a/core-java-modules/core-java-numbers-6/pom.xml b/core-java-modules/core-java-numbers-6/pom.xml new file mode 100644 index 000000000000..4957eb89c67f --- /dev/null +++ b/core-java-modules/core-java-numbers-6/pom.xml @@ -0,0 +1,29 @@ + + 4.0.0 + core-java-numbers-6 + core-java-numbers-6 + jar + + + com.baeldung.core-java-modules + core-java-modules + 0.0.1-SNAPSHOT + + + + + + + + core-java-numbers-6 + + + src/main/resources + true + + + + + \ No newline at end of file diff --git a/core-java-modules/core-java-numbers-6/src/test/java/com/baeldung/pi/PiProgramUnitTest.java b/core-java-modules/core-java-numbers-6/src/test/java/com/baeldung/pi/PiProgramUnitTest.java new file mode 100644 index 000000000000..729346bc7476 --- /dev/null +++ b/core-java-modules/core-java-numbers-6/src/test/java/com/baeldung/pi/PiProgramUnitTest.java @@ -0,0 +1,31 @@ +package com.baeldung.pi; + +import static org.junit.Assert.*; + +import java.util.Random; +import org.junit.Test; + +public class PiProgramUnitTest { + + @Test + public void givenPiCalculator_whenCalculatePiWithTenThousandPoints_thenEstimatedPiIsWithinTolerance() { + int totalPoints = 10000; + int insideCircle = 0; + + Random random = new Random(); + + for (long i = 0; i < totalPoints; i++) { + double x = random.nextDouble() * 2 - 1; + double y = random.nextDouble() * 2 - 1; + + if (x * x + y * y <= 1) { + insideCircle++; + } + + } + double pi = 4.0 * insideCircle / totalPoints; + + assertEquals(Math.PI, pi, 0.01); + } + +} diff --git a/core-java-modules/pom.xml b/core-java-modules/pom.xml index e7894b2f4549..52360d060faf 100644 --- a/core-java-modules/pom.xml +++ b/core-java-modules/pom.xml @@ -115,6 +115,7 @@ core-java-numbers-3 core-java-numbers-4 core-java-numbers-5 + core-java-numbers-6 core-java-optional core-java-perf core-java-reflection From b0a84c94d219b5a091727a76aadb65e895a32e4b Mon Sep 17 00:00:00 2001 From: Forb Yuan Date: Mon, 3 Apr 2023 20:47:51 -0700 Subject: [PATCH 018/390] [BAEL-6203] Deserialize Generic Type with Jackson (#13764) --- .../jsongeneric/JsonResponse.java | 14 +++++++ .../deserialization/jsongeneric/User.java | 33 +++++++++++++++ .../GenericTypeDeserializerUnitTest.java | 40 +++++++++++++++++++ 3 files changed, 87 insertions(+) create mode 100644 jackson-modules/jackson-core/src/main/java/com/baeldung/jackson/deserialization/jsongeneric/JsonResponse.java create mode 100644 jackson-modules/jackson-core/src/main/java/com/baeldung/jackson/deserialization/jsongeneric/User.java create mode 100644 jackson-modules/jackson-core/src/test/java/com/baeldung/jackson/deserialization/jsongeneric/GenericTypeDeserializerUnitTest.java diff --git a/jackson-modules/jackson-core/src/main/java/com/baeldung/jackson/deserialization/jsongeneric/JsonResponse.java b/jackson-modules/jackson-core/src/main/java/com/baeldung/jackson/deserialization/jsongeneric/JsonResponse.java new file mode 100644 index 000000000000..14f6b3f8ad79 --- /dev/null +++ b/jackson-modules/jackson-core/src/main/java/com/baeldung/jackson/deserialization/jsongeneric/JsonResponse.java @@ -0,0 +1,14 @@ +package com.baeldung.jackson.deserialization.jsongeneric; + +public class JsonResponse { + + private T result; + + public T getResult() { + return result; + } + + public void setResult(T result) { + this.result = result; + } +} diff --git a/jackson-modules/jackson-core/src/main/java/com/baeldung/jackson/deserialization/jsongeneric/User.java b/jackson-modules/jackson-core/src/main/java/com/baeldung/jackson/deserialization/jsongeneric/User.java new file mode 100644 index 000000000000..1efb3af7f9d3 --- /dev/null +++ b/jackson-modules/jackson-core/src/main/java/com/baeldung/jackson/deserialization/jsongeneric/User.java @@ -0,0 +1,33 @@ +package com.baeldung.jackson.deserialization.jsongeneric; + +public class User { + + private Long id; + private String firstName; + private String lastName; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } +} + diff --git a/jackson-modules/jackson-core/src/test/java/com/baeldung/jackson/deserialization/jsongeneric/GenericTypeDeserializerUnitTest.java b/jackson-modules/jackson-core/src/test/java/com/baeldung/jackson/deserialization/jsongeneric/GenericTypeDeserializerUnitTest.java new file mode 100644 index 000000000000..24baeb7f1f68 --- /dev/null +++ b/jackson-modules/jackson-core/src/test/java/com/baeldung/jackson/deserialization/jsongeneric/GenericTypeDeserializerUnitTest.java @@ -0,0 +1,40 @@ +package com.baeldung.jackson.deserialization.jsongeneric; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.JavaType; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +class GenericTypeDeserializerUnitTest { + + ObjectMapper objectMapper = new ObjectMapper(); + + @Test + void givenJsonObject_whenDeserializeIntoGenericTypeByTypeReference_thenCorrect() throws JsonProcessingException { + String json = "{\"result\":{\"id\":1,\"firstName\":\"John\",\"lastName\":\"Lewis\"}}"; + + TypeReference> typeRef = new TypeReference>() {}; + JsonResponse jsonResponse = objectMapper.readValue(json, typeRef); + User user = jsonResponse.getResult(); + + assertThat(user.getId()).isEqualTo(1); + assertThat(user.getFirstName()).isEqualTo("John"); + assertThat(user.getLastName()).isEqualTo("Lewis"); + } + + @Test + void givenJsonObject_whenDeserializeIntoGenericTypeByJavaType_thenCorrect() throws JsonProcessingException { + String json = "{\"result\":{\"id\":1,\"firstName\":\"John\",\"lastName\":\"Lewis\"}}"; + + JavaType javaType = objectMapper.getTypeFactory().constructParametricType(JsonResponse.class, User.class); + JsonResponse jsonResponse = objectMapper.readValue(json, javaType); + User user = jsonResponse.getResult(); + + assertThat(user.getId()).isEqualTo(1); + assertThat(user.getFirstName()).isEqualTo("John"); + assertThat(user.getLastName()).isEqualTo("Lewis"); + } +} \ No newline at end of file From a3fc26ec50b35e37db940e035705204c1bd3b237 Mon Sep 17 00:00:00 2001 From: mariudotsh <33603097+mariudotsh@users.noreply.github.com> Date: Tue, 4 Apr 2023 09:54:37 +0200 Subject: [PATCH 019/390] BAEL-5985 Hibernate @CreationTimestamp and @UpdateTimestamp (#13690) * BAEL-5985 Hibernate @CreationTimestamp and @UpdateTimestamp * BAEL-5985 Remove unnecessary imports * BAEL-5985 Swap order in assertEquals --------- Co-authored-by: Mariusz Kaczmarczyk --- .../creationupdatetimestamp/model/Book.java | 57 +++++++++ ...reationUpdateTimestampIntegrationTest.java | 116 ++++++++++++++++++ 2 files changed, 173 insertions(+) create mode 100644 persistence-modules/hibernate-annotations/src/main/java/com/baeldung/hibernate/creationupdatetimestamp/model/Book.java create mode 100644 persistence-modules/hibernate-annotations/src/test/java/com/baeldung/hibernate/creationupdatetimestamp/HibernateCreationUpdateTimestampIntegrationTest.java diff --git a/persistence-modules/hibernate-annotations/src/main/java/com/baeldung/hibernate/creationupdatetimestamp/model/Book.java b/persistence-modules/hibernate-annotations/src/main/java/com/baeldung/hibernate/creationupdatetimestamp/model/Book.java new file mode 100644 index 000000000000..0677b46690eb --- /dev/null +++ b/persistence-modules/hibernate-annotations/src/main/java/com/baeldung/hibernate/creationupdatetimestamp/model/Book.java @@ -0,0 +1,57 @@ +package com.baeldung.hibernate.creationupdatetimestamp.model; + +import java.time.Instant; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; + +import org.hibernate.annotations.CreationTimestamp; +import org.hibernate.annotations.UpdateTimestamp; + +@Entity +public class Book { + @Id + @GeneratedValue + private Long id; + private String title; + @CreationTimestamp + private Instant createdOn; + @UpdateTimestamp + private Instant lastUpdatedOn; + + public Book() { + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public Instant getCreatedOn() { + return createdOn; + } + + public void setCreatedOn(Instant createdOn) { + this.createdOn = createdOn; + } + + public Instant getLastUpdatedOn() { + return lastUpdatedOn; + } + + public void setLastUpdatedOn(Instant lastUpdatedOn) { + this.lastUpdatedOn = lastUpdatedOn; + } +} diff --git a/persistence-modules/hibernate-annotations/src/test/java/com/baeldung/hibernate/creationupdatetimestamp/HibernateCreationUpdateTimestampIntegrationTest.java b/persistence-modules/hibernate-annotations/src/test/java/com/baeldung/hibernate/creationupdatetimestamp/HibernateCreationUpdateTimestampIntegrationTest.java new file mode 100644 index 000000000000..f309e9e22f61 --- /dev/null +++ b/persistence-modules/hibernate-annotations/src/test/java/com/baeldung/hibernate/creationupdatetimestamp/HibernateCreationUpdateTimestampIntegrationTest.java @@ -0,0 +1,116 @@ +package com.baeldung.hibernate.creationupdatetimestamp; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +import java.time.Instant; + +import org.h2.Driver; +import org.hibernate.Session; +import org.hibernate.SessionFactory; +import org.hibernate.boot.registry.StandardServiceRegistryBuilder; +import org.hibernate.cfg.Configuration; +import org.hibernate.dialect.H2Dialect; +import org.hibernate.service.ServiceRegistry; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + +import com.baeldung.hibernate.creationupdatetimestamp.model.Book; + +class HibernateCreationUpdateTimestampIntegrationTest { + + private static SessionFactory sessionFactory; + + private Session session; + + @BeforeAll + public static void beforeTests() { + Configuration configuration = new Configuration().addAnnotatedClass(Book.class) + .setProperty("hibernate.dialect", H2Dialect.class.getName()) + .setProperty("hibernate.connection.driver_class", Driver.class.getName()) + .setProperty("hibernate.connection.url", "jdbc:h2:mem:test") + .setProperty("hibernate.connection.username", "sa") + .setProperty("hibernate.connection.password", "") + .setProperty("hibernate.hbm2ddl.auto", "update"); + + ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()) + .build(); + + sessionFactory = configuration.buildSessionFactory(serviceRegistry); + } + + @Test + void whenCreatingEntity_ThenCreatedOnIsSet() { + session = sessionFactory.openSession(); + session.beginTransaction(); + Book book = new Book(); + + session.save(book); + session.getTransaction() + .commit(); + session.close(); + + assertNotNull(book.getCreatedOn()); + } + + @Test + void whenCreatingEntity_ThenCreatedOnAndLastUpdatedOnAreBothSet() { + session = sessionFactory.openSession(); + session.beginTransaction(); + Book book = new Book(); + + session.save(book); + session.getTransaction() + .commit(); + session.close(); + + assertNotNull(book.getCreatedOn()); + assertNotNull(book.getLastUpdatedOn()); + } + + @Test + void whenCreatingEntity_ThenCreatedOnAndLastUpdatedOnAreNotEqual() { + session = sessionFactory.openSession(); + session.beginTransaction(); + Book book = new Book(); + + session.save(book); + session.getTransaction() + .commit(); + session.close(); + + assertNotEquals(book.getCreatedOn(), book.getLastUpdatedOn()); + } + + @Test + void whenUpdatingEntity_ThenLastUpdatedOnIsUpdatedAndCreatedOnStaysTheSame() { + session = sessionFactory.openSession(); + session.beginTransaction(); + Book book = new Book(); + session.save(book); + session.flush(); + Instant createdOnAfterCreation = book.getCreatedOn(); + Instant lastUpdatedOnAfterCreation = book.getLastUpdatedOn(); + + String newName = "newName"; + book.setTitle(newName); + session.getTransaction() + .commit(); + session.close(); + Instant createdOnAfterUpdate = book.getCreatedOn(); + Instant lastUpdatedOnAfterUpdate = book.getLastUpdatedOn(); + + assertEquals(newName, book.getTitle()); + assertNotNull(createdOnAfterUpdate); + assertNotNull(lastUpdatedOnAfterUpdate); + assertEquals(createdOnAfterCreation, createdOnAfterUpdate); + assertNotEquals(lastUpdatedOnAfterCreation, lastUpdatedOnAfterUpdate); + } + + @AfterAll + static void afterTests() { + sessionFactory.close(); + } +} From 7e64fce5719148a8c000879e0a445afe2b34f06d Mon Sep 17 00:00:00 2001 From: kpentaris Date: Tue, 4 Apr 2023 14:39:51 +0300 Subject: [PATCH 020/390] Add application file for BAEL-4496 (#13762) --- .../com/baeldung/highcpu/Application.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 core-java-modules/core-java-19/src/main/java/com/baeldung/highcpu/Application.java diff --git a/core-java-modules/core-java-19/src/main/java/com/baeldung/highcpu/Application.java b/core-java-modules/core-java-19/src/main/java/com/baeldung/highcpu/Application.java new file mode 100644 index 000000000000..82162406b345 --- /dev/null +++ b/core-java-modules/core-java-19/src/main/java/com/baeldung/highcpu/Application.java @@ -0,0 +1,20 @@ +package com.baeldung.highcpu; + +import java.util.LinkedList; +import java.util.List; +import java.util.function.IntUnaryOperator; +import java.util.stream.IntStream; + +public class Application { + + static List generateList() { + return IntStream.range(0, 10000000).parallel().map(IntUnaryOperator.identity()).collect(LinkedList::new, List::add, List::addAll); + } + + public static void main(String[] args) { + List list = generateList(); + long start = System.nanoTime(); + int value = list.get(9500000); + System.out.printf("Found value %d in %d nanos\n", value, (System.nanoTime() - start)); + } +} From ee5f5b2015ed408aafa043e62312b81f3a0e4c02 Mon Sep 17 00:00:00 2001 From: Adrian Bob Date: Tue, 4 Apr 2023 16:49:54 +0300 Subject: [PATCH 021/390] BAEL-6071: Resilience4j events endpoints (#13697) * Add project for Resilience4j Events Endpoints article * Update README * Add spring-boot-resilience4j module * Renamed test class to meet constraints * Update package structure * Added formatting * Replaces .parallel() with Executor * Updated concurrent calls for bulkhead test --- spring-boot-modules/pom.xml | 1 + .../spring-boot-resilience4j/README.md | 3 + .../spring-boot-resilience4j/pom.xml | 53 +++ .../eventendpoints/ApiExceptionHandler.java | 29 ++ .../eventendpoints/ExternalAPICaller.java | 28 ++ .../ExternalApiCallerConfig.java | 14 + .../eventendpoints/ResilientApp.java | 12 + .../ResilientAppController.java | 58 ++++ .../src/main/resources/application.yml | 60 ++++ ...ResilientAppControllerIntegrationTest.java | 318 ++++++++++++++++++ .../eventendpoints/model/BulkheadEvent.java | 50 +++ .../eventendpoints/model/BulkheadEvents.java | 16 + .../model/CircuitBreakerEvent.java | 81 +++++ .../model/CircuitBreakerEvents.java | 16 + .../model/RateLimiterEvent.java | 50 +++ .../model/RateLimiterEvents.java | 16 + .../eventendpoints/model/RetryEvent.java | 70 ++++ .../eventendpoints/model/RetryEvents.java | 16 + .../model/TimeLimiterEvent.java | 50 +++ .../model/TimeLimiterEvents.java | 16 + 20 files changed, 957 insertions(+) create mode 100644 spring-boot-modules/spring-boot-resilience4j/README.md create mode 100644 spring-boot-modules/spring-boot-resilience4j/pom.xml create mode 100644 spring-boot-modules/spring-boot-resilience4j/src/main/java/com/baeldung/resilience4j/eventendpoints/ApiExceptionHandler.java create mode 100644 spring-boot-modules/spring-boot-resilience4j/src/main/java/com/baeldung/resilience4j/eventendpoints/ExternalAPICaller.java create mode 100644 spring-boot-modules/spring-boot-resilience4j/src/main/java/com/baeldung/resilience4j/eventendpoints/ExternalApiCallerConfig.java create mode 100644 spring-boot-modules/spring-boot-resilience4j/src/main/java/com/baeldung/resilience4j/eventendpoints/ResilientApp.java create mode 100644 spring-boot-modules/spring-boot-resilience4j/src/main/java/com/baeldung/resilience4j/eventendpoints/ResilientAppController.java create mode 100644 spring-boot-modules/spring-boot-resilience4j/src/main/resources/application.yml create mode 100644 spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/ResilientAppControllerIntegrationTest.java create mode 100644 spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/BulkheadEvent.java create mode 100644 spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/BulkheadEvents.java create mode 100644 spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/CircuitBreakerEvent.java create mode 100644 spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/CircuitBreakerEvents.java create mode 100644 spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/RateLimiterEvent.java create mode 100644 spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/RateLimiterEvents.java create mode 100644 spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/RetryEvent.java create mode 100644 spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/RetryEvents.java create mode 100644 spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/TimeLimiterEvent.java create mode 100644 spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/TimeLimiterEvents.java diff --git a/spring-boot-modules/pom.xml b/spring-boot-modules/pom.xml index 6d542f40ddb2..83b935f845cc 100644 --- a/spring-boot-modules/pom.xml +++ b/spring-boot-modules/pom.xml @@ -93,6 +93,7 @@ spring-boot-3-native spring-boot-3-observation spring-boot-3-test-pitfalls + spring-boot-resilience4j diff --git a/spring-boot-modules/spring-boot-resilience4j/README.md b/spring-boot-modules/spring-boot-resilience4j/README.md new file mode 100644 index 000000000000..e6c73674ceee --- /dev/null +++ b/spring-boot-modules/spring-boot-resilience4j/README.md @@ -0,0 +1,3 @@ +### Relevant Articles: + +- [Resilience4j Events Endpoints](https://www.baeldung.com/resilience4j-events-endpoints) \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-resilience4j/pom.xml b/spring-boot-modules/spring-boot-resilience4j/pom.xml new file mode 100644 index 000000000000..609bc7fc4955 --- /dev/null +++ b/spring-boot-modules/spring-boot-resilience4j/pom.xml @@ -0,0 +1,53 @@ + + + 4.0.0 + com.example + spring-boot-resilience4j + 0.0.1-SNAPSHOT + spring-boot-resilience4j + + + com.baeldung.spring-boot-modules + spring-boot-modules + 1.0.0-SNAPSHOT + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-aop + + + org.springframework.boot + spring-boot-starter-actuator + + + io.github.resilience4j + resilience4j-spring-boot2 + 2.0.2 + + + com.fasterxml.jackson.datatype + jackson-datatype-jsr310 + 2.14.2 + + + org.springframework.boot + spring-boot-starter-test + test + + + com.github.tomakehurst + wiremock-jre8 + 2.35.0 + test + + + + \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-resilience4j/src/main/java/com/baeldung/resilience4j/eventendpoints/ApiExceptionHandler.java b/spring-boot-modules/spring-boot-resilience4j/src/main/java/com/baeldung/resilience4j/eventendpoints/ApiExceptionHandler.java new file mode 100644 index 000000000000..4e14d5c532e4 --- /dev/null +++ b/spring-boot-modules/spring-boot-resilience4j/src/main/java/com/baeldung/resilience4j/eventendpoints/ApiExceptionHandler.java @@ -0,0 +1,29 @@ +package com.baeldung.resilience4j.eventendpoints; + +import io.github.resilience4j.bulkhead.BulkheadFullException; +import io.github.resilience4j.circuitbreaker.CallNotPermittedException; +import io.github.resilience4j.ratelimiter.RequestNotPermitted; +import java.util.concurrent.TimeoutException; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseStatus; + +@ControllerAdvice +public class ApiExceptionHandler { + @ExceptionHandler({CallNotPermittedException.class}) + @ResponseStatus(HttpStatus.SERVICE_UNAVAILABLE) + public void handleCallNotPermittedException() {} + + @ExceptionHandler({TimeoutException.class}) + @ResponseStatus(HttpStatus.REQUEST_TIMEOUT) + public void handleTimeoutException() {} + + @ExceptionHandler({BulkheadFullException.class}) + @ResponseStatus(HttpStatus.BANDWIDTH_LIMIT_EXCEEDED) + public void handleBulkheadFullException() {} + + @ExceptionHandler({RequestNotPermitted.class}) + @ResponseStatus(HttpStatus.TOO_MANY_REQUESTS) + public void handleRequestNotPermitted() {} +} diff --git a/spring-boot-modules/spring-boot-resilience4j/src/main/java/com/baeldung/resilience4j/eventendpoints/ExternalAPICaller.java b/spring-boot-modules/spring-boot-resilience4j/src/main/java/com/baeldung/resilience4j/eventendpoints/ExternalAPICaller.java new file mode 100644 index 000000000000..a860e7e3ccb0 --- /dev/null +++ b/spring-boot-modules/spring-boot-resilience4j/src/main/java/com/baeldung/resilience4j/eventendpoints/ExternalAPICaller.java @@ -0,0 +1,28 @@ +package com.baeldung.resilience4j.eventendpoints; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.web.client.RestTemplate; + +@Component +public class ExternalAPICaller { + private final RestTemplate restTemplate; + + @Autowired + public ExternalAPICaller(RestTemplate restTemplate) { + this.restTemplate = restTemplate; + } + + public String callApi() { + return restTemplate.getForObject("/api/external", String.class); + } + + public String callApiWithDelay() { + String result = restTemplate.getForObject("/api/external", String.class); + try { + Thread.sleep(5000); + } catch (InterruptedException ignore) { + } + return result; + } +} diff --git a/spring-boot-modules/spring-boot-resilience4j/src/main/java/com/baeldung/resilience4j/eventendpoints/ExternalApiCallerConfig.java b/spring-boot-modules/spring-boot-resilience4j/src/main/java/com/baeldung/resilience4j/eventendpoints/ExternalApiCallerConfig.java new file mode 100644 index 000000000000..7145e588776b --- /dev/null +++ b/spring-boot-modules/spring-boot-resilience4j/src/main/java/com/baeldung/resilience4j/eventendpoints/ExternalApiCallerConfig.java @@ -0,0 +1,14 @@ +package com.baeldung.resilience4j.eventendpoints; + +import org.springframework.boot.web.client.RestTemplateBuilder; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.client.RestTemplate; + +@Configuration +public class ExternalApiCallerConfig { + @Bean + public RestTemplate restTemplate() { + return new RestTemplateBuilder().rootUri("http://localhost:9090").build(); + } +} diff --git a/spring-boot-modules/spring-boot-resilience4j/src/main/java/com/baeldung/resilience4j/eventendpoints/ResilientApp.java b/spring-boot-modules/spring-boot-resilience4j/src/main/java/com/baeldung/resilience4j/eventendpoints/ResilientApp.java new file mode 100644 index 000000000000..35b999a9de44 --- /dev/null +++ b/spring-boot-modules/spring-boot-resilience4j/src/main/java/com/baeldung/resilience4j/eventendpoints/ResilientApp.java @@ -0,0 +1,12 @@ +package com.baeldung.resilience4j.eventendpoints; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication() +public class ResilientApp { + + public static void main(String[] args) { + SpringApplication.run(ResilientApp.class, args); + } +} diff --git a/spring-boot-modules/spring-boot-resilience4j/src/main/java/com/baeldung/resilience4j/eventendpoints/ResilientAppController.java b/spring-boot-modules/spring-boot-resilience4j/src/main/java/com/baeldung/resilience4j/eventendpoints/ResilientAppController.java new file mode 100644 index 000000000000..ccd0108c2ffc --- /dev/null +++ b/spring-boot-modules/spring-boot-resilience4j/src/main/java/com/baeldung/resilience4j/eventendpoints/ResilientAppController.java @@ -0,0 +1,58 @@ +package com.baeldung.resilience4j.eventendpoints; + +import io.github.resilience4j.bulkhead.annotation.Bulkhead; +import io.github.resilience4j.circuitbreaker.annotation.CircuitBreaker; +import io.github.resilience4j.ratelimiter.annotation.RateLimiter; +import io.github.resilience4j.retry.annotation.Retry; +import io.github.resilience4j.timelimiter.annotation.TimeLimiter; +import java.util.concurrent.CompletableFuture; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/api/") +public class ResilientAppController { + + private final ExternalAPICaller externalAPICaller; + + @Autowired + public ResilientAppController(ExternalAPICaller externalApi) { + this.externalAPICaller = externalApi; + } + + @GetMapping("/circuit-breaker") + @CircuitBreaker(name = "externalService") + public String circuitBreakerApi() { + return externalAPICaller.callApi(); + } + + @GetMapping("/retry") + @Retry(name = "externalService", fallbackMethod = "fallbackAfterRetry") + public String retryApi() { + return externalAPICaller.callApi(); + } + + @GetMapping("/bulkhead") + @Bulkhead(name = "externalService") + public String bulkheadApi() { + return externalAPICaller.callApi(); + } + + @GetMapping("/rate-limiter") + @RateLimiter(name = "externalService") + public String rateLimitApi() { + return externalAPICaller.callApi(); + } + + @GetMapping("/time-limiter") + @TimeLimiter(name = "externalService") + public CompletableFuture timeLimiterApi() { + return CompletableFuture.supplyAsync(externalAPICaller::callApiWithDelay); + } + + public String fallbackAfterRetry(Exception ex) { + return "all retries have exhausted"; + } +} diff --git a/spring-boot-modules/spring-boot-resilience4j/src/main/resources/application.yml b/spring-boot-modules/spring-boot-resilience4j/src/main/resources/application.yml new file mode 100644 index 000000000000..81904f56d98e --- /dev/null +++ b/spring-boot-modules/spring-boot-resilience4j/src/main/resources/application.yml @@ -0,0 +1,60 @@ +management: + endpoints: + web: + exposure: + include: '*' + +resilience4j.circuitbreaker: + configs: + default: + registerHealthIndicator: true + slidingWindowSize: 10 + minimumNumberOfCalls: 5 + permittedNumberOfCallsInHalfOpenState: 3 + automaticTransitionFromOpenToHalfOpenEnabled: true + waitDurationInOpenState: 5s + failureRateThreshold: 50 + eventConsumerBufferSize: 50 + instances: + externalService: + baseConfig: default + +resilience4j.retry: + configs: + default: + maxAttempts: 3 + waitDuration: 100 + instances: + externalService: + baseConfig: default + +resilience4j.timelimiter: + configs: + default: + cancelRunningFuture: true + timeoutDuration: 2s + instances: + externalService: + baseConfig: default + +resilience4j.bulkhead: + configs: + default: + max-concurrent-calls: 3 + max-wait-duration: 1 + instances: + externalService: + baseConfig: default + +resilience4j.ratelimiter: + configs: + default: + limit-for-period: 5 + limit-refresh-period: 60s + timeout-duration: 0s + allow-health-indicator-to-fail: true + subscribe-for-events: true + event-consumer-buffer-size: 50 + instances: + externalService: + baseConfig: default \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/ResilientAppControllerIntegrationTest.java b/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/ResilientAppControllerIntegrationTest.java new file mode 100644 index 000000000000..ae1b89764df3 --- /dev/null +++ b/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/ResilientAppControllerIntegrationTest.java @@ -0,0 +1,318 @@ +package com.baeldung.resilience4j.eventendpoints; + +import static com.github.tomakehurst.wiremock.client.WireMock.*; +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.springframework.http.HttpStatus.*; + +import com.baeldung.resilience4j.eventendpoints.model.*; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.datatype.jsr310.JSR310Module; +import com.github.tomakehurst.wiremock.client.WireMock; +import com.github.tomakehurst.wiremock.core.WireMockConfiguration; +import com.github.tomakehurst.wiremock.junit5.WireMockExtension; +import java.net.URI; +import java.nio.charset.Charset; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.*; +import java.util.stream.IntStream; +import org.apache.commons.io.IOUtils; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.RegisterExtension; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.test.web.server.LocalServerPort; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; + +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +class ResilientAppControllerIntegrationTest { + + @Autowired private TestRestTemplate restTemplate; + + @LocalServerPort private Integer port; + + private static final ObjectMapper objectMapper = + new ObjectMapper().registerModule(new JSR310Module()); + + @RegisterExtension + static WireMockExtension EXTERNAL_SERVICE = + WireMockExtension.newInstance() + .options(WireMockConfiguration.wireMockConfig().port(9090)) + .build(); + + @Test + void testCircuitBreakerEvents() throws Exception { + EXTERNAL_SERVICE.stubFor(WireMock.get("/api/external").willReturn(serverError())); + + IntStream.rangeClosed(1, 5) + .forEach( + i -> { + ResponseEntity response = + restTemplate.getForEntity("/api/circuit-breaker", String.class); + assertThat(response.getStatusCode()).isEqualTo(HttpStatus.INTERNAL_SERVER_ERROR); + }); + + // Fetch the events generated by the above calls + List circuitBreakerEvents = getCircuitBreakerEvents(); + assertThat(circuitBreakerEvents.size()).isEqualTo(7); + + // The first 5 events are the error events corresponding to the above server error responses + IntStream.rangeClosed(0, 4) + .forEach( + i -> { + assertThat(circuitBreakerEvents.get(i).getCircuitBreakerName()) + .isEqualTo("externalService"); + assertThat(circuitBreakerEvents.get(i).getType()).isEqualTo("ERROR"); + assertThat(circuitBreakerEvents.get(i).getCreationTime()).isNotNull(); + assertThat(circuitBreakerEvents.get(i).getErrorMessage()).isNotNull(); + assertThat(circuitBreakerEvents.get(i).getDurationInMs()).isNotNull(); + assertThat(circuitBreakerEvents.get(i).getStateTransition()).isNull(); + }); + + // Following event signals the configured failure rate exceeded + CircuitBreakerEvent failureRateExceededEvent = circuitBreakerEvents.get(5); + assertThat(failureRateExceededEvent.getCircuitBreakerName()).isEqualTo("externalService"); + assertThat(failureRateExceededEvent.getType()).isEqualTo("FAILURE_RATE_EXCEEDED"); + assertThat(failureRateExceededEvent.getCreationTime()).isNotNull(); + assertThat(failureRateExceededEvent.getErrorMessage()).isNull(); + assertThat(failureRateExceededEvent.getDurationInMs()).isNull(); + assertThat(failureRateExceededEvent.getStateTransition()).isNull(); + + // Following event signals the state transition from CLOSED TO OPEN + CircuitBreakerEvent stateTransitionEvent = circuitBreakerEvents.get(6); + assertThat(stateTransitionEvent.getCircuitBreakerName()).isEqualTo("externalService"); + assertThat(stateTransitionEvent.getType()).isEqualTo("STATE_TRANSITION"); + assertThat(stateTransitionEvent.getCreationTime()).isNotNull(); + assertThat(stateTransitionEvent.getErrorMessage()).isNull(); + assertThat(stateTransitionEvent.getDurationInMs()).isNull(); + assertThat(stateTransitionEvent.getStateTransition()).isEqualTo("CLOSED_TO_OPEN"); + + IntStream.rangeClosed(1, 5) + .forEach( + i -> { + ResponseEntity response = + restTemplate.getForEntity("/api/circuit-breaker", String.class); + assertThat(response.getStatusCode()).isEqualTo(HttpStatus.SERVICE_UNAVAILABLE); + }); + + /// Fetch the events generated by the above calls + List updatedCircuitBreakerEvents = getCircuitBreakerEvents(); + assertThat(updatedCircuitBreakerEvents.size()).isEqualTo(12); + + // Newly added events will be of type NOT_PERMITTED since the Circuit Breaker is in OPEN state + IntStream.rangeClosed(7, 11) + .forEach( + i -> { + assertThat(updatedCircuitBreakerEvents.get(i).getCircuitBreakerName()) + .isEqualTo("externalService"); + assertThat(updatedCircuitBreakerEvents.get(i).getType()).isEqualTo("NOT_PERMITTED"); + assertThat(updatedCircuitBreakerEvents.get(i).getCreationTime()).isNotNull(); + assertThat(updatedCircuitBreakerEvents.get(i).getErrorMessage()).isNull(); + assertThat(updatedCircuitBreakerEvents.get(i).getDurationInMs()).isNull(); + assertThat(updatedCircuitBreakerEvents.get(i).getStateTransition()).isNull(); + }); + + EXTERNAL_SERVICE.verify(5, getRequestedFor(urlEqualTo("/api/external"))); + } + + private List getCircuitBreakerEvents() throws Exception { + String jsonEventsList = + IOUtils.toString( + new URI("http://localhost:" + port + "/actuator/circuitbreakerevents"), + Charset.forName("UTF-8")); + CircuitBreakerEvents circuitBreakerEvents = + objectMapper.readValue(jsonEventsList, CircuitBreakerEvents.class); + return circuitBreakerEvents.getCircuitBreakerEvents(); + } + + @Test + void testRetryEvents() throws Exception { + EXTERNAL_SERVICE.stubFor(WireMock.get("/api/external").willReturn(ok())); + ResponseEntity response1 = restTemplate.getForEntity("/api/retry", String.class); + EXTERNAL_SERVICE.verify(1, getRequestedFor(urlEqualTo("/api/external"))); + + EXTERNAL_SERVICE.resetRequests(); + + EXTERNAL_SERVICE.stubFor(WireMock.get("/api/external").willReturn(serverError())); + ResponseEntity response2 = restTemplate.getForEntity("/api/retry", String.class); + assertThat(response2.getBody()).isEqualTo("all retries have exhausted"); + EXTERNAL_SERVICE.verify(3, getRequestedFor(urlEqualTo("/api/external"))); + + List retryEvents = getRetryEvents(); + assertThat(retryEvents.size()).isEqualTo(3); + + // First 2 events should be retry events + IntStream.rangeClosed(0, 1) + .forEach( + i -> { + assertThat(retryEvents.get(i).getRetryName()).isEqualTo("externalService"); + assertThat(retryEvents.get(i).getType()).isEqualTo("RETRY"); + assertThat(retryEvents.get(i).getCreationTime()).isNotNull(); + assertThat(retryEvents.get(i).getErrorMessage()).isNotNull(); + assertThat(retryEvents.get(i).getNumberOfAttempts()).isEqualTo(i + 1); + }); + + // Last event should be an error event because the configured num of retries is reached + RetryEvent errorRetryEvent = retryEvents.get(2); + assertThat(errorRetryEvent.getRetryName()).isEqualTo("externalService"); + assertThat(errorRetryEvent.getType()).isEqualTo("ERROR"); + assertThat(errorRetryEvent.getCreationTime()).isNotNull(); + assertThat(errorRetryEvent.getErrorMessage()).isNotNull(); + assertThat(errorRetryEvent.getNumberOfAttempts()).isEqualTo(3); + } + + private List getRetryEvents() throws Exception { + String jsonEventsList = + IOUtils.toString( + new URI("http://localhost:" + port + "/actuator/retryevents"), + Charset.forName("UTF-8")); + RetryEvents retryEvents = objectMapper.readValue(jsonEventsList, RetryEvents.class); + return retryEvents.getRetryEvents(); + } + + @Test + void testTimeLimiterEvents() throws Exception { + EXTERNAL_SERVICE.stubFor(WireMock.get("/api/external").willReturn(ok())); + ResponseEntity response = restTemplate.getForEntity("/api/time-limiter", String.class); + + assertThat(response.getStatusCode()).isEqualTo(HttpStatus.REQUEST_TIMEOUT); + EXTERNAL_SERVICE.verify(1, getRequestedFor(urlEqualTo("/api/external"))); + + List timeLimiterEvents = getTimeLimiterEvents(); + assertThat(timeLimiterEvents.size()).isEqualTo(1); + TimeLimiterEvent timeoutEvent = timeLimiterEvents.get(0); + assertThat(timeoutEvent.getTimeLimiterName()).isEqualTo("externalService"); + assertThat(timeoutEvent.getType()).isEqualTo("TIMEOUT"); + assertThat(timeoutEvent.getCreationTime()).isNotNull(); + } + + private List getTimeLimiterEvents() throws Exception { + String jsonEventsList = + IOUtils.toString( + new URI("http://localhost:" + port + "/actuator/timelimiterevents"), + Charset.forName("UTF-8")); + TimeLimiterEvents timeLimiterEvents = + objectMapper.readValue(jsonEventsList, TimeLimiterEvents.class); + return timeLimiterEvents.getTimeLimiterEvents(); + } + + @Test + void testBulkheadEvents() throws Exception { + EXTERNAL_SERVICE.stubFor(WireMock.get("/api/external").willReturn(ok())); + Map responseStatusCount = new ConcurrentHashMap<>(); + ExecutorService executorService = Executors.newFixedThreadPool(5); + + List> tasks = new ArrayList<>(); + IntStream.rangeClosed(1, 5) + .forEach( + i -> + tasks.add( + () -> { + ResponseEntity response = + restTemplate.getForEntity("/api/bulkhead", String.class); + return response.getStatusCodeValue(); + })); + + List> futures = executorService.invokeAll(tasks); + for (Future future : futures) { + int statusCode = future.get(); + responseStatusCount.merge(statusCode, 1, Integer::sum); + } + executorService.shutdown(); + + assertEquals(2, responseStatusCount.keySet().size()); + assertTrue(responseStatusCount.containsKey(BANDWIDTH_LIMIT_EXCEEDED.value())); + assertTrue(responseStatusCount.containsKey(OK.value())); + EXTERNAL_SERVICE.verify(3, getRequestedFor(urlEqualTo("/api/external"))); + + List bulkheadEvents = getBulkheadEvents(); + + // Based on the configuration, the first 3 calls should be permitted, so we should see the + // CALL_PERMITTED events + IntStream.rangeClosed(0, 2) + .forEach( + i -> { + assertThat(bulkheadEvents.get(i).getBulkheadName()).isEqualTo("externalService"); + assertThat(bulkheadEvents.get(i).getType()).isEqualTo("CALL_PERMITTED"); + assertThat(bulkheadEvents.get(i).getCreationTime()).isNotNull(); + }); + + // For the other 2 calls made we should see the CALL_REJECTED events + IntStream.rangeClosed(3, 4) + .forEach( + i -> { + assertThat(bulkheadEvents.get(i).getBulkheadName()).isEqualTo("externalService"); + assertThat(bulkheadEvents.get(i).getType()).isEqualTo("CALL_REJECTED"); + assertThat(bulkheadEvents.get(i).getCreationTime()).isNotNull(); + }); + } + + private List getBulkheadEvents() throws Exception { + String jsonEventsList = + IOUtils.toString( + new URI("http://localhost:" + port + "/actuator/bulkheadevents"), + Charset.forName("UTF-8")); + BulkheadEvents bulkheadEvents = objectMapper.readValue(jsonEventsList, BulkheadEvents.class); + return bulkheadEvents.getBulkheadEvents(); + } + + @Test + void testRateLimiterEvents() throws Exception { + EXTERNAL_SERVICE.stubFor(WireMock.get("/api/external").willReturn(ok())); + Map responseStatusCount = new ConcurrentHashMap<>(); + + IntStream.rangeClosed(1, 50) + .forEach( + i -> { + ResponseEntity response = + restTemplate.getForEntity("/api/rate-limiter", String.class); + int statusCode = response.getStatusCodeValue(); + responseStatusCount.put( + statusCode, responseStatusCount.getOrDefault(statusCode, 0) + 1); + }); + + assertEquals(2, responseStatusCount.keySet().size()); + assertTrue(responseStatusCount.containsKey(TOO_MANY_REQUESTS.value())); + assertTrue(responseStatusCount.containsKey(OK.value())); + EXTERNAL_SERVICE.verify(5, getRequestedFor(urlEqualTo("/api/external"))); + + List rateLimiterEvents = getRateLimiterEvents(); + assertThat(rateLimiterEvents.size()).isEqualTo(50); + + // First allowed calls in the rate limit is 5, so we should see for those SUCCESSFUL_ACQUIRE + // events + IntStream.rangeClosed(0, 4) + .forEach( + i -> { + assertThat(rateLimiterEvents.get(i).getRateLimiterName()) + .isEqualTo("externalService"); + assertThat(rateLimiterEvents.get(i).getType()).isEqualTo("SUCCESSFUL_ACQUIRE"); + assertThat(rateLimiterEvents.get(i).getCreationTime()).isNotNull(); + }); + + // the rest should be FAILED_ACQUIRE events since the rate limiter kicks in + IntStream.rangeClosed(5, rateLimiterEvents.size() - 1) + .forEach( + i -> { + assertThat(rateLimiterEvents.get(i).getRateLimiterName()) + .isEqualTo("externalService"); + assertThat(rateLimiterEvents.get(i).getType()).isEqualTo("FAILED_ACQUIRE"); + assertThat(rateLimiterEvents.get(i).getCreationTime()).isNotNull(); + }); + } + + private List getRateLimiterEvents() throws Exception { + String jsonEventsList = + IOUtils.toString( + new URI("http://localhost:" + port + "/actuator/ratelimiterevents"), + Charset.forName("UTF-8")); + RateLimiterEvents rateLimiterEvents = + objectMapper.readValue(jsonEventsList, RateLimiterEvents.class); + return rateLimiterEvents.getRateLimiterEvents(); + } +} diff --git a/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/BulkheadEvent.java b/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/BulkheadEvent.java new file mode 100644 index 000000000000..6d25006bbb67 --- /dev/null +++ b/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/BulkheadEvent.java @@ -0,0 +1,50 @@ +package com.baeldung.resilience4j.eventendpoints.model; + +import java.time.ZonedDateTime; +import java.util.Objects; + +public class BulkheadEvent { + + private String bulkheadName; + private String type; + private ZonedDateTime creationTime; + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + BulkheadEvent that = (BulkheadEvent) o; + return Objects.equals(bulkheadName, that.bulkheadName) + && Objects.equals(type, that.type) + && Objects.equals(creationTime, that.creationTime); + } + + @Override + public int hashCode() { + return Objects.hash(bulkheadName, type, creationTime); + } + + public String getBulkheadName() { + return bulkheadName; + } + + public void setBulkheadName(String bulkheadName) { + this.bulkheadName = bulkheadName; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public ZonedDateTime getCreationTime() { + return creationTime; + } + + public void setCreationTime(ZonedDateTime creationTime) { + this.creationTime = creationTime; + } +} diff --git a/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/BulkheadEvents.java b/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/BulkheadEvents.java new file mode 100644 index 000000000000..7d8b6b2a5f23 --- /dev/null +++ b/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/BulkheadEvents.java @@ -0,0 +1,16 @@ +package com.baeldung.resilience4j.eventendpoints.model; + +import java.util.List; + +public class BulkheadEvents { + + private List bulkheadEvents; + + public List getBulkheadEvents() { + return bulkheadEvents; + } + + public void setBulkheadEvents(List bulkheadEvents) { + this.bulkheadEvents = bulkheadEvents; + } +} diff --git a/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/CircuitBreakerEvent.java b/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/CircuitBreakerEvent.java new file mode 100644 index 000000000000..0a07c9b4955a --- /dev/null +++ b/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/CircuitBreakerEvent.java @@ -0,0 +1,81 @@ +package com.baeldung.resilience4j.eventendpoints.model; + +import java.time.ZonedDateTime; +import java.util.Objects; + +public class CircuitBreakerEvent { + + private String circuitBreakerName; + private String type; + private ZonedDateTime creationTime; + private String errorMessage; + private Integer durationInMs; + private String stateTransition; + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + CircuitBreakerEvent that = (CircuitBreakerEvent) o; + return Objects.equals(circuitBreakerName, that.circuitBreakerName) + && Objects.equals(type, that.type) + && Objects.equals(creationTime, that.creationTime) + && Objects.equals(errorMessage, that.errorMessage) + && Objects.equals(durationInMs, that.durationInMs) + && Objects.equals(stateTransition, that.stateTransition); + } + + @Override + public int hashCode() { + return Objects.hash( + circuitBreakerName, type, creationTime, errorMessage, durationInMs, stateTransition); + } + + public String getCircuitBreakerName() { + return circuitBreakerName; + } + + public void setCircuitBreakerName(String circuitBreakerName) { + this.circuitBreakerName = circuitBreakerName; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public ZonedDateTime getCreationTime() { + return creationTime; + } + + public void setCreationTime(ZonedDateTime creationTime) { + this.creationTime = creationTime; + } + + public String getErrorMessage() { + return errorMessage; + } + + public void setErrorMessage(String errorMessage) { + this.errorMessage = errorMessage; + } + + public Integer getDurationInMs() { + return durationInMs; + } + + public void setDurationInMs(Integer durationInMs) { + this.durationInMs = durationInMs; + } + + public String getStateTransition() { + return stateTransition; + } + + public void setStateTransition(String stateTransition) { + this.stateTransition = stateTransition; + } +} diff --git a/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/CircuitBreakerEvents.java b/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/CircuitBreakerEvents.java new file mode 100644 index 000000000000..c3ec741d051e --- /dev/null +++ b/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/CircuitBreakerEvents.java @@ -0,0 +1,16 @@ +package com.baeldung.resilience4j.eventendpoints.model; + +import java.util.List; + +public class CircuitBreakerEvents { + + private List circuitBreakerEvents; + + public List getCircuitBreakerEvents() { + return circuitBreakerEvents; + } + + public void setCircuitBreakerEvents(List circuitBreakerEvents) { + this.circuitBreakerEvents = circuitBreakerEvents; + } +} diff --git a/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/RateLimiterEvent.java b/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/RateLimiterEvent.java new file mode 100644 index 000000000000..ccc0f5a9b37b --- /dev/null +++ b/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/RateLimiterEvent.java @@ -0,0 +1,50 @@ +package com.baeldung.resilience4j.eventendpoints.model; + +import java.time.ZonedDateTime; +import java.util.Objects; + +public class RateLimiterEvent { + + private String rateLimiterName; + private String type; + private ZonedDateTime creationTime; + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + RateLimiterEvent that = (RateLimiterEvent) o; + return Objects.equals(rateLimiterName, that.rateLimiterName) + && Objects.equals(type, that.type) + && Objects.equals(creationTime, that.creationTime); + } + + @Override + public int hashCode() { + return Objects.hash(rateLimiterName, type, creationTime); + } + + public String getRateLimiterName() { + return rateLimiterName; + } + + public void setRateLimiterName(String rateLimiterName) { + this.rateLimiterName = rateLimiterName; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public ZonedDateTime getCreationTime() { + return creationTime; + } + + public void setCreationTime(ZonedDateTime creationTime) { + this.creationTime = creationTime; + } +} diff --git a/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/RateLimiterEvents.java b/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/RateLimiterEvents.java new file mode 100644 index 000000000000..c0cfcdf0d728 --- /dev/null +++ b/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/RateLimiterEvents.java @@ -0,0 +1,16 @@ +package com.baeldung.resilience4j.eventendpoints.model; + +import java.util.List; + +public class RateLimiterEvents { + + private List rateLimiterEvents; + + public List getRateLimiterEvents() { + return rateLimiterEvents; + } + + public void setRateLimiterEvents(List rateLimiterEvents) { + this.rateLimiterEvents = rateLimiterEvents; + } +} diff --git a/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/RetryEvent.java b/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/RetryEvent.java new file mode 100644 index 000000000000..a17d45c679ae --- /dev/null +++ b/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/RetryEvent.java @@ -0,0 +1,70 @@ +package com.baeldung.resilience4j.eventendpoints.model; + +import java.time.ZonedDateTime; +import java.util.Objects; + +public class RetryEvent { + + private String retryName; + private String type; + private ZonedDateTime creationTime; + private String errorMessage; + private Integer numberOfAttempts; + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + RetryEvent that = (RetryEvent) o; + return Objects.equals(retryName, that.retryName) + && Objects.equals(type, that.type) + && Objects.equals(creationTime, that.creationTime) + && Objects.equals(errorMessage, that.errorMessage) + && Objects.equals(numberOfAttempts, that.numberOfAttempts); + } + + @Override + public int hashCode() { + return Objects.hash(retryName, type, creationTime, errorMessage, numberOfAttempts); + } + + public String getRetryName() { + return retryName; + } + + public void setRetryName(String retryName) { + this.retryName = retryName; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public ZonedDateTime getCreationTime() { + return creationTime; + } + + public void setCreationTime(ZonedDateTime creationTime) { + this.creationTime = creationTime; + } + + public String getErrorMessage() { + return errorMessage; + } + + public void setErrorMessage(String errorMessage) { + this.errorMessage = errorMessage; + } + + public Integer getNumberOfAttempts() { + return numberOfAttempts; + } + + public void setNumberOfAttempts(Integer numberOfAttempts) { + this.numberOfAttempts = numberOfAttempts; + } +} diff --git a/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/RetryEvents.java b/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/RetryEvents.java new file mode 100644 index 000000000000..e5bb73ff0cef --- /dev/null +++ b/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/RetryEvents.java @@ -0,0 +1,16 @@ +package com.baeldung.resilience4j.eventendpoints.model; + +import java.util.List; + +public class RetryEvents { + + private List retryEvents; + + public List getRetryEvents() { + return retryEvents; + } + + public void setRetryEvents(List retryEvents) { + this.retryEvents = retryEvents; + } +} diff --git a/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/TimeLimiterEvent.java b/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/TimeLimiterEvent.java new file mode 100644 index 000000000000..07f891c40104 --- /dev/null +++ b/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/TimeLimiterEvent.java @@ -0,0 +1,50 @@ +package com.baeldung.resilience4j.eventendpoints.model; + +import java.time.ZonedDateTime; +import java.util.Objects; + +public class TimeLimiterEvent { + + private String timeLimiterName; + private String type; + private ZonedDateTime creationTime; + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + TimeLimiterEvent that = (TimeLimiterEvent) o; + return Objects.equals(timeLimiterName, that.timeLimiterName) + && Objects.equals(type, that.type) + && Objects.equals(creationTime, that.creationTime); + } + + @Override + public int hashCode() { + return Objects.hash(timeLimiterName, type, creationTime); + } + + public String getTimeLimiterName() { + return timeLimiterName; + } + + public void setTimeLimiterName(String timeLimiterName) { + this.timeLimiterName = timeLimiterName; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public ZonedDateTime getCreationTime() { + return creationTime; + } + + public void setCreationTime(ZonedDateTime creationTime) { + this.creationTime = creationTime; + } +} diff --git a/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/TimeLimiterEvents.java b/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/TimeLimiterEvents.java new file mode 100644 index 000000000000..739ff91916bd --- /dev/null +++ b/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/TimeLimiterEvents.java @@ -0,0 +1,16 @@ +package com.baeldung.resilience4j.eventendpoints.model; + +import java.util.List; + +public class TimeLimiterEvents { + + private List timeLimiterEvents; + + public List getTimeLimiterEvents() { + return timeLimiterEvents; + } + + public void setTimeLimiterEvents(List timeLimiterEvents) { + this.timeLimiterEvents = timeLimiterEvents; + } +} From 681bf3140593ac181542232e2b0abc8276788d86 Mon Sep 17 00:00:00 2001 From: Dhawal Kapil Date: Wed, 5 Apr 2023 05:36:38 +0530 Subject: [PATCH 022/390] JAVA-19536 Formatting of pom.xml(s) --- akka-modules/akka-http/pom.xml | 1 - annotations/annotation-processing/pom.xml | 1 - apache-httpclient4/pom.xml | 4 ++-- apache-kafka/pom.xml | 5 ++--- apache-spark/pom.xml | 1 - .../aws-lambda/shipping-tracker/ShippingFunction/pom.xml | 1 - aws-modules/aws-lambda/todo-reminder/ToDoFunction/pom.xml | 4 ++-- axon/pom.xml | 3 ++- 8 files changed, 8 insertions(+), 12 deletions(-) diff --git a/akka-modules/akka-http/pom.xml b/akka-modules/akka-http/pom.xml index 3af7c492ca48..9372107fc9f2 100644 --- a/akka-modules/akka-http/pom.xml +++ b/akka-modules/akka-http/pom.xml @@ -36,7 +36,6 @@ - 10.0.11 2.5.11 diff --git a/annotations/annotation-processing/pom.xml b/annotations/annotation-processing/pom.xml index 2a17242ee5bb..14bbc409e5f8 100644 --- a/annotations/annotation-processing/pom.xml +++ b/annotations/annotation-processing/pom.xml @@ -21,7 +21,6 @@ - 1.0-rc2 diff --git a/apache-httpclient4/pom.xml b/apache-httpclient4/pom.xml index 1485c94c8c20..e0bf9dd5f607 100644 --- a/apache-httpclient4/pom.xml +++ b/apache-httpclient4/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 apache-httpclient4 0.1-SNAPSHOT diff --git a/apache-kafka/pom.xml b/apache-kafka/pom.xml index 915583fed87e..494bc949619b 100644 --- a/apache-kafka/pom.xml +++ b/apache-kafka/pom.xml @@ -171,7 +171,8 @@ --add-opens java.base/java.time=ALL-UNNAMED - --add-opens java.base/java.nio=ALL-UNNAMED + --add-opens + java.base/java.nio=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED @@ -179,8 +180,6 @@ - - 3.4.0 1.15.3 diff --git a/apache-spark/pom.xml b/apache-spark/pom.xml index 9e61e1340d16..b5e97ee03d98 100644 --- a/apache-spark/pom.xml +++ b/apache-spark/pom.xml @@ -7,7 +7,6 @@ 1.0-SNAPSHOT apache-spark jar - http://maven.apache.org com.baeldung diff --git a/aws-modules/aws-lambda/shipping-tracker/ShippingFunction/pom.xml b/aws-modules/aws-lambda/shipping-tracker/ShippingFunction/pom.xml index 24f2a76912a2..a60f934bad8d 100644 --- a/aws-modules/aws-lambda/shipping-tracker/ShippingFunction/pom.xml +++ b/aws-modules/aws-lambda/shipping-tracker/ShippingFunction/pom.xml @@ -2,7 +2,6 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 - com.baeldung ShippingFunction 1.0 ShippingFunction diff --git a/aws-modules/aws-lambda/todo-reminder/ToDoFunction/pom.xml b/aws-modules/aws-lambda/todo-reminder/ToDoFunction/pom.xml index 0dd2e4d14a41..5545154a5d3b 100644 --- a/aws-modules/aws-lambda/todo-reminder/ToDoFunction/pom.xml +++ b/aws-modules/aws-lambda/todo-reminder/ToDoFunction/pom.xml @@ -1,6 +1,6 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 helloworld ToDoFunction diff --git a/axon/pom.xml b/axon/pom.xml index 5c8f1d7a6c26..5eed742aab63 100644 --- a/axon/pom.xml +++ b/axon/pom.xml @@ -103,7 +103,8 @@ --add-opens java.base/java.util=ALL-UNNAMED - --add-opens java.base/java.util.concurrent=ALL-UNNAMED + --add-opens + java.base/java.util.concurrent=ALL-UNNAMED From f4227a50a6618b1afbd4833f9821d672c0eee3c6 Mon Sep 17 00:00:00 2001 From: Michael Olayemi Date: Wed, 5 Apr 2023 02:14:45 +0100 Subject: [PATCH 023/390] I text (#13770) * BAEL-6226 Calculate Pi Java Program * BAEL-6226 Calculate Pi Java Program * Calculate Pi Java Program --- .../src/test/java/com/baeldung/pi/PiProgramUnitTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core-java-modules/core-java-numbers-6/src/test/java/com/baeldung/pi/PiProgramUnitTest.java b/core-java-modules/core-java-numbers-6/src/test/java/com/baeldung/pi/PiProgramUnitTest.java index 729346bc7476..d47942a51756 100644 --- a/core-java-modules/core-java-numbers-6/src/test/java/com/baeldung/pi/PiProgramUnitTest.java +++ b/core-java-modules/core-java-numbers-6/src/test/java/com/baeldung/pi/PiProgramUnitTest.java @@ -8,8 +8,8 @@ public class PiProgramUnitTest { @Test - public void givenPiCalculator_whenCalculatePiWithTenThousandPoints_thenEstimatedPiIsWithinTolerance() { - int totalPoints = 10000; + public void givenPiCalculator_whenCalculatePiWithOneMillionPoints_thenEstimatedPiIsWithinTolerance() { + int totalPoints = 1000000; int insideCircle = 0; Random random = new Random(); From fcacb8073ad40a3eaaf29e5002408aebee23994c Mon Sep 17 00:00:00 2001 From: Kai Yuan Date: Wed, 5 Apr 2023 03:16:46 +0200 Subject: [PATCH 024/390] [BAEL-6284_tmpDir] add tests for the cleanup option (#13752) --- ...TemporaryDirectoryWithCleanupUnitTest.java | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 testing-modules/junit-5-basics/src/test/java/com/baeldung/extensions/tempdir/TemporaryDirectoryWithCleanupUnitTest.java diff --git a/testing-modules/junit-5-basics/src/test/java/com/baeldung/extensions/tempdir/TemporaryDirectoryWithCleanupUnitTest.java b/testing-modules/junit-5-basics/src/test/java/com/baeldung/extensions/tempdir/TemporaryDirectoryWithCleanupUnitTest.java new file mode 100644 index 000000000000..739212ec04ce --- /dev/null +++ b/testing-modules/junit-5-basics/src/test/java/com/baeldung/extensions/tempdir/TemporaryDirectoryWithCleanupUnitTest.java @@ -0,0 +1,36 @@ +package com.baeldung.extensions.tempdir; + +import org.junit.jupiter.api.MethodOrderer; +import org.junit.jupiter.api.Order; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; +import org.junit.jupiter.api.TestMethodOrder; +import org.junit.jupiter.api.io.TempDir; + +import java.nio.file.Path; + +import static org.junit.Assert.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.io.CleanupMode.NEVER; + +@TestMethodOrder(MethodOrderer.OrderAnnotation.class) +@TestInstance(TestInstance.Lifecycle.PER_CLASS) +class TemporaryDirectoryWithCleanupUnitTest { + + private Path theTempDirToBeChecked = null; + + @Test + @Order(1) + void whenTestMethodWithTempDirNeverCleanup_thenSetInstanceVariable(@TempDir(cleanup = NEVER) Path tempDir) { + theTempDirToBeChecked = tempDir; + System.out.println(tempDir.toFile().getAbsolutePath()); + } + + @Test + @Order(2) + void whenTestMethodWithTempDirNeverCleanup_thenTempDirShouldNotBeRemoved() { + assertNotNull(theTempDirToBeChecked); + assertTrue(theTempDirToBeChecked.toFile().isDirectory()); + } + +} \ No newline at end of file From bb5bfa992ad963568bd4c7b3068afe598ee19de7 Mon Sep 17 00:00:00 2001 From: Dhawal Kapil Date: Wed, 5 Apr 2023 07:14:09 +0530 Subject: [PATCH 025/390] JAVA-19536 Fix formatting of pom.xmls --- checker-plugin/pom.xml | 1 - core-groovy-modules/core-groovy-2/pom.xml | 9 --- .../core-groovy-collections/pom.xml | 10 --- .../core-groovy-strings/pom.xml | 9 --- core-groovy-modules/core-groovy/pom.xml | 10 --- core-java-modules/core-java-10/pom.xml | 1 - core-java-modules/core-java-11-2/pom.xml | 1 - core-java-modules/core-java-11-3/pom.xml | 3 +- core-java-modules/core-java-11/pom.xml | 2 - core-java-modules/core-java-12/pom.xml | 2 - core-java-modules/core-java-13/pom.xml | 3 - core-java-modules/core-java-14/pom.xml | 1 - core-java-modules/core-java-15/pom.xml | 1 - core-java-modules/core-java-16/pom.xml | 2 - core-java-modules/core-java-17/pom.xml | 2 - core-java-modules/core-java-19/pom.xml | 20 +++--- core-java-modules/core-java-8-2/pom.xml | 1 - .../core-java-8-datetime-2/pom.xml | 1 - .../core-java-8-datetime/pom.xml | 1 - core-java-modules/core-java-8/pom.xml | 1 - .../core-java-9-improvements/pom.xml | 1 - core-java-modules/core-java-9-jigsaw/pom.xml | 1 - .../core-java-9-new-features/pom.xml | 1 - core-java-modules/core-java-9-streams/pom.xml | 1 - core-java-modules/core-java-9/pom.xml | 1 - .../core-java-annotations/pom.xml | 1 - core-java-modules/core-java-booleans/pom.xml | 24 ++++---- core-java-modules/core-java-char/pom.xml | 1 - .../core-java-collections-3/pom.xml | 1 - .../core-java-collections-4/pom.xml | 1 - .../core-java-collections-5/pom.xml | 6 +- .../core-java-collections-array-list/pom.xml | 47 +++++++------- .../pom.xml | 1 - .../core-java-collections-conversions/pom.xml | 1 - .../core-java-collections-list-2/pom.xml | 1 - .../core-java-collections-list-3/pom.xml | 1 - .../core-java-collections-list-4/pom.xml | 1 - .../core-java-collections-list-5/pom.xml | 1 - .../core-java-collections-list/pom.xml | 1 - .../core-java-collections-maps-2/pom.xml | 1 - .../core-java-collections-maps-3/pom.xml | 1 - .../core-java-collections-maps-4/pom.xml | 1 - .../core-java-collections-maps-5/pom.xml | 1 - .../core-java-collections-maps-6/pom.xml | 8 +-- .../core-java-collections-maps/pom.xml | 1 - .../core-java-collections-set-2/pom.xml | 1 - .../core-java-collections-set/pom.xml | 1 - .../core-java-collections/pom.xml | 1 - .../core-java-concurrency-2/pom.xml | 1 - .../core-java-concurrency-advanced-2/pom.xml | 1 - .../core-java-concurrency-advanced-3/pom.xml | 1 - .../core-java-concurrency-advanced-4/pom.xml | 4 -- .../core-java-concurrency-advanced/pom.xml | 1 - .../core-java-concurrency-basic-2/pom.xml | 1 - .../core-java-concurrency-basic-3/pom.xml | 18 +++--- .../core-java-concurrency-basic/pom.xml | 1 - .../pom.xml | 1 - .../core-java-concurrency-collections/pom.xml | 1 - .../core-java-concurrency-simple/pom.xml | 1 - core-java-modules/core-java-console/pom.xml | 1 - .../core-java-date-operations-1/pom.xml | 1 - .../core-java-date-operations-2/pom.xml | 1 - .../core-java-date-operations-3/pom.xml | 7 --- .../core-java-datetime-string-2/pom.xml | 1 - .../core-java-datetime-string/pom.xml | 2 - .../core-java-exceptions-2/pom.xml | 2 - .../core-java-exceptions-3/pom.xml | 2 - .../core-java-exceptions-4/pom.xml | 2 - .../core-java-exceptions/pom.xml | 2 - core-java-modules/core-java-function/pom.xml | 1 - .../core-java-functional/pom.xml | 1 - core-java-modules/core-java-hex/pom.xml | 9 --- .../core-java-httpclient/pom.xml | 1 - core-java-modules/core-java-io-2/pom.xml | 1 - core-java-modules/core-java-io-3/pom.xml | 1 - core-java-modules/core-java-io-4/pom.xml | 1 - core-java-modules/core-java-io-apis-2/pom.xml | 1 - core-java-modules/core-java-io-apis/pom.xml | 1 - .../core-java-io-conversions-2/pom.xml | 1 - .../core-java-io-conversions/pom.xml | 1 - core-java-modules/core-java-io/pom.xml | 1 - core-java-modules/core-java-jar/pom.xml | 1 - core-java-modules/core-java-jndi/pom.xml | 2 - core-java-modules/core-java-jvm-2/pom.xml | 3 - core-java-modules/core-java-jvm-3/pom.xml | 4 -- core-java-modules/core-java-jvm/pom.xml | 5 +- core-java-modules/core-java-lambdas/pom.xml | 1 - core-java-modules/core-java-lang-2/pom.xml | 1 - core-java-modules/core-java-lang-3/pom.xml | 1 - core-java-modules/core-java-lang-4/pom.xml | 1 - core-java-modules/core-java-lang-5/pom.xml | 13 ++-- .../core-java-lang-math-2/pom.xml | 1 - .../core-java-lang-math-3/pom.xml | 1 - core-java-modules/core-java-lang-math/pom.xml | 1 - .../core-java-lang-operators-2/pom.xml | 1 - .../core-java-lang-operators/pom.xml | 1 - .../core-java-lang-syntax-2/pom.xml | 1 - .../core-java-lang-syntax/pom.xml | 1 - core-java-modules/core-java-lang/pom.xml | 1 - .../core-java-networking-4/pom.xml | 2 - .../core-java-networking/pom.xml | 1 - core-java-modules/core-java-nio-2/pom.xml | 1 - core-java-modules/core-java-nio/pom.xml | 1 - core-java-modules/core-java-numbers-2/pom.xml | 1 - core-java-modules/core-java-numbers-6/pom.xml | 6 +- core-java-modules/core-java-numbers/pom.xml | 1 - core-java-modules/core-java-optional/pom.xml | 1 - core-java-modules/core-java-os/pom.xml | 1 - core-java-modules/core-java-perf/pom.xml | 1 - .../core-java-reflection-2/pom.xml | 1 - .../pom.xml | 5 +- .../core-java-reflection/pom.xml | 1 - core-java-modules/core-java-regex-2/pom.xml | 1 - core-java-modules/core-java-regex/pom.xml | 1 - .../core-java-security-2/pom.xml | 1 - .../core-java-security-3/pom.xml | 1 - .../core-java-security-algorithms/pom.xml | 2 - core-java-modules/core-java-security/pom.xml | 5 +- .../core-java-serialization/pom.xml | 1 - core-java-modules/core-java-streams-2/pom.xml | 1 - core-java-modules/core-java-streams-3/pom.xml | 1 - core-java-modules/core-java-streams-4/pom.xml | 1 - .../core-java-streams-collect/pom.xml | 2 - .../core-java-streams-maps/pom.xml | 1 - core-java-modules/core-java-streams/pom.xml | 2 - .../core-java-string-algorithms-2/pom.xml | 1 - .../core-java-string-algorithms-3/pom.xml | 1 - .../core-java-string-algorithms/pom.xml | 1 - .../core-java-string-apis-2/pom.xml | 1 - .../core-java-string-apis/pom.xml | 1 - .../core-java-string-conversions-2/pom.xml | 1 - .../core-java-string-conversions/pom.xml | 1 - .../core-java-string-operations-2/pom.xml | 1 - .../core-java-string-operations-3/pom.xml | 1 - .../core-java-string-operations-4/pom.xml | 1 - .../core-java-string-operations-5/pom.xml | 1 - .../core-java-string-operations/pom.xml | 1 - core-java-modules/core-java-strings/pom.xml | 1 - core-java-modules/core-java-sun/pom.xml | 1 - .../core-java-time-measurements/pom.xml | 2 - core-java-modules/core-java-uuid/pom.xml | 1 - core-java-modules/core-java/pom.xml | 1 - core-java-modules/pom.xml | 28 ++++----- core-java-modules/pre-jpms/pom.xml | 1 - couchbase/pom.xml | 1 - custom-pmd/pom.xml | 1 - data-structures/pom.xml | 15 +++-- ddd/pom.xml | 1 - deeplearning4j/pom.xml | 2 - .../core-java-exclusions/pom.xml | 61 +++++++++---------- .../dummy-surefire-junit47/pom.xml | 4 +- di-modules/guice/pom.xml | 1 - discord4j/pom.xml | 2 - disruptor/pom.xml | 1 - .../multi-module-caching/pom.xml | 4 +- .../single-module-caching/pom.xml | 4 +- docker-modules/docker-compose-2/pom.xml | 4 +- docker-modules/docker-containers/pom.xml | 1 - docker-modules/pom.xml | 2 - dozer/pom.xml | 1 - 160 files changed, 136 insertions(+), 361 deletions(-) diff --git a/checker-plugin/pom.xml b/checker-plugin/pom.xml index 28958db89d52..e90dcf271e65 100644 --- a/checker-plugin/pom.xml +++ b/checker-plugin/pom.xml @@ -7,7 +7,6 @@ 1.0-SNAPSHOT checker-plugin jar - http://maven.apache.org com.baeldung diff --git a/core-groovy-modules/core-groovy-2/pom.xml b/core-groovy-modules/core-groovy-2/pom.xml index ca6a9a62c7c4..de750daf0fc4 100644 --- a/core-groovy-modules/core-groovy-2/pom.xml +++ b/core-groovy-modules/core-groovy-2/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-groovy-2 - 1.0-SNAPSHOT core-groovy-2 jar @@ -153,14 +152,6 @@ - - - maven_central - Maven Central - https://repo.maven.apache.org/maven2/ - - - 1.1.3 3.4.2 diff --git a/core-groovy-modules/core-groovy-collections/pom.xml b/core-groovy-modules/core-groovy-collections/pom.xml index 6d43ce7d18cf..08589f54e326 100644 --- a/core-groovy-modules/core-groovy-collections/pom.xml +++ b/core-groovy-modules/core-groovy-collections/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-groovy-collections - 1.0-SNAPSHOT core-groovy-collections jar @@ -111,13 +110,4 @@ - - - maven_central - Maven Central - https://repo.maven.apache.org/maven2/ - - - - diff --git a/core-groovy-modules/core-groovy-strings/pom.xml b/core-groovy-modules/core-groovy-strings/pom.xml index fac0f2521936..ac68849431a4 100644 --- a/core-groovy-modules/core-groovy-strings/pom.xml +++ b/core-groovy-modules/core-groovy-strings/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-groovy-strings - 1.0-SNAPSHOT core-groovy-strings jar @@ -101,12 +100,4 @@ - - - maven_central - Maven Central - https://repo.maven.apache.org/maven2/ - - - diff --git a/core-groovy-modules/core-groovy/pom.xml b/core-groovy-modules/core-groovy/pom.xml index cf6cca9e1838..6668f6223561 100644 --- a/core-groovy-modules/core-groovy/pom.xml +++ b/core-groovy-modules/core-groovy/pom.xml @@ -3,9 +3,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - core-groovy - 1.0-SNAPSHOT core-groovy jar @@ -102,12 +100,4 @@ - - - maven_central - Maven Central - https://repo.maven.apache.org/maven2/ - - - diff --git a/core-java-modules/core-java-10/pom.xml b/core-java-modules/core-java-10/pom.xml index e2ac8db91922..7eccb098a0f8 100644 --- a/core-java-modules/core-java-10/pom.xml +++ b/core-java-modules/core-java-10/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-10 - 0.1.0-SNAPSHOT core-java-10 jar diff --git a/core-java-modules/core-java-11-2/pom.xml b/core-java-modules/core-java-11-2/pom.xml index 64a486b5c4da..464781404868 100644 --- a/core-java-modules/core-java-11-2/pom.xml +++ b/core-java-modules/core-java-11-2/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-11-2 - 0.1.0-SNAPSHOT core-java-11-2 jar diff --git a/core-java-modules/core-java-11-3/pom.xml b/core-java-modules/core-java-11-3/pom.xml index ccccae5ba11e..22db9e62ab1c 100644 --- a/core-java-modules/core-java-11-3/pom.xml +++ b/core-java-modules/core-java-11-3/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-11-3 - 0.1.0-SNAPSHOT core-java-11-3 jar @@ -14,7 +13,7 @@ 1.0.0-SNAPSHOT ../../pom.xml - + com.google.code.gson diff --git a/core-java-modules/core-java-11/pom.xml b/core-java-modules/core-java-11/pom.xml index 28a218c4002a..d0c2c0acaa40 100644 --- a/core-java-modules/core-java-11/pom.xml +++ b/core-java-modules/core-java-11/pom.xml @@ -4,10 +4,8 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-11 - 0.1.0-SNAPSHOT core-java-11 jar - http://maven.apache.org com.baeldung diff --git a/core-java-modules/core-java-12/pom.xml b/core-java-modules/core-java-12/pom.xml index 9f95b1bc3f0e..ba6dfc62bc92 100644 --- a/core-java-modules/core-java-12/pom.xml +++ b/core-java-modules/core-java-12/pom.xml @@ -4,10 +4,8 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-12 - 0.1.0-SNAPSHOT core-java-12 jar - http://maven.apache.org com.baeldung diff --git a/core-java-modules/core-java-13/pom.xml b/core-java-modules/core-java-13/pom.xml index 9e4283897132..11d6ee7007f4 100644 --- a/core-java-modules/core-java-13/pom.xml +++ b/core-java-modules/core-java-13/pom.xml @@ -3,12 +3,9 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - com.baeldung core-java-13 - 0.1.0-SNAPSHOT core-java-13 jar - http://maven.apache.org com.baeldung diff --git a/core-java-modules/core-java-14/pom.xml b/core-java-modules/core-java-14/pom.xml index f78edd622a7e..9f48c0b8b259 100644 --- a/core-java-modules/core-java-14/pom.xml +++ b/core-java-modules/core-java-14/pom.xml @@ -6,7 +6,6 @@ core-java-14 core-java-14 jar - http://maven.apache.org com.baeldung diff --git a/core-java-modules/core-java-15/pom.xml b/core-java-modules/core-java-15/pom.xml index a4923054acb2..059e2cc8f3be 100644 --- a/core-java-modules/core-java-15/pom.xml +++ b/core-java-modules/core-java-15/pom.xml @@ -6,7 +6,6 @@ core-java-15 core-java-15 jar - http://maven.apache.org com.baeldung diff --git a/core-java-modules/core-java-16/pom.xml b/core-java-modules/core-java-16/pom.xml index a2c0d4855b82..f8d287880a23 100644 --- a/core-java-modules/core-java-16/pom.xml +++ b/core-java-modules/core-java-16/pom.xml @@ -4,10 +4,8 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-16 - 0.1.0-SNAPSHOT core-java-16 jar - http://maven.apache.org com.baeldung diff --git a/core-java-modules/core-java-17/pom.xml b/core-java-modules/core-java-17/pom.xml index bc949d90504d..e2d854be44cb 100644 --- a/core-java-modules/core-java-17/pom.xml +++ b/core-java-modules/core-java-17/pom.xml @@ -4,10 +4,8 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-17 - 0.1.0-SNAPSHOT core-java-17 jar - http://maven.apache.org com.baeldung diff --git a/core-java-modules/core-java-19/pom.xml b/core-java-modules/core-java-19/pom.xml index 096b13e67991..930b37391c6f 100644 --- a/core-java-modules/core-java-19/pom.xml +++ b/core-java-modules/core-java-19/pom.xml @@ -1,21 +1,17 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 + core-java-19 + core-java-19 + com.baeldung.core-java-modules core-java-modules 0.0.1-SNAPSHOT - core-java-19 - - - 19 - 19 - UTF-8 - @@ -30,4 +26,10 @@ + + 19 + 19 + UTF-8 + + \ No newline at end of file diff --git a/core-java-modules/core-java-8-2/pom.xml b/core-java-modules/core-java-8-2/pom.xml index 7db1e1ed4e58..589e38461319 100644 --- a/core-java-modules/core-java-8-2/pom.xml +++ b/core-java-modules/core-java-8-2/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-8-2 - 0.1.0-SNAPSHOT core-java-8-2 jar diff --git a/core-java-modules/core-java-8-datetime-2/pom.xml b/core-java-modules/core-java-8-datetime-2/pom.xml index 9e54b0ee1283..ce349d9dc3fb 100644 --- a/core-java-modules/core-java-8-datetime-2/pom.xml +++ b/core-java-modules/core-java-8-datetime-2/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-8-datetime-2 - ${project.parent.version} core-java-8-datetime-2 jar diff --git a/core-java-modules/core-java-8-datetime/pom.xml b/core-java-modules/core-java-8-datetime/pom.xml index 01ec6c0b7668..481b1a6a69ca 100644 --- a/core-java-modules/core-java-8-datetime/pom.xml +++ b/core-java-modules/core-java-8-datetime/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-8-datetime - ${project.parent.version} core-java-8-datetime jar diff --git a/core-java-modules/core-java-8/pom.xml b/core-java-modules/core-java-8/pom.xml index 89925bdbbbcc..fff7b7f2f996 100644 --- a/core-java-modules/core-java-8/pom.xml +++ b/core-java-modules/core-java-8/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-8 - 0.1.0-SNAPSHOT core-java-8 jar diff --git a/core-java-modules/core-java-9-improvements/pom.xml b/core-java-modules/core-java-9-improvements/pom.xml index 56d4ccff9fd5..f6f13ff4090b 100644 --- a/core-java-modules/core-java-9-improvements/pom.xml +++ b/core-java-modules/core-java-9-improvements/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-9-improvements - 0.2-SNAPSHOT core-java-9-improvements diff --git a/core-java-modules/core-java-9-jigsaw/pom.xml b/core-java-modules/core-java-9-jigsaw/pom.xml index a26a88f4b084..70a2882234c0 100644 --- a/core-java-modules/core-java-9-jigsaw/pom.xml +++ b/core-java-modules/core-java-9-jigsaw/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-9-jigsaw - 0.2-SNAPSHOT core-java-9-jigsaw diff --git a/core-java-modules/core-java-9-new-features/pom.xml b/core-java-modules/core-java-9-new-features/pom.xml index 78ffaff01036..6821c9c340c9 100644 --- a/core-java-modules/core-java-9-new-features/pom.xml +++ b/core-java-modules/core-java-9-new-features/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-9-new-features - 0.2-SNAPSHOT core-java-9-new-features diff --git a/core-java-modules/core-java-9-streams/pom.xml b/core-java-modules/core-java-9-streams/pom.xml index d3f81780d1ca..903194b3b3d4 100644 --- a/core-java-modules/core-java-9-streams/pom.xml +++ b/core-java-modules/core-java-9-streams/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-9-streams - 0.1.0-SNAPSHOT core-java-9-streams jar diff --git a/core-java-modules/core-java-9/pom.xml b/core-java-modules/core-java-9/pom.xml index 272af327cbea..bcfdacdf1d00 100644 --- a/core-java-modules/core-java-9/pom.xml +++ b/core-java-modules/core-java-9/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-9 - 0.2-SNAPSHOT core-java-9 diff --git a/core-java-modules/core-java-annotations/pom.xml b/core-java-modules/core-java-annotations/pom.xml index 1acd3472329d..6b1b9d802fdb 100644 --- a/core-java-modules/core-java-annotations/pom.xml +++ b/core-java-modules/core-java-annotations/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-annotations - 0.1.0-SNAPSHOT core-java-annotations jar diff --git a/core-java-modules/core-java-booleans/pom.xml b/core-java-modules/core-java-booleans/pom.xml index 18338fd88c11..3b0c28208fdc 100644 --- a/core-java-modules/core-java-booleans/pom.xml +++ b/core-java-modules/core-java-booleans/pom.xml @@ -1,16 +1,16 @@ - 4.0.0 - core-java-booleans - 0.1.0-SNAPSHOT - core-java-booleans - jar + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 + core-java-booleans + core-java-booleans + jar + + + com.baeldung.core-java-modules + core-java-modules + 0.0.1-SNAPSHOT + - - com.baeldung.core-java-modules - core-java-modules - 0.0.1-SNAPSHOT - \ No newline at end of file diff --git a/core-java-modules/core-java-char/pom.xml b/core-java-modules/core-java-char/pom.xml index 7dc0923fb50d..eb6cbee952a9 100644 --- a/core-java-modules/core-java-char/pom.xml +++ b/core-java-modules/core-java-char/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-char - 0.1.0-SNAPSHOT core-java-char jar diff --git a/core-java-modules/core-java-collections-3/pom.xml b/core-java-modules/core-java-collections-3/pom.xml index 6ef8e3c81afc..373dc9db14e4 100644 --- a/core-java-modules/core-java-collections-3/pom.xml +++ b/core-java-modules/core-java-collections-3/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-collections-3 - 0.1.0-SNAPSHOT core-java-collections-3 jar diff --git a/core-java-modules/core-java-collections-4/pom.xml b/core-java-modules/core-java-collections-4/pom.xml index e88d5a6740e5..1a59411ecbe9 100644 --- a/core-java-modules/core-java-collections-4/pom.xml +++ b/core-java-modules/core-java-collections-4/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-collections-4 - 0.1.0-SNAPSHOT core-java-collections-4 jar diff --git a/core-java-modules/core-java-collections-5/pom.xml b/core-java-modules/core-java-collections-5/pom.xml index 67c9f7120cce..6baecc2802dd 100644 --- a/core-java-modules/core-java-collections-5/pom.xml +++ b/core-java-modules/core-java-collections-5/pom.xml @@ -1,10 +1,9 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-collections-5 - 0.0.1-SNAPSHOT core-java-collections-5 jar @@ -55,4 +54,5 @@ 0.9.38 1.36 + diff --git a/core-java-modules/core-java-collections-array-list/pom.xml b/core-java-modules/core-java-collections-array-list/pom.xml index e3a115854cbd..ee0b102bb05a 100644 --- a/core-java-modules/core-java-collections-array-list/pom.xml +++ b/core-java-modules/core-java-collections-array-list/pom.xml @@ -4,7 +4,29 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-collections-array-list - 0.1.0-SNAPSHOT + core-java-collections-array-list + jar + + + com.baeldung.core-java-modules + core-java-modules + 0.0.1-SNAPSHOT + + + + + org.apache.commons + commons-collections4 + ${commons-collections4.version} + + + com.google.guava + guava + 31.1-jre + test + + + @@ -27,32 +49,11 @@ + 16 16 3.0.0-M3 - core-java-collections-array-list - jar - - - com.baeldung.core-java-modules - core-java-modules - 0.0.1-SNAPSHOT - - - - - org.apache.commons - commons-collections4 - ${commons-collections4.version} - - - com.google.guava - guava - 31.1-jre - test - - \ No newline at end of file diff --git a/core-java-modules/core-java-collections-conversions-2/pom.xml b/core-java-modules/core-java-collections-conversions-2/pom.xml index f6775a7a4226..8cd0a6932b56 100644 --- a/core-java-modules/core-java-collections-conversions-2/pom.xml +++ b/core-java-modules/core-java-collections-conversions-2/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-collections-conversions-2 - 0.1.0-SNAPSHOT core-java-collections-conversions-2 jar diff --git a/core-java-modules/core-java-collections-conversions/pom.xml b/core-java-modules/core-java-collections-conversions/pom.xml index 08a452da510f..78e9847c0aba 100644 --- a/core-java-modules/core-java-collections-conversions/pom.xml +++ b/core-java-modules/core-java-collections-conversions/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-collections-conversions - 0.1.0-SNAPSHOT core-java-collections-conversions jar diff --git a/core-java-modules/core-java-collections-list-2/pom.xml b/core-java-modules/core-java-collections-list-2/pom.xml index 59ab8c5f27eb..a305cdffc8cc 100644 --- a/core-java-modules/core-java-collections-list-2/pom.xml +++ b/core-java-modules/core-java-collections-list-2/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-collections-list-2 - 0.1.0-SNAPSHOT core-java-collections-list-2 jar diff --git a/core-java-modules/core-java-collections-list-3/pom.xml b/core-java-modules/core-java-collections-list-3/pom.xml index 912204bcc67e..f01fe1f3b9ae 100644 --- a/core-java-modules/core-java-collections-list-3/pom.xml +++ b/core-java-modules/core-java-collections-list-3/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-collections-list-3 - 0.1.0-SNAPSHOT core-java-collections-list-3 jar diff --git a/core-java-modules/core-java-collections-list-4/pom.xml b/core-java-modules/core-java-collections-list-4/pom.xml index 964ea4f5a16b..6d068298ec3e 100644 --- a/core-java-modules/core-java-collections-list-4/pom.xml +++ b/core-java-modules/core-java-collections-list-4/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-collections-list-4 - 0.1.0-SNAPSHOT core-java-collections-list-4 jar diff --git a/core-java-modules/core-java-collections-list-5/pom.xml b/core-java-modules/core-java-collections-list-5/pom.xml index 0807f7612c27..b51dda4091d6 100644 --- a/core-java-modules/core-java-collections-list-5/pom.xml +++ b/core-java-modules/core-java-collections-list-5/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-collections-list-5 - 0.1.0-SNAPSHOT core-java-collections-list-5 jar diff --git a/core-java-modules/core-java-collections-list/pom.xml b/core-java-modules/core-java-collections-list/pom.xml index 0cc8828a0d9a..94abb334e028 100644 --- a/core-java-modules/core-java-collections-list/pom.xml +++ b/core-java-modules/core-java-collections-list/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-collections-list - 0.1.0-SNAPSHOT core-java-collections-list jar diff --git a/core-java-modules/core-java-collections-maps-2/pom.xml b/core-java-modules/core-java-collections-maps-2/pom.xml index 1e526ef8922d..15ca688ad24f 100644 --- a/core-java-modules/core-java-collections-maps-2/pom.xml +++ b/core-java-modules/core-java-collections-maps-2/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-collections-maps-2 - 0.1.0-SNAPSHOT core-java-collections-maps-2 jar diff --git a/core-java-modules/core-java-collections-maps-3/pom.xml b/core-java-modules/core-java-collections-maps-3/pom.xml index a5bb6dc33837..98a0d18fe924 100644 --- a/core-java-modules/core-java-collections-maps-3/pom.xml +++ b/core-java-modules/core-java-collections-maps-3/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-collections-maps-3 - 0.1.0-SNAPSHOT core-java-collections-maps-3 jar diff --git a/core-java-modules/core-java-collections-maps-4/pom.xml b/core-java-modules/core-java-collections-maps-4/pom.xml index a85e2cde2a60..f1734b737906 100644 --- a/core-java-modules/core-java-collections-maps-4/pom.xml +++ b/core-java-modules/core-java-collections-maps-4/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-collections-maps-4 - 0.1.0-SNAPSHOT core-java-collections-maps-4 jar diff --git a/core-java-modules/core-java-collections-maps-5/pom.xml b/core-java-modules/core-java-collections-maps-5/pom.xml index f12e044b2305..593ec5a8f687 100644 --- a/core-java-modules/core-java-collections-maps-5/pom.xml +++ b/core-java-modules/core-java-collections-maps-5/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-collections-maps-5 - 0.1.0-SNAPSHOT core-java-collections-maps-5 jar diff --git a/core-java-modules/core-java-collections-maps-6/pom.xml b/core-java-modules/core-java-collections-maps-6/pom.xml index 9910d086914d..70a04c352bb0 100644 --- a/core-java-modules/core-java-collections-maps-6/pom.xml +++ b/core-java-modules/core-java-collections-maps-6/pom.xml @@ -1,17 +1,17 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 core-java-collections-maps-6 - 0.1.0-SNAPSHOT core-java-collections-maps-6 jar + core-java-modules com.baeldung.core-java-modules 0.0.1-SNAPSHOT - 4.0.0 5.2.5.RELEASE diff --git a/core-java-modules/core-java-collections-maps/pom.xml b/core-java-modules/core-java-collections-maps/pom.xml index 3a1bf0d8a1a9..5e19117e0840 100644 --- a/core-java-modules/core-java-collections-maps/pom.xml +++ b/core-java-modules/core-java-collections-maps/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-collections-maps - 0.1.0-SNAPSHOT core-java-collections-maps jar diff --git a/core-java-modules/core-java-collections-set-2/pom.xml b/core-java-modules/core-java-collections-set-2/pom.xml index b1aadb0c22df..680c01d8cabd 100644 --- a/core-java-modules/core-java-collections-set-2/pom.xml +++ b/core-java-modules/core-java-collections-set-2/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-collections-set-2 - 0.0.1-SNAPSHOT core-java-collections-set-2 jar diff --git a/core-java-modules/core-java-collections-set/pom.xml b/core-java-modules/core-java-collections-set/pom.xml index 0b6e324c784e..e130837f1cbc 100644 --- a/core-java-modules/core-java-collections-set/pom.xml +++ b/core-java-modules/core-java-collections-set/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-collections-set - 0.1.0-SNAPSHOT core-java-collections-set jar diff --git a/core-java-modules/core-java-collections/pom.xml b/core-java-modules/core-java-collections/pom.xml index eab7a35584a9..be91492d0645 100644 --- a/core-java-modules/core-java-collections/pom.xml +++ b/core-java-modules/core-java-collections/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-collections - 0.1.0-SNAPSHOT core-java-collections jar diff --git a/core-java-modules/core-java-concurrency-2/pom.xml b/core-java-modules/core-java-concurrency-2/pom.xml index c61f28a6b3ae..e373c829cc82 100644 --- a/core-java-modules/core-java-concurrency-2/pom.xml +++ b/core-java-modules/core-java-concurrency-2/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-concurrency-2 - 0.1.0-SNAPSHOT core-java-concurrency-2 jar diff --git a/core-java-modules/core-java-concurrency-advanced-2/pom.xml b/core-java-modules/core-java-concurrency-advanced-2/pom.xml index 1f19dc8cca0d..5c96684311e3 100644 --- a/core-java-modules/core-java-concurrency-advanced-2/pom.xml +++ b/core-java-modules/core-java-concurrency-advanced-2/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-concurrency-advanced-2 - 0.1.0-SNAPSHOT core-java-concurrency-advanced-2 jar diff --git a/core-java-modules/core-java-concurrency-advanced-3/pom.xml b/core-java-modules/core-java-concurrency-advanced-3/pom.xml index 49a72112b4e7..7fa859c2d5d1 100644 --- a/core-java-modules/core-java-concurrency-advanced-3/pom.xml +++ b/core-java-modules/core-java-concurrency-advanced-3/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-concurrency-advanced-3 - 0.1.0-SNAPSHOT core-java-concurrency-advanced-3 jar diff --git a/core-java-modules/core-java-concurrency-advanced-4/pom.xml b/core-java-modules/core-java-concurrency-advanced-4/pom.xml index 5bd7ccfa0728..2ffe19b13c8a 100644 --- a/core-java-modules/core-java-concurrency-advanced-4/pom.xml +++ b/core-java-modules/core-java-concurrency-advanced-4/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-concurrency-advanced-4 - 0.1.0-SNAPSHOT core-java-concurrency-advanced-4 jar @@ -14,9 +13,6 @@ 0.0.1-SNAPSHOT - - - core-java-concurrency-advanced-4 diff --git a/core-java-modules/core-java-concurrency-advanced/pom.xml b/core-java-modules/core-java-concurrency-advanced/pom.xml index 3c726e128406..18cfc5371ca9 100644 --- a/core-java-modules/core-java-concurrency-advanced/pom.xml +++ b/core-java-modules/core-java-concurrency-advanced/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-concurrency-advanced - 0.1.0-SNAPSHOT core-java-concurrency-advanced jar diff --git a/core-java-modules/core-java-concurrency-basic-2/pom.xml b/core-java-modules/core-java-concurrency-basic-2/pom.xml index 9ca12da7fb9c..0cdfd68f03e8 100644 --- a/core-java-modules/core-java-concurrency-basic-2/pom.xml +++ b/core-java-modules/core-java-concurrency-basic-2/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-concurrency-basic-2 - 0.1.0-SNAPSHOT core-java-concurrency-basic-2 jar diff --git a/core-java-modules/core-java-concurrency-basic-3/pom.xml b/core-java-modules/core-java-concurrency-basic-3/pom.xml index 728987755064..1983d3c163ab 100644 --- a/core-java-modules/core-java-concurrency-basic-3/pom.xml +++ b/core-java-modules/core-java-concurrency-basic-3/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-concurrency-basic-3 - 0.1.0-SNAPSHOT core-java-concurrency-basic-3 jar @@ -14,6 +13,15 @@ 0.0.1-SNAPSHOT + + + org.awaitility + awaitility + ${awaitility.version} + test + + + core-java-concurrency-basic-3 @@ -28,12 +36,4 @@ 4.2.0 - - - org.awaitility - awaitility - ${awaitility.version} - test - - \ No newline at end of file diff --git a/core-java-modules/core-java-concurrency-basic/pom.xml b/core-java-modules/core-java-concurrency-basic/pom.xml index 1e3157291a93..36d59f254ca1 100644 --- a/core-java-modules/core-java-concurrency-basic/pom.xml +++ b/core-java-modules/core-java-concurrency-basic/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-concurrency-basic - 0.1.0-SNAPSHOT core-java-concurrency-basic jar diff --git a/core-java-modules/core-java-concurrency-collections-2/pom.xml b/core-java-modules/core-java-concurrency-collections-2/pom.xml index 9a95662faee7..a85721e47490 100644 --- a/core-java-modules/core-java-concurrency-collections-2/pom.xml +++ b/core-java-modules/core-java-concurrency-collections-2/pom.xml @@ -3,7 +3,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-concurrency-collections-2 - 0.1.0-SNAPSHOT core-java-concurrency-collections-2 jar diff --git a/core-java-modules/core-java-concurrency-collections/pom.xml b/core-java-modules/core-java-concurrency-collections/pom.xml index 8b8d2fe03b50..a35da4ce49ed 100644 --- a/core-java-modules/core-java-concurrency-collections/pom.xml +++ b/core-java-modules/core-java-concurrency-collections/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-concurrency-collections - 0.1.0-SNAPSHOT core-java-concurrency-collections jar diff --git a/core-java-modules/core-java-concurrency-simple/pom.xml b/core-java-modules/core-java-concurrency-simple/pom.xml index 159a105035f7..a16df4fc9724 100644 --- a/core-java-modules/core-java-concurrency-simple/pom.xml +++ b/core-java-modules/core-java-concurrency-simple/pom.xml @@ -3,7 +3,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-concurrency-simple - 0.1.0-SNAPSHOT core-java-concurrency-simple jar diff --git a/core-java-modules/core-java-console/pom.xml b/core-java-modules/core-java-console/pom.xml index 200e2707dd7f..4debf9388be8 100644 --- a/core-java-modules/core-java-console/pom.xml +++ b/core-java-modules/core-java-console/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-console - 0.1.0-SNAPSHOT core-java-console jar diff --git a/core-java-modules/core-java-date-operations-1/pom.xml b/core-java-modules/core-java-date-operations-1/pom.xml index c5d46723d87f..5bfbb5bab0fe 100644 --- a/core-java-modules/core-java-date-operations-1/pom.xml +++ b/core-java-modules/core-java-date-operations-1/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-date-operations-1 - ${project.parent.version} core-java-date-operations-1 jar diff --git a/core-java-modules/core-java-date-operations-2/pom.xml b/core-java-modules/core-java-date-operations-2/pom.xml index 461ba70b6204..c6a22a4166d4 100644 --- a/core-java-modules/core-java-date-operations-2/pom.xml +++ b/core-java-modules/core-java-date-operations-2/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-date-operations-2 - ${project.parent.version} core-java-date-operations-2 jar diff --git a/core-java-modules/core-java-date-operations-3/pom.xml b/core-java-modules/core-java-date-operations-3/pom.xml index 8713139ba863..89c21a31c15e 100644 --- a/core-java-modules/core-java-date-operations-3/pom.xml +++ b/core-java-modules/core-java-date-operations-3/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-date-operations-3 - ${project.parent.version} core-java-date-operations-3 jar @@ -14,10 +13,4 @@ 0.0.1-SNAPSHOT - - - - - - \ No newline at end of file diff --git a/core-java-modules/core-java-datetime-string-2/pom.xml b/core-java-modules/core-java-datetime-string-2/pom.xml index 3ec9ccaac41c..458fba25a27d 100644 --- a/core-java-modules/core-java-datetime-string-2/pom.xml +++ b/core-java-modules/core-java-datetime-string-2/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-datetime-string-2 - ${project.parent.version} core-java-datetime-string-2 jar diff --git a/core-java-modules/core-java-datetime-string/pom.xml b/core-java-modules/core-java-datetime-string/pom.xml index 2b3c2edb02f1..3efb2fe72855 100644 --- a/core-java-modules/core-java-datetime-string/pom.xml +++ b/core-java-modules/core-java-datetime-string/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-datetime-string - ${project.parent.version} core-java-datetime-string jar @@ -20,7 +19,6 @@ commons-lang3 ${commons-lang3.version} - commons-validator commons-validator diff --git a/core-java-modules/core-java-exceptions-2/pom.xml b/core-java-modules/core-java-exceptions-2/pom.xml index 9103672cd472..8bf5605f09fe 100644 --- a/core-java-modules/core-java-exceptions-2/pom.xml +++ b/core-java-modules/core-java-exceptions-2/pom.xml @@ -5,8 +5,6 @@ core-java-exceptions-2 core-java-exceptions-2 jar - - http://maven.apache.org com.baeldung.core-java-modules diff --git a/core-java-modules/core-java-exceptions-3/pom.xml b/core-java-modules/core-java-exceptions-3/pom.xml index 7eaa57edf158..6ef979b54ae3 100644 --- a/core-java-modules/core-java-exceptions-3/pom.xml +++ b/core-java-modules/core-java-exceptions-3/pom.xml @@ -3,9 +3,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - com.baeldung.exceptions core-java-exceptions-3 - 0.1.0-SNAPSHOT core-java-exceptions-3 jar diff --git a/core-java-modules/core-java-exceptions-4/pom.xml b/core-java-modules/core-java-exceptions-4/pom.xml index e9eb1bf37939..c41c782fcc92 100644 --- a/core-java-modules/core-java-exceptions-4/pom.xml +++ b/core-java-modules/core-java-exceptions-4/pom.xml @@ -3,9 +3,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - com.baeldung.exceptions core-java-exceptions-4 - 0.1.0-SNAPSHOT core-java-exceptions-4 jar diff --git a/core-java-modules/core-java-exceptions/pom.xml b/core-java-modules/core-java-exceptions/pom.xml index 866248b41657..0bb6e86c7667 100644 --- a/core-java-modules/core-java-exceptions/pom.xml +++ b/core-java-modules/core-java-exceptions/pom.xml @@ -3,9 +3,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - com.baeldung.exceptions core-java-exceptions - 0.1.0-SNAPSHOT core-java-exceptions jar diff --git a/core-java-modules/core-java-function/pom.xml b/core-java-modules/core-java-function/pom.xml index ebc34aaf4b91..e8b538ad2454 100644 --- a/core-java-modules/core-java-function/pom.xml +++ b/core-java-modules/core-java-function/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-function - 0.1.0-SNAPSHOT core-java-function jar diff --git a/core-java-modules/core-java-functional/pom.xml b/core-java-modules/core-java-functional/pom.xml index 9ad47f813382..4b0bf9f730e5 100644 --- a/core-java-modules/core-java-functional/pom.xml +++ b/core-java-modules/core-java-functional/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-functional - 0.1.0-SNAPSHOT core-java-functional jar diff --git a/core-java-modules/core-java-hex/pom.xml b/core-java-modules/core-java-hex/pom.xml index afac1c4d66a8..71e6b15b2e96 100644 --- a/core-java-modules/core-java-hex/pom.xml +++ b/core-java-modules/core-java-hex/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-hex - 0.1.0-SNAPSHOT core-java-hex jar @@ -14,12 +13,4 @@ 0.0.1-SNAPSHOT - - - - - - - - \ No newline at end of file diff --git a/core-java-modules/core-java-httpclient/pom.xml b/core-java-modules/core-java-httpclient/pom.xml index 3df0447ff005..f3730d1b45bb 100644 --- a/core-java-modules/core-java-httpclient/pom.xml +++ b/core-java-modules/core-java-httpclient/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-httpclient - 0.1.0-SNAPSHOT core-java-httpclient jar diff --git a/core-java-modules/core-java-io-2/pom.xml b/core-java-modules/core-java-io-2/pom.xml index b5f43d5a94ef..8f4f2518fe33 100644 --- a/core-java-modules/core-java-io-2/pom.xml +++ b/core-java-modules/core-java-io-2/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-io-2 - 0.1.0-SNAPSHOT core-java-io-2 jar diff --git a/core-java-modules/core-java-io-3/pom.xml b/core-java-modules/core-java-io-3/pom.xml index 49011338541a..26ea30183730 100644 --- a/core-java-modules/core-java-io-3/pom.xml +++ b/core-java-modules/core-java-io-3/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-io-3 - 0.1.0-SNAPSHOT core-java-io-3 jar diff --git a/core-java-modules/core-java-io-4/pom.xml b/core-java-modules/core-java-io-4/pom.xml index 2cc05698fce7..30177e5c09ab 100644 --- a/core-java-modules/core-java-io-4/pom.xml +++ b/core-java-modules/core-java-io-4/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-io-4 - 0.1.0-SNAPSHOT core-java-io-4 jar diff --git a/core-java-modules/core-java-io-apis-2/pom.xml b/core-java-modules/core-java-io-apis-2/pom.xml index 70c3a87da296..5ad5528bad1f 100644 --- a/core-java-modules/core-java-io-apis-2/pom.xml +++ b/core-java-modules/core-java-io-apis-2/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-io-apis-2 - 0.1.0-SNAPSHOT core-java-io-apis-2 jar diff --git a/core-java-modules/core-java-io-apis/pom.xml b/core-java-modules/core-java-io-apis/pom.xml index fab2bff9593b..f9d404cd5be1 100644 --- a/core-java-modules/core-java-io-apis/pom.xml +++ b/core-java-modules/core-java-io-apis/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-io-apis - 0.1.0-SNAPSHOT core-java-io-apis jar diff --git a/core-java-modules/core-java-io-conversions-2/pom.xml b/core-java-modules/core-java-io-conversions-2/pom.xml index 24708ad9678a..2c49bbfd81a8 100644 --- a/core-java-modules/core-java-io-conversions-2/pom.xml +++ b/core-java-modules/core-java-io-conversions-2/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-io-conversions-2 - 0.1.0-SNAPSHOT core-java-io-conversions-2 jar diff --git a/core-java-modules/core-java-io-conversions/pom.xml b/core-java-modules/core-java-io-conversions/pom.xml index 8d5a47a1ac07..a44c352df285 100644 --- a/core-java-modules/core-java-io-conversions/pom.xml +++ b/core-java-modules/core-java-io-conversions/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-io-conversions - 0.1.0-SNAPSHOT core-java-io-conversions jar diff --git a/core-java-modules/core-java-io/pom.xml b/core-java-modules/core-java-io/pom.xml index e645534b46fa..ce072e687567 100644 --- a/core-java-modules/core-java-io/pom.xml +++ b/core-java-modules/core-java-io/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-io - 0.1.0-SNAPSHOT core-java-io jar diff --git a/core-java-modules/core-java-jar/pom.xml b/core-java-modules/core-java-jar/pom.xml index 0ce2414f1e22..e4a43bdf1f35 100644 --- a/core-java-modules/core-java-jar/pom.xml +++ b/core-java-modules/core-java-jar/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-jar - 0.1.0-SNAPSHOT core-java-jar jar diff --git a/core-java-modules/core-java-jndi/pom.xml b/core-java-modules/core-java-jndi/pom.xml index 752700c39036..e48bec6622e3 100644 --- a/core-java-modules/core-java-jndi/pom.xml +++ b/core-java-modules/core-java-jndi/pom.xml @@ -3,9 +3,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - com.baeldung.jndi core-java-jndi - 1.0-SNAPSHOT core-java-jndi diff --git a/core-java-modules/core-java-jvm-2/pom.xml b/core-java-modules/core-java-jvm-2/pom.xml index 59d2842ffed4..2ccc847a6f19 100644 --- a/core-java-modules/core-java-jvm-2/pom.xml +++ b/core-java-modules/core-java-jvm-2/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-jvm-2 - 0.1.0-SNAPSHOT core-java-jvm-2 jar @@ -47,10 +46,8 @@ 0.10 0.10.2 - 11 11 - \ No newline at end of file diff --git a/core-java-modules/core-java-jvm-3/pom.xml b/core-java-modules/core-java-jvm-3/pom.xml index cb2d8b0b85f5..78f4201c942d 100644 --- a/core-java-modules/core-java-jvm-3/pom.xml +++ b/core-java-modules/core-java-jvm-3/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-jvm-3 - 0.1.0-SNAPSHOT core-java-jvm-3 jar @@ -14,7 +13,4 @@ 0.0.1-SNAPSHOT - - - \ No newline at end of file diff --git a/core-java-modules/core-java-jvm/pom.xml b/core-java-modules/core-java-jvm/pom.xml index 856c6356a453..52bdf8bc5da0 100644 --- a/core-java-modules/core-java-jvm/pom.xml +++ b/core-java-modules/core-java-jvm/pom.xml @@ -1,10 +1,9 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-jvm - 0.1.0-SNAPSHOT core-java-jvm jar diff --git a/core-java-modules/core-java-lambdas/pom.xml b/core-java-modules/core-java-lambdas/pom.xml index f1e61ab8bfcd..a7fc5355d76f 100644 --- a/core-java-modules/core-java-lambdas/pom.xml +++ b/core-java-modules/core-java-lambdas/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-lambdas - 0.1.0-SNAPSHOT core-java-lambdas jar diff --git a/core-java-modules/core-java-lang-2/pom.xml b/core-java-modules/core-java-lang-2/pom.xml index 4a89a2257725..22055cf252d0 100644 --- a/core-java-modules/core-java-lang-2/pom.xml +++ b/core-java-modules/core-java-lang-2/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-lang-2 - 0.1.0-SNAPSHOT core-java-lang-2 jar diff --git a/core-java-modules/core-java-lang-3/pom.xml b/core-java-modules/core-java-lang-3/pom.xml index 331d91dff6f3..f29fa6494a56 100644 --- a/core-java-modules/core-java-lang-3/pom.xml +++ b/core-java-modules/core-java-lang-3/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-lang-3 - 0.1.0-SNAPSHOT core-java-lang-3 jar diff --git a/core-java-modules/core-java-lang-4/pom.xml b/core-java-modules/core-java-lang-4/pom.xml index de67ddf55a8a..6977621a0ea8 100644 --- a/core-java-modules/core-java-lang-4/pom.xml +++ b/core-java-modules/core-java-lang-4/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-lang-4 - 0.1.0-SNAPSHOT core-java-lang-4 jar diff --git a/core-java-modules/core-java-lang-5/pom.xml b/core-java-modules/core-java-lang-5/pom.xml index e3130632fbbd..8e95fc4405e0 100644 --- a/core-java-modules/core-java-lang-5/pom.xml +++ b/core-java-modules/core-java-lang-5/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-lang-5 - 0.1.0-SNAPSHOT core-java-lang-5 jar @@ -13,12 +12,6 @@ core-java-modules 0.0.1-SNAPSHOT - - - 3.12.0 - 0.10.2 - - core-java-lang-5 @@ -29,4 +22,10 @@ + + + 3.12.0 + 0.10.2 + + \ No newline at end of file diff --git a/core-java-modules/core-java-lang-math-2/pom.xml b/core-java-modules/core-java-lang-math-2/pom.xml index e6ead5335015..223c791d354c 100644 --- a/core-java-modules/core-java-lang-math-2/pom.xml +++ b/core-java-modules/core-java-lang-math-2/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-lang-math-2 - 0.0.1-SNAPSHOT core-java-lang-math-2 diff --git a/core-java-modules/core-java-lang-math-3/pom.xml b/core-java-modules/core-java-lang-math-3/pom.xml index 38cb6dfa17f0..9cd3673df323 100644 --- a/core-java-modules/core-java-lang-math-3/pom.xml +++ b/core-java-modules/core-java-lang-math-3/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-lang-math-3 - 0.0.1-SNAPSHOT core-java-lang-math-3 diff --git a/core-java-modules/core-java-lang-math/pom.xml b/core-java-modules/core-java-lang-math/pom.xml index 37550b67d8e2..551e5db1d592 100644 --- a/core-java-modules/core-java-lang-math/pom.xml +++ b/core-java-modules/core-java-lang-math/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-lang-math - 0.1.0-SNAPSHOT core-java-lang-math jar diff --git a/core-java-modules/core-java-lang-operators-2/pom.xml b/core-java-modules/core-java-lang-operators-2/pom.xml index 9d925c553a94..4170f9f6a05a 100644 --- a/core-java-modules/core-java-lang-operators-2/pom.xml +++ b/core-java-modules/core-java-lang-operators-2/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-lang-operators-2 - 0.1.0-SNAPSHOT core-java-lang-operators-2 jar diff --git a/core-java-modules/core-java-lang-operators/pom.xml b/core-java-modules/core-java-lang-operators/pom.xml index c61fb8135465..1815d01dcca9 100644 --- a/core-java-modules/core-java-lang-operators/pom.xml +++ b/core-java-modules/core-java-lang-operators/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-lang-operators - 0.1.0-SNAPSHOT core-java-lang-operators jar diff --git a/core-java-modules/core-java-lang-syntax-2/pom.xml b/core-java-modules/core-java-lang-syntax-2/pom.xml index fdb050317437..bae5f0b6bd63 100644 --- a/core-java-modules/core-java-lang-syntax-2/pom.xml +++ b/core-java-modules/core-java-lang-syntax-2/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-lang-syntax-2 - 0.1.0-SNAPSHOT core-java-lang-syntax-2 jar diff --git a/core-java-modules/core-java-lang-syntax/pom.xml b/core-java-modules/core-java-lang-syntax/pom.xml index 7cdbc40fbc4c..005bdc73cccb 100644 --- a/core-java-modules/core-java-lang-syntax/pom.xml +++ b/core-java-modules/core-java-lang-syntax/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-lang-syntax - 0.1.0-SNAPSHOT core-java-lang-syntax jar diff --git a/core-java-modules/core-java-lang/pom.xml b/core-java-modules/core-java-lang/pom.xml index 4989c6a5a702..27cf0ac27644 100644 --- a/core-java-modules/core-java-lang/pom.xml +++ b/core-java-modules/core-java-lang/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-lang - 0.1.0-SNAPSHOT core-java-lang jar diff --git a/core-java-modules/core-java-networking-4/pom.xml b/core-java-modules/core-java-networking-4/pom.xml index a3694cfea860..5fca4a1cab75 100644 --- a/core-java-modules/core-java-networking-4/pom.xml +++ b/core-java-modules/core-java-networking-4/pom.xml @@ -14,7 +14,6 @@ - commons-validator commons-validator @@ -25,7 +24,6 @@ jsoup ${jsoup.version} - diff --git a/core-java-modules/core-java-networking/pom.xml b/core-java-modules/core-java-networking/pom.xml index 9974134eaea8..19c620198d12 100644 --- a/core-java-modules/core-java-networking/pom.xml +++ b/core-java-modules/core-java-networking/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-networking - 0.1.0-SNAPSHOT core-java-networking jar diff --git a/core-java-modules/core-java-nio-2/pom.xml b/core-java-modules/core-java-nio-2/pom.xml index eb56c2bf6835..e35b70cfc745 100644 --- a/core-java-modules/core-java-nio-2/pom.xml +++ b/core-java-modules/core-java-nio-2/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-nio-2 - 0.1.0-SNAPSHOT core-java-nio-2 jar diff --git a/core-java-modules/core-java-nio/pom.xml b/core-java-modules/core-java-nio/pom.xml index 9e1c529a65f9..35fef82df59a 100644 --- a/core-java-modules/core-java-nio/pom.xml +++ b/core-java-modules/core-java-nio/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-nio - 0.1.0-SNAPSHOT core-java-nio jar diff --git a/core-java-modules/core-java-numbers-2/pom.xml b/core-java-modules/core-java-numbers-2/pom.xml index ac3843607e77..46e0fa47b416 100644 --- a/core-java-modules/core-java-numbers-2/pom.xml +++ b/core-java-modules/core-java-numbers-2/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-numbers-2 - 0.1.0-SNAPSHOT core-java-numbers-2 jar diff --git a/core-java-modules/core-java-numbers-6/pom.xml b/core-java-modules/core-java-numbers-6/pom.xml index 4957eb89c67f..0f78f41b9fae 100644 --- a/core-java-modules/core-java-numbers-6/pom.xml +++ b/core-java-modules/core-java-numbers-6/pom.xml @@ -6,16 +6,12 @@ core-java-numbers-6 jar - + com.baeldung.core-java-modules core-java-modules 0.0.1-SNAPSHOT - - - - core-java-numbers-6 diff --git a/core-java-modules/core-java-numbers/pom.xml b/core-java-modules/core-java-numbers/pom.xml index 4b2cae8ee955..38def238e88c 100644 --- a/core-java-modules/core-java-numbers/pom.xml +++ b/core-java-modules/core-java-numbers/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-numbers - 0.1.0-SNAPSHOT core-java-numbers jar diff --git a/core-java-modules/core-java-optional/pom.xml b/core-java-modules/core-java-optional/pom.xml index 08441f6cee6a..eeefed867e93 100644 --- a/core-java-modules/core-java-optional/pom.xml +++ b/core-java-modules/core-java-optional/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-optional - 0.1.0-SNAPSHOT core-java-optional jar diff --git a/core-java-modules/core-java-os/pom.xml b/core-java-modules/core-java-os/pom.xml index ef29e435a5b9..d4ee34b8b7f9 100644 --- a/core-java-modules/core-java-os/pom.xml +++ b/core-java-modules/core-java-os/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-os - 0.1.0-SNAPSHOT core-java-os jar diff --git a/core-java-modules/core-java-perf/pom.xml b/core-java-modules/core-java-perf/pom.xml index f6f3ef795c15..c21fc94ec185 100644 --- a/core-java-modules/core-java-perf/pom.xml +++ b/core-java-modules/core-java-perf/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-perf - 0.1.0-SNAPSHOT core-java-perf jar diff --git a/core-java-modules/core-java-reflection-2/pom.xml b/core-java-modules/core-java-reflection-2/pom.xml index ee3eeee7345f..c7a4981533ce 100644 --- a/core-java-modules/core-java-reflection-2/pom.xml +++ b/core-java-modules/core-java-reflection-2/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-reflection-2 - 0.1.0-SNAPSHOT core-java-reflection-2 jar diff --git a/core-java-modules/core-java-reflection-private-constructor/pom.xml b/core-java-modules/core-java-reflection-private-constructor/pom.xml index b53aa2c61bd1..aee7815e2304 100644 --- a/core-java-modules/core-java-reflection-private-constructor/pom.xml +++ b/core-java-modules/core-java-reflection-private-constructor/pom.xml @@ -1,10 +1,9 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-reflection-private-constructor - 0.1.0-SNAPSHOT core-java-reflection-private-constructor jar diff --git a/core-java-modules/core-java-reflection/pom.xml b/core-java-modules/core-java-reflection/pom.xml index f6ee08dbda12..a836ee4a2281 100644 --- a/core-java-modules/core-java-reflection/pom.xml +++ b/core-java-modules/core-java-reflection/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-reflection - 0.1.0-SNAPSHOT core-java-reflection jar diff --git a/core-java-modules/core-java-regex-2/pom.xml b/core-java-modules/core-java-regex-2/pom.xml index ae9385e63c1e..ddfba35cb20b 100644 --- a/core-java-modules/core-java-regex-2/pom.xml +++ b/core-java-modules/core-java-regex-2/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-regex-2 - 0.1.0-SNAPSHOT core-java-regex-2 jar diff --git a/core-java-modules/core-java-regex/pom.xml b/core-java-modules/core-java-regex/pom.xml index 93f3ae3cdbaa..00b8107c573b 100644 --- a/core-java-modules/core-java-regex/pom.xml +++ b/core-java-modules/core-java-regex/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-regex - 0.1.0-SNAPSHOT core-java-regex jar diff --git a/core-java-modules/core-java-security-2/pom.xml b/core-java-modules/core-java-security-2/pom.xml index 7a354ee9e29c..0fc121c07050 100644 --- a/core-java-modules/core-java-security-2/pom.xml +++ b/core-java-modules/core-java-security-2/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-security-2 - 0.1.0-SNAPSHOT core-java-security-2 jar diff --git a/core-java-modules/core-java-security-3/pom.xml b/core-java-modules/core-java-security-3/pom.xml index 3cd546e6971e..fef8b532898b 100644 --- a/core-java-modules/core-java-security-3/pom.xml +++ b/core-java-modules/core-java-security-3/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-security-3 - 0.1.0-SNAPSHOT core-java-security-3 jar diff --git a/core-java-modules/core-java-security-algorithms/pom.xml b/core-java-modules/core-java-security-algorithms/pom.xml index 967ddc103e86..0dde9f861a33 100644 --- a/core-java-modules/core-java-security-algorithms/pom.xml +++ b/core-java-modules/core-java-security-algorithms/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-security-algorithms - 0.1.0-SNAPSHOT core-java-security-algorithms jar @@ -25,7 +24,6 @@ bcprov-jdk15on ${bouncycastle.version} - javax.xml.bind jaxb-api diff --git a/core-java-modules/core-java-security/pom.xml b/core-java-modules/core-java-security/pom.xml index 66b56ada74d3..921017b08064 100644 --- a/core-java-modules/core-java-security/pom.xml +++ b/core-java-modules/core-java-security/pom.xml @@ -1,10 +1,9 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-security - 0.1.0-SNAPSHOT core-java-security jar diff --git a/core-java-modules/core-java-serialization/pom.xml b/core-java-modules/core-java-serialization/pom.xml index c82ae9d1d6fa..04144fb27f03 100644 --- a/core-java-modules/core-java-serialization/pom.xml +++ b/core-java-modules/core-java-serialization/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-serialization - 0.1.0-SNAPSHOT core-java-serialization jar diff --git a/core-java-modules/core-java-streams-2/pom.xml b/core-java-modules/core-java-streams-2/pom.xml index c8fa83c55a7b..9725497b04dc 100644 --- a/core-java-modules/core-java-streams-2/pom.xml +++ b/core-java-modules/core-java-streams-2/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-streams-2 - 1.0 core-java-streams-2 jar diff --git a/core-java-modules/core-java-streams-3/pom.xml b/core-java-modules/core-java-streams-3/pom.xml index 3074a647ff36..9c657119b5f4 100644 --- a/core-java-modules/core-java-streams-3/pom.xml +++ b/core-java-modules/core-java-streams-3/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-streams-3 - 0.1.0-SNAPSHOT core-java-streams-3 jar diff --git a/core-java-modules/core-java-streams-4/pom.xml b/core-java-modules/core-java-streams-4/pom.xml index 46c0f3f7e124..fe791ebd42ee 100644 --- a/core-java-modules/core-java-streams-4/pom.xml +++ b/core-java-modules/core-java-streams-4/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-streams-4 - 0.1.0-SNAPSHOT core-java-streams-4 jar diff --git a/core-java-modules/core-java-streams-collect/pom.xml b/core-java-modules/core-java-streams-collect/pom.xml index c60cf2ab933d..e81598017cb3 100644 --- a/core-java-modules/core-java-streams-collect/pom.xml +++ b/core-java-modules/core-java-streams-collect/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-streams-4 - 0.1.0-SNAPSHOT core-java-streams-collect jar @@ -35,7 +34,6 @@ - 3.23.1 diff --git a/core-java-modules/core-java-streams-maps/pom.xml b/core-java-modules/core-java-streams-maps/pom.xml index 06cc9ceef6b4..66e1fedd874c 100644 --- a/core-java-modules/core-java-streams-maps/pom.xml +++ b/core-java-modules/core-java-streams-maps/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-streams-maps - 0.1.0-SNAPSHOT core-java-streams-maps jar diff --git a/core-java-modules/core-java-streams/pom.xml b/core-java-modules/core-java-streams/pom.xml index a6bb827e77b7..b0794829c295 100644 --- a/core-java-modules/core-java-streams/pom.xml +++ b/core-java-modules/core-java-streams/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-streams - 0.1.0-SNAPSHOT core-java-streams jar @@ -15,7 +14,6 @@ - org.openjdk.jmh jmh-core diff --git a/core-java-modules/core-java-string-algorithms-2/pom.xml b/core-java-modules/core-java-string-algorithms-2/pom.xml index 5af187abc205..3fdb022a4b46 100644 --- a/core-java-modules/core-java-string-algorithms-2/pom.xml +++ b/core-java-modules/core-java-string-algorithms-2/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-string-algorithms-2 - 0.1.0-SNAPSHOT core-java-string-algorithms-2 jar diff --git a/core-java-modules/core-java-string-algorithms-3/pom.xml b/core-java-modules/core-java-string-algorithms-3/pom.xml index 147ea22375da..74a9486ec073 100644 --- a/core-java-modules/core-java-string-algorithms-3/pom.xml +++ b/core-java-modules/core-java-string-algorithms-3/pom.xml @@ -3,7 +3,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-string-algorithms-3 - 0.1.0-SNAPSHOT core-java-string-algorithms-3 jar diff --git a/core-java-modules/core-java-string-algorithms/pom.xml b/core-java-modules/core-java-string-algorithms/pom.xml index 84f3b61f8473..10d28feb2f4c 100644 --- a/core-java-modules/core-java-string-algorithms/pom.xml +++ b/core-java-modules/core-java-string-algorithms/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-string-algorithms - 0.1.0-SNAPSHOT core-java-string-algorithms jar diff --git a/core-java-modules/core-java-string-apis-2/pom.xml b/core-java-modules/core-java-string-apis-2/pom.xml index ba983d759392..db97b8574819 100644 --- a/core-java-modules/core-java-string-apis-2/pom.xml +++ b/core-java-modules/core-java-string-apis-2/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-string-apis-2 - 0.0.1-SNAPSHOT core-java-string-apis-2 jar diff --git a/core-java-modules/core-java-string-apis/pom.xml b/core-java-modules/core-java-string-apis/pom.xml index 6a382c3c57ae..5d7737228c38 100644 --- a/core-java-modules/core-java-string-apis/pom.xml +++ b/core-java-modules/core-java-string-apis/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-string-apis - 0.1.0-SNAPSHOT core-java-string-apis jar diff --git a/core-java-modules/core-java-string-conversions-2/pom.xml b/core-java-modules/core-java-string-conversions-2/pom.xml index e424ef3083be..90463271b8a0 100644 --- a/core-java-modules/core-java-string-conversions-2/pom.xml +++ b/core-java-modules/core-java-string-conversions-2/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-string-conversions-2 - 0.1.0-SNAPSHOT core-java-string-conversions-2 jar diff --git a/core-java-modules/core-java-string-conversions/pom.xml b/core-java-modules/core-java-string-conversions/pom.xml index c715e22ed4ff..b87431cd0bf0 100644 --- a/core-java-modules/core-java-string-conversions/pom.xml +++ b/core-java-modules/core-java-string-conversions/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-string-conversions - 0.1.0-SNAPSHOT core-java-string-conversions jar diff --git a/core-java-modules/core-java-string-operations-2/pom.xml b/core-java-modules/core-java-string-operations-2/pom.xml index 92bfa6b2d82c..c6debc4f71d8 100644 --- a/core-java-modules/core-java-string-operations-2/pom.xml +++ b/core-java-modules/core-java-string-operations-2/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-string-operations-2 - 0.1.0-SNAPSHOT core-java-string-operations-2 jar diff --git a/core-java-modules/core-java-string-operations-3/pom.xml b/core-java-modules/core-java-string-operations-3/pom.xml index 19b3d57ffdc5..39167271fa8f 100644 --- a/core-java-modules/core-java-string-operations-3/pom.xml +++ b/core-java-modules/core-java-string-operations-3/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-string-operations-3 - 0.1.0-SNAPSHOT core-java-string-operations-3 jar diff --git a/core-java-modules/core-java-string-operations-4/pom.xml b/core-java-modules/core-java-string-operations-4/pom.xml index 0f1e377d1865..cc755cf470dc 100644 --- a/core-java-modules/core-java-string-operations-4/pom.xml +++ b/core-java-modules/core-java-string-operations-4/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-string-operations-4 - 0.1.0-SNAPSHOT core-java-string-operations-4 jar diff --git a/core-java-modules/core-java-string-operations-5/pom.xml b/core-java-modules/core-java-string-operations-5/pom.xml index efb32c73b949..2a2a353984bd 100644 --- a/core-java-modules/core-java-string-operations-5/pom.xml +++ b/core-java-modules/core-java-string-operations-5/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-string-operations-5 - 0.1.0-SNAPSHOT core-java-string-operations-5 jar diff --git a/core-java-modules/core-java-string-operations/pom.xml b/core-java-modules/core-java-string-operations/pom.xml index 097012528126..577736a32424 100644 --- a/core-java-modules/core-java-string-operations/pom.xml +++ b/core-java-modules/core-java-string-operations/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-string-operations - 0.1.0-SNAPSHOT core-java-string-operations jar diff --git a/core-java-modules/core-java-strings/pom.xml b/core-java-modules/core-java-strings/pom.xml index 2cc35dad5fce..e3cdb3c66645 100644 --- a/core-java-modules/core-java-strings/pom.xml +++ b/core-java-modules/core-java-strings/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-strings - 0.1.0-SNAPSHOT core-java-strings jar diff --git a/core-java-modules/core-java-sun/pom.xml b/core-java-modules/core-java-sun/pom.xml index e959932235de..c9427f66a331 100644 --- a/core-java-modules/core-java-sun/pom.xml +++ b/core-java-modules/core-java-sun/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-sun - 0.1.0-SNAPSHOT core-java-sun jar diff --git a/core-java-modules/core-java-time-measurements/pom.xml b/core-java-modules/core-java-time-measurements/pom.xml index ac5fb3a5e67f..7b2bc31ebbb3 100644 --- a/core-java-modules/core-java-time-measurements/pom.xml +++ b/core-java-modules/core-java-time-measurements/pom.xml @@ -3,9 +3,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - com.baeldung.exception.numberformat core-java-time-measurements - 0.0.1-SNAPSHOT core-java-time-measurements jar diff --git a/core-java-modules/core-java-uuid/pom.xml b/core-java-modules/core-java-uuid/pom.xml index 7d851292f52f..b97db174b4fa 100644 --- a/core-java-modules/core-java-uuid/pom.xml +++ b/core-java-modules/core-java-uuid/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-uuid - 0.1.0-SNAPSHOT core-java-uuid jar diff --git a/core-java-modules/core-java/pom.xml b/core-java-modules/core-java/pom.xml index 87abe6c007a8..552999702eba 100644 --- a/core-java-modules/core-java/pom.xml +++ b/core-java-modules/core-java/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java - 0.1.0-SNAPSHOT core-java jar diff --git a/core-java-modules/pom.xml b/core-java-modules/pom.xml index 52360d060faf..1292cdc6c8a0 100644 --- a/core-java-modules/pom.xml +++ b/core-java-modules/pom.xml @@ -16,20 +16,20 @@ - - - - - - - - - - - - - - + + + + + + + + + + + + + + core-java-annotations core-java-arrays-sorting diff --git a/core-java-modules/pre-jpms/pom.xml b/core-java-modules/pre-jpms/pom.xml index 11db8f802788..67bc9137679d 100644 --- a/core-java-modules/pre-jpms/pom.xml +++ b/core-java-modules/pre-jpms/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 pre-jpms - 0.0.1-SNAPSHOT pre-jpms jar diff --git a/couchbase/pom.xml b/couchbase/pom.xml index 095bda3610cb..823b33ee29dc 100644 --- a/couchbase/pom.xml +++ b/couchbase/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 couchbase - 0.1-SNAPSHOT couchbase jar Couchbase Tutorials diff --git a/custom-pmd/pom.xml b/custom-pmd/pom.xml index 38a5e304040e..8097d4fefafd 100644 --- a/custom-pmd/pom.xml +++ b/custom-pmd/pom.xml @@ -8,7 +8,6 @@ 0.0.1 custom-pmd jar - http://maven.apache.org com.baeldung diff --git a/data-structures/pom.xml b/data-structures/pom.xml index cba602878f28..aeadfcefc36b 100644 --- a/data-structures/pom.xml +++ b/data-structures/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 data-structures - 0.0.1-SNAPSHOT data-structures @@ -13,13 +12,6 @@ 1.0.0-SNAPSHOT - - - github.release.repo - https://raw.github.com/bulldog2011/bulldog-repo/master/repo/releases/ - - - com.leansoft @@ -39,6 +31,13 @@ + + + github.release.repo + https://raw.github.com/bulldog2011/bulldog-repo/master/repo/releases/ + + + 0.7.0 diff --git a/ddd/pom.xml b/ddd/pom.xml index 6128bb1cd957..443b2b5148e0 100644 --- a/ddd/pom.xml +++ b/ddd/pom.xml @@ -3,7 +3,6 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - com.baeldung.ddd ddd ddd jar diff --git a/deeplearning4j/pom.xml b/deeplearning4j/pom.xml index 01bac93214dd..875d8cdf85b4 100644 --- a/deeplearning4j/pom.xml +++ b/deeplearning4j/pom.xml @@ -3,9 +3,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 - com.baeldung.deeplearning4j deeplearning4j - 1.0-SNAPSHOT deeplearning4j jar diff --git a/dependency-exclusion/core-java-exclusions/pom.xml b/dependency-exclusion/core-java-exclusions/pom.xml index cf1b36656d9a..69701a2ead2c 100644 --- a/dependency-exclusion/core-java-exclusions/pom.xml +++ b/dependency-exclusion/core-java-exclusions/pom.xml @@ -1,10 +1,9 @@ + xmlns="http://maven.apache.org/POM/4.0.0" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-exclusions - 0.0.0-SNAPSHOT core-java-exclusions jar @@ -14,34 +13,6 @@ 0.0.1-SNAPSHOT - - - - org.apache.maven.plugins - maven-surefire-plugin - ${surefire-version} - - alphabetical - 1 - - - junit - false - - - - - - - org.apache.maven.surefire - surefire-junit47 - dummy - - - - - - junit @@ -50,4 +21,32 @@ + + + + org.apache.maven.plugins + maven-surefire-plugin + ${surefire-version} + + alphabetical + 1 + + + junit + false + + + + + + + org.apache.maven.surefire + surefire-junit47 + dummy + + + + + + diff --git a/dependency-exclusion/dummy-surefire-junit47/pom.xml b/dependency-exclusion/dummy-surefire-junit47/pom.xml index 5859ddbe72f8..7332d8deb1e3 100644 --- a/dependency-exclusion/dummy-surefire-junit47/pom.xml +++ b/dependency-exclusion/dummy-surefire-junit47/pom.xml @@ -1,7 +1,7 @@ + xmlns="http://maven.apache.org/POM/4.0.0" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 org.apache.maven.surefire surefire-junit47 diff --git a/di-modules/guice/pom.xml b/di-modules/guice/pom.xml index a28dbe529791..d0d2876fc8e5 100644 --- a/di-modules/guice/pom.xml +++ b/di-modules/guice/pom.xml @@ -3,7 +3,6 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - com.baeldung.examples.guice guice guice jar diff --git a/discord4j/pom.xml b/discord4j/pom.xml index 3ea85c05c7a5..086adebee5e8 100644 --- a/discord4j/pom.xml +++ b/discord4j/pom.xml @@ -3,9 +3,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - com.baeldung discord4j - 0.0.1-SNAPSHOT discord4j Demo Discord bot using Discord4J + Spring Boot diff --git a/disruptor/pom.xml b/disruptor/pom.xml index c2f9cf34b0db..75e783e9354b 100644 --- a/disruptor/pom.xml +++ b/disruptor/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 disruptor - 0.1.0-SNAPSHOT disruptor jar diff --git a/docker-modules/docker-caching/multi-module-caching/pom.xml b/docker-modules/docker-caching/multi-module-caching/pom.xml index 94a370453c7e..1fdd6173bc76 100644 --- a/docker-modules/docker-caching/multi-module-caching/pom.xml +++ b/docker-modules/docker-caching/multi-module-caching/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 com.baeldung multi-module-caching diff --git a/docker-modules/docker-caching/single-module-caching/pom.xml b/docker-modules/docker-caching/single-module-caching/pom.xml index 4a4e53f1d346..a388c7563f61 100644 --- a/docker-modules/docker-caching/single-module-caching/pom.xml +++ b/docker-modules/docker-caching/single-module-caching/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 com.baeldung single-module-caching diff --git a/docker-modules/docker-compose-2/pom.xml b/docker-modules/docker-compose-2/pom.xml index 851742309d66..3a94ee3901c6 100644 --- a/docker-modules/docker-compose-2/pom.xml +++ b/docker-modules/docker-compose-2/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 docker-compose-2 Demo project for Spring Boot and Docker - Module docker-compose-2 diff --git a/docker-modules/docker-containers/pom.xml b/docker-modules/docker-containers/pom.xml index 42c2d403e4a4..79bf0aee722d 100644 --- a/docker-modules/docker-containers/pom.xml +++ b/docker-modules/docker-containers/pom.xml @@ -5,7 +5,6 @@ 4.0.0 com.baeldung.docker docker-containers - 0.0.1-SNAPSHOT Demo project for Spring Boot diff --git a/docker-modules/pom.xml b/docker-modules/pom.xml index 1a87fa5d1c9e..b4c5240718d2 100644 --- a/docker-modules/pom.xml +++ b/docker-modules/pom.xml @@ -3,9 +3,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - com.baeldung docker-modules - 1.0.0-SNAPSHOT docker-modules pom diff --git a/dozer/pom.xml b/dozer/pom.xml index 840763445c44..66f4ee8227a1 100644 --- a/dozer/pom.xml +++ b/dozer/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 dozer - 1.0 dozer From 97c0a4490198672a5a8c9ed16f5eb91d9bd6cf1a Mon Sep 17 00:00:00 2001 From: timis1 <12120641+timis1@users.noreply.github.com> Date: Wed, 5 Apr 2023 12:46:50 +0300 Subject: [PATCH 026/390] =?UTF-8?q?JAVA-18609=20GitHub=20Issue:=20Spring?= =?UTF-8?q?=20Batch=20-=20JobBuilderFactory=20and=20StepBui=E2=80=A6=20(#1?= =?UTF-8?q?3618)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * JAVA-18609 GitHub Issue: Spring Batch - JobBuilderFactory and StepBuilderFactory are deprecated --------- Co-authored-by: timis1 --- pom.xml | 5 +- spring-batch-2/pom.xml | 9 +- .../baeldung/batch/BatchConfiguration.java | 25 ++--- .../baeldung/batch/CoffeeItemProcessor.java | 2 +- .../JobCompletionNotificationListener.java | 4 +- .../batchscheduler/SpringBatchScheduler.java | 46 ++++---- .../batch/SpringBootBatchIntegrationTest.java | 27 +++-- .../SpringBatchSchedulerIntegrationTest.java | 29 ++--- spring-batch/pom.xml | 59 ++++------ spring-batch/repository.sqlite | Bin 73728 -> 73728 bytes .../src/main/java/com/baeldung/batch/App.java | 5 +- .../com/baeldung/batch/SpringBatchConfig.java | 105 ++++++++++++------ .../batch/SpringBatchRetryConfig.java | 45 ++++---- .../java/com/baeldung/batch/SpringConfig.java | 80 ------------- .../com/baeldung/batch/model/Transaction.java | 7 +- .../CustomMultiResourcePartitioner.java | 2 +- ...g.java => SpringBatchPartitionConfig.java} | 53 +++++---- ...pp.java => SpringBatchPartitionerApp.java} | 6 +- .../batch/service/CustomSkipPolicy.java | 12 +- .../batch/service/RecordFieldSetMapper.java | 2 +- .../batch/service/RetryItemProcessor.java | 8 +- .../service/adapter/LocalDateTimeAdapter.java | 3 +- .../springboot/SpringBootBatchConfig.java | 63 +++++------ .../SpringBatchConfiguration.java | 46 +++----- .../service/BookDetailsItemProcessor.java | 2 +- .../service/BookItemProcessor.java | 2 +- .../service/BookRecordFieldSetMapper.java | 2 +- .../taskletsvschunks/chunks/LineReader.java | 4 +- .../taskletsvschunks/chunks/LinesWriter.java | 5 +- .../taskletsvschunks/config/ChunksConfig.java | 67 ++--------- .../config/TaskletsConfig.java | 84 +++----------- .../tasklets/LinesReader.java | 2 +- .../ConditionalFlowApplication.java | 2 +- .../config/NumberInfoConfig.java | 85 ++++++++++---- .../conditionalflow/step/NotifierTasklet.java | 5 +- .../step/NumberInfoClassifier.java | 4 +- .../step/NumberInfoClassifierWithDecider.java | 2 +- .../step/PrependingStdoutWriter.java | 7 +- .../src/main/resources/output/output1.xml | 36 +++--- .../src/main/resources/output/output2.xml | 36 +++--- .../src/main/resources/output/output3.xml | 36 +++--- .../src/main/resources/output/output4.xml | 36 +++--- .../src/main/resources/output/output5.xml | 36 +++--- .../src/main/resources/spring-batch-intro.xml | 6 +- spring-batch/src/main/resources/spring.xml | 9 +- .../SpringBatchRetryIntegrationTest.java | 25 ++--- .../SpringBatchIntegrationTest.java | 34 ++---- .../SpringBatchStepScopeIntegrationTest.java | 40 +++---- .../chunks/ChunksIntegrationTest.java | 20 ++-- .../tasklets/TaskletsIntegrationTest.java | 18 +-- .../DeciderJobIntegrationTest.java | 21 +--- .../model/NumberInfoUnitTest.java | 6 +- .../test/resources/output/actual-output.json | 9 +- 53 files changed, 545 insertions(+), 739 deletions(-) delete mode 100644 spring-batch/src/main/java/com/baeldung/batch/SpringConfig.java rename spring-batch/src/main/java/com/baeldung/batch/partitioner/{SpringbatchPartitionConfig.java => SpringBatchPartitionConfig.java} (77%) rename spring-batch/src/main/java/com/baeldung/batch/partitioner/{SpringbatchPartitionerApp.java => SpringBatchPartitionerApp.java} (89%) diff --git a/pom.xml b/pom.xml index d44b83660778..ca55866a42cc 100644 --- a/pom.xml +++ b/pom.xml @@ -759,6 +759,7 @@ javafx spring-batch + spring-batch-2 spring-boot-rest spring-drools spring-exceptions @@ -781,7 +782,6 @@ server-modules apache-cxf-modules - spring-aop jmeter spring-aop-2 @@ -928,7 +928,6 @@ spring-5-webflux spring-5-webflux-2 spring-activiti - spring-batch-2 spring-core-2 spring-core-3 spring-core-5 @@ -1012,6 +1011,7 @@ javafx spring-batch + spring-batch-2 spring-boot-rest spring-drools spring-exceptions @@ -1180,7 +1180,6 @@ spring-5-webflux spring-5-webflux-2 spring-activiti - spring-batch-2 spring-core-2 spring-core-3 spring-core-5 diff --git a/spring-batch-2/pom.xml b/spring-batch-2/pom.xml index 12d31aca14e3..378191c91cf5 100644 --- a/spring-batch-2/pom.xml +++ b/spring-batch-2/pom.xml @@ -11,9 +11,9 @@ com.baeldung - parent-boot-2 + parent-boot-3 0.0.1-SNAPSHOT - ../parent-boot-2 + ../parent-boot-3 @@ -51,8 +51,9 @@ - 4.3.0 - 3.1.1 + 5.0.0 + 4.2.0 + com.baeldung.batch.SpringBootBatchProcessingApplication \ No newline at end of file diff --git a/spring-batch-2/src/main/java/com/baeldung/batch/BatchConfiguration.java b/spring-batch-2/src/main/java/com/baeldung/batch/BatchConfiguration.java index 0c053dd86ce1..770b6330dd70 100644 --- a/spring-batch-2/src/main/java/com/baeldung/batch/BatchConfiguration.java +++ b/spring-batch-2/src/main/java/com/baeldung/batch/BatchConfiguration.java @@ -4,31 +4,24 @@ import org.springframework.batch.core.Job; import org.springframework.batch.core.Step; -import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing; -import org.springframework.batch.core.configuration.annotation.JobBuilderFactory; -import org.springframework.batch.core.configuration.annotation.StepBuilderFactory; +import org.springframework.batch.core.job.builder.JobBuilder; import org.springframework.batch.core.launch.support.RunIdIncrementer; +import org.springframework.batch.core.repository.JobRepository; +import org.springframework.batch.core.step.builder.StepBuilder; import org.springframework.batch.item.database.BeanPropertyItemSqlParameterSourceProvider; import org.springframework.batch.item.database.JdbcBatchItemWriter; import org.springframework.batch.item.database.builder.JdbcBatchItemWriterBuilder; import org.springframework.batch.item.file.FlatFileItemReader; import org.springframework.batch.item.file.builder.FlatFileItemReaderBuilder; import org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.ClassPathResource; +import org.springframework.transaction.PlatformTransactionManager; @Configuration -@EnableBatchProcessing public class BatchConfiguration { - - @Autowired - public JobBuilderFactory jobBuilderFactory; - - @Autowired - public StepBuilderFactory stepBuilderFactory; @Value("${file.input}") private String fileInput; @@ -59,8 +52,8 @@ public JdbcBatchItemWriter writer(DataSource dataSource) { } @Bean - public Job importUserJob(JobCompletionNotificationListener listener, Step step1) { - return jobBuilderFactory.get("importUserJob") + public Job importUserJob(JobRepository jobRepository, JobCompletionNotificationListener listener, Step step1) { + return new JobBuilder("importUserJob", jobRepository) .incrementer(new RunIdIncrementer()) .listener(listener) .flow(step1) @@ -69,9 +62,9 @@ public Job importUserJob(JobCompletionNotificationListener listener, Step step1) } @Bean - public Step step1(JdbcBatchItemWriter writer) { - return stepBuilderFactory.get("step1") - . chunk(10) + public Step step1(JobRepository jobRepository, PlatformTransactionManager transactionManager, JdbcBatchItemWriter writer) { + return new StepBuilder("step1", jobRepository) + . chunk(10, transactionManager) .reader(reader()) .processor(processor()) .writer(writer) diff --git a/spring-batch-2/src/main/java/com/baeldung/batch/CoffeeItemProcessor.java b/spring-batch-2/src/main/java/com/baeldung/batch/CoffeeItemProcessor.java index b154b804536a..bd4173e9ed2d 100644 --- a/spring-batch-2/src/main/java/com/baeldung/batch/CoffeeItemProcessor.java +++ b/spring-batch-2/src/main/java/com/baeldung/batch/CoffeeItemProcessor.java @@ -10,7 +10,7 @@ public class CoffeeItemProcessor implements ItemProcessor { private static final Logger LOGGER = LoggerFactory.getLogger(CoffeeItemProcessor.class); @Override - public Coffee process(final Coffee coffee) throws Exception { + public Coffee process(final Coffee coffee) { String brand = coffee.getBrand().toUpperCase(); String origin = coffee.getOrigin().toUpperCase(); String chracteristics = coffee.getCharacteristics().toUpperCase(); diff --git a/spring-batch-2/src/main/java/com/baeldung/batch/JobCompletionNotificationListener.java b/spring-batch-2/src/main/java/com/baeldung/batch/JobCompletionNotificationListener.java index ca1de40aea5e..b61faeb13b7c 100644 --- a/spring-batch-2/src/main/java/com/baeldung/batch/JobCompletionNotificationListener.java +++ b/spring-batch-2/src/main/java/com/baeldung/batch/JobCompletionNotificationListener.java @@ -4,13 +4,13 @@ import org.slf4j.LoggerFactory; import org.springframework.batch.core.BatchStatus; import org.springframework.batch.core.JobExecution; -import org.springframework.batch.core.listener.JobExecutionListenerSupport; +import org.springframework.batch.core.JobExecutionListener; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Component; @Component -public class JobCompletionNotificationListener extends JobExecutionListenerSupport { +public class JobCompletionNotificationListener implements JobExecutionListener { private static final Logger LOGGER = LoggerFactory.getLogger(JobCompletionNotificationListener.class); diff --git a/spring-batch-2/src/main/java/com/baeldung/batchscheduler/SpringBatchScheduler.java b/spring-batch-2/src/main/java/com/baeldung/batchscheduler/SpringBatchScheduler.java index c830a41855c9..dcb2bc519995 100644 --- a/spring-batch-2/src/main/java/com/baeldung/batchscheduler/SpringBatchScheduler.java +++ b/spring-batch-2/src/main/java/com/baeldung/batchscheduler/SpringBatchScheduler.java @@ -7,15 +7,16 @@ import org.springframework.batch.core.JobExecution; import org.springframework.batch.core.JobParametersBuilder; import org.springframework.batch.core.Step; -import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing; -import org.springframework.batch.core.configuration.annotation.JobBuilderFactory; -import org.springframework.batch.core.configuration.annotation.StepBuilderFactory; +import org.springframework.batch.core.job.builder.JobBuilder; import org.springframework.batch.core.launch.JobLauncher; +import org.springframework.batch.core.repository.JobRepository; +import org.springframework.batch.core.step.builder.StepBuilder; import org.springframework.batch.item.ItemWriter; import org.springframework.batch.item.file.FlatFileItemReader; import org.springframework.batch.item.file.builder.FlatFileItemReaderBuilder; import org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.ClassPathResource; @@ -24,17 +25,16 @@ import org.springframework.scheduling.annotation.Scheduled; import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; import org.springframework.scheduling.support.ScheduledMethodRunnable; +import org.springframework.transaction.PlatformTransactionManager; import java.util.Date; import java.util.IdentityHashMap; -import java.util.List; import java.util.Map; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; @Configuration -@EnableBatchProcessing @EnableScheduling public class SpringBatchScheduler { @@ -47,20 +47,20 @@ public class SpringBatchScheduler { private final Map> scheduledTasks = new IdentityHashMap<>(); @Autowired - private JobBuilderFactory jobBuilderFactory; + private JobLauncher jobLauncher; @Autowired - private StepBuilderFactory stepBuilderFactory; + private JobRepository jobRepository; @Autowired - private JobLauncher jobLauncher; + private PlatformTransactionManager transactionManager; @Scheduled(fixedRate = 2000) public void launchJob() throws Exception { Date date = new Date(); logger.debug("scheduler starts at " + date); if (enabled.get()) { - JobExecution jobExecution = jobLauncher.run(job(), new JobParametersBuilder().addDate("launchDate", date) + JobExecution jobExecution = jobLauncher.run(job(jobRepository, transactionManager), new JobParametersBuilder().addDate("launchDate", date) .toJobParameters()); batchRunCounter.incrementAndGet(); logger.debug("Batch job ends with status as " + jobExecution.getStatus()); @@ -106,17 +106,16 @@ public void cancelFutureSchedulerTasks() { } @Bean - public Job job() { - return jobBuilderFactory - .get("job") - .start(readBooks()) + public Job job(JobRepository jobRepository, PlatformTransactionManager transactionManager) { + return new JobBuilder("job", jobRepository) + .start(readBooks(jobRepository, transactionManager)) .build(); } @Bean - protected Step readBooks() { - return stepBuilderFactory.get("readBooks") - . chunk(2) + protected Step readBooks(JobRepository jobRepository, PlatformTransactionManager transactionManager) { + return new StepBuilder("readBooks", jobRepository) + . chunk(2, transactionManager) .reader(reader()) .writer(writer()) .build(); @@ -128,7 +127,7 @@ public FlatFileItemReader reader() { .resource(new ClassPathResource("books.csv")) .delimited() .names(new String[] { "id", "name" }) - .fieldSetMapper(new BeanWrapperFieldSetMapper() { + .fieldSetMapper(new BeanWrapperFieldSetMapper<>() { { setTargetType(Book.class); } @@ -138,15 +137,10 @@ public FlatFileItemReader reader() { @Bean public ItemWriter writer() { - return new ItemWriter() { - - @Override - public void write(List items) throws Exception { - logger.debug("writer..." + items.size()); - for (Book item : items) { - logger.debug(item.toString()); - } - + return items -> { + logger.debug("writer..." + items.size()); + for (Book item : items) { + logger.debug(item.toString()); } }; } diff --git a/spring-batch-2/src/test/java/com/baeldung/batch/SpringBootBatchIntegrationTest.java b/spring-batch-2/src/test/java/com/baeldung/batch/SpringBootBatchIntegrationTest.java index ba2b8a6a1397..21fd7bf4b1e6 100644 --- a/spring-batch-2/src/test/java/com/baeldung/batch/SpringBootBatchIntegrationTest.java +++ b/spring-batch-2/src/test/java/com/baeldung/batch/SpringBootBatchIntegrationTest.java @@ -1,11 +1,10 @@ package com.baeldung.batch; -import static org.hamcrest.Matchers.is; -import static org.junit.Assert.assertThat; -import org.junit.After; -import org.junit.Test; -import org.junit.runner.RunWith; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.Test; import org.springframework.batch.core.ExitStatus; import org.springframework.batch.core.JobExecution; import org.springframework.batch.core.JobInstance; @@ -13,16 +12,17 @@ import org.springframework.batch.test.JobRepositoryTestUtils; import org.springframework.batch.test.context.SpringBatchTest; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.context.annotation.PropertySource; import org.springframework.test.annotation.DirtiesContext; -import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.context.junit.jupiter.SpringJUnitConfig; @SpringBatchTest -@SpringBootTest @DirtiesContext +@SpringJUnitConfig(BatchConfiguration.class) @PropertySource("classpath:application.properties") -@RunWith(SpringRunner.class) +@EnableAutoConfiguration public class SpringBootBatchIntegrationTest { @Autowired @@ -31,7 +31,10 @@ public class SpringBootBatchIntegrationTest { @Autowired private JobRepositoryTestUtils jobRepositoryTestUtils; - @After + @MockBean + private JobCompletionNotificationListener jobCompletionNotificationListener; + + @AfterEach public void cleanUp() { jobRepositoryTestUtils.removeJobExecutions(); } @@ -42,8 +45,8 @@ public void givenCoffeeList_whenJobExecuted_thenSuccess() throws Exception { JobInstance jobInstance = jobExecution.getJobInstance(); ExitStatus jobExitStatus = jobExecution.getExitStatus(); - assertThat(jobInstance.getJobName(), is("importUserJob")); - assertThat(jobExitStatus.getExitCode(), is("COMPLETED")); + assertEquals("importUserJob", jobInstance.getJobName()); + assertEquals("COMPLETED", jobExitStatus.getExitCode()); } } diff --git a/spring-batch-2/src/test/java/com/baeldung/batchscheduler/SpringBatchSchedulerIntegrationTest.java b/spring-batch-2/src/test/java/com/baeldung/batchscheduler/SpringBatchSchedulerIntegrationTest.java index 61e5a1dd74ef..297e8d989f2d 100644 --- a/spring-batch-2/src/test/java/com/baeldung/batchscheduler/SpringBatchSchedulerIntegrationTest.java +++ b/spring-batch-2/src/test/java/com/baeldung/batchscheduler/SpringBatchSchedulerIntegrationTest.java @@ -1,28 +1,20 @@ package com.baeldung.batchscheduler; -import com.baeldung.batchscheduler.SpringBatchScheduler; -import org.junit.Assert; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.batch.test.context.SpringBatchTest; +import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.PropertySource; import org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor; import org.springframework.test.annotation.DirtiesContext; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.junit4.SpringRunner; import static org.awaitility.Awaitility.await; import static java.util.concurrent.TimeUnit.*; +import static org.junit.jupiter.api.Assertions.assertEquals; -@SpringBatchTest @SpringBootTest @DirtiesContext @PropertySource("classpath:application.properties") -@RunWith(SpringRunner.class) public class SpringBatchSchedulerIntegrationTest { @Autowired @@ -31,37 +23,36 @@ public class SpringBatchSchedulerIntegrationTest { @Test public void stopJobsWhenSchedulerDisabled() { SpringBatchScheduler schedulerBean = context.getBean(SpringBatchScheduler.class); - await().untilAsserted(() -> Assert.assertEquals(2, schedulerBean.getBatchRunCounter() + await().untilAsserted(() -> assertEquals(2, schedulerBean.getBatchRunCounter() .get())); schedulerBean.stop(); await().atLeast(3, SECONDS); - Assert.assertEquals(2, schedulerBean.getBatchRunCounter() - .get()); + assertEquals(2, schedulerBean.getBatchRunCounter().get()); } @Test - public void stopJobSchedulerWhenSchedulerDestroyed() throws Exception { + public void stopJobSchedulerWhenSchedulerDestroyed() { ScheduledAnnotationBeanPostProcessor bean = context.getBean(ScheduledAnnotationBeanPostProcessor.class); SpringBatchScheduler schedulerBean = context.getBean(SpringBatchScheduler.class); - await().untilAsserted(() -> Assert.assertEquals(2, schedulerBean.getBatchRunCounter() + await().untilAsserted(() -> assertEquals(2, schedulerBean.getBatchRunCounter() .get())); bean.postProcessBeforeDestruction(schedulerBean, "SpringBatchScheduler"); await().atLeast(3, SECONDS); - Assert.assertEquals(2, schedulerBean.getBatchRunCounter() + assertEquals(2, schedulerBean.getBatchRunCounter() .get()); } @Test - public void stopJobSchedulerWhenFutureTasksCancelled() throws Exception { + public void stopJobSchedulerWhenFutureTasksCancelled() { SpringBatchScheduler schedulerBean = context.getBean(SpringBatchScheduler.class); - await().untilAsserted(() -> Assert.assertEquals(2, schedulerBean.getBatchRunCounter() + await().untilAsserted(() -> assertEquals(2, schedulerBean.getBatchRunCounter() .get())); schedulerBean.cancelFutureSchedulerTasks(); await().atLeast(3, SECONDS); - Assert.assertEquals(2, schedulerBean.getBatchRunCounter() + assertEquals(2, schedulerBean.getBatchRunCounter() .get()); } diff --git a/spring-batch/pom.xml b/spring-batch/pom.xml index e9d3afa37681..810ddcdcdd9b 100644 --- a/spring-batch/pom.xml +++ b/spring-batch/pom.xml @@ -11,9 +11,9 @@ com.baeldung - parent-boot-2 + parent-boot-3 0.0.1-SNAPSHOT - ../parent-boot-2 + ../parent-boot-3 @@ -22,25 +22,15 @@ jackson-datatype-jsr310 ${jackson-datatype.version} - - - javax.xml.bind - jaxb-api - ${jaxb.version} - + jakarta.xml.bind + jakarta.xml.bind-api + 4.0.0 org.glassfish.jaxb jaxb-runtime ${jaxb.version} - - - - - org.xerial - sqlite-jdbc - ${sqlite.version} org.springframework @@ -53,20 +43,9 @@ - - org.springframework - spring-jdbc - ${spring.version} - - - org.springframework.batch - spring-batch-core - ${spring.batch.version} - org.springframework.batch spring-batch-test - ${spring.batch.version} com.opencsv @@ -78,19 +57,29 @@ spring-boot-starter-batch - org.hsqldb - hsqldb - runtime + org.apache.httpcomponents + httpclient + ${http-client.version} + + + org.codehaus.jettison + jettison + ${jettison.version} + + + com.h2database + h2 - 5.3.0 - 4.3.0 - 3.15.1 - 4.1 - 2.3.1 - 2.12.3 + 6.0.6 + 5.7.1 + 4.0.2 + 2.14.2 + 4.5.14 + 1.5.3 + com.baeldung.batchtesting.SpringBatchApplication \ No newline at end of file diff --git a/spring-batch/repository.sqlite b/spring-batch/repository.sqlite index b6a954554c9659b0f486c8af45bd69b710e61a0f..ddf5d0c16f52839ec30a36ec4e23155f07ea04db 100644 GIT binary patch delta 3284 zcmeGeYiv_h_?~lnZ{NEe8;-586%lCN?Amo5FdpM>6zM42+y;sMa9+xF?d*#_#_IG}G- z&$-|0+>vv-k#oAkHM4}*IF6e|mVqph<8UzF(DVS|y2HpS{l=O3Q(Rf7?1)sbbeqoW zFN(W_M%{7Uef+7yeB0MpS9Zj71BUq3@Fed$^sz_Cg0?N}%GI-C3+j|)c4dDFg~qQ1)KL(kd^jh2H5elSXK zND>OaTFWrzY=!b;-$?mm6{3l}_cUpktLB;P8Q8#8ClfIQu1#up^JDv|1!U)y&ROCAL#ci zu?gJXt#JNmEv(ws4#we)NP>akcZISN{)>gl%wkJv=MoFJ9- zl3*OQ;n^H=Apw5B>?q&=+0)~8L}43)30ORl02F!<4qp}E&xh^seB>d#tO-63+F^BY zF1&EXg`0i1$X2{`Sy5scGC=p$O5}$Blc6Li{ObV+t^VF)uO+}E<}A(K|MJr#m-K( zVLuhycZZW{)tyx`Pr3VcB*Og!32axxxok4+RvDr?{~;J+0Zgt%l^m)v3W88)L0S{{M6;`$ zw=;s1+j*OUww0f>)8b+eAs-|ERSPYjQRwM=`ss|I-RP)v zr*jEsUo@VIspOC$C6@?C#vYfDcXy28?o2L~N|K0`c4$#kO*8vD$=I7N@wlueqmp%m zlX3TEMU8FAkrZxLvf+qZPNk>=;?GG@rr+#m`n&IF5Lcp!X?35MsB6X2g3KIZV}XnV zR!kR?RC3`sllKwy{7q!!5OG>~ibk2}PE{47--ze3@S>-S>+pTz#gbryT!CMVn^vHwn3Icnm`Crll? u2elj4fY^PQRu&Eu^sS|snx<5@a8?s-WL@2KN( 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 diff --git a/spring-batch/src/main/java/com/baeldung/batch/App.java b/spring-batch/src/main/java/com/baeldung/batch/App.java index c2db446965be..c5823590d893 100644 --- a/spring-batch/src/main/java/com/baeldung/batch/App.java +++ b/spring-batch/src/main/java/com/baeldung/batch/App.java @@ -18,20 +18,19 @@ public class App { public static void main(final String[] args) { // Spring Java config final AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(); - context.register(SpringConfig.class); + context.getEnvironment().addActiveProfile("spring"); context.register(SpringBatchConfig.class); context.register(SpringBatchRetryConfig.class); context.refresh(); // Spring xml config - // ApplicationContext context = new ClassPathXmlApplicationContext("spring-batch.xml"); + // ApplicationContext context = new ClassPathXmlApplicationContext("spring-batch-intro.xml"); runJob(context, "firstBatchJob"); runJob(context, "skippingBatchJob"); runJob(context, "skipPolicyBatchJob"); runJob(context, "retryBatchJob"); - } private static void runJob(AnnotationConfigApplicationContext context, String batchJobName) { diff --git a/spring-batch/src/main/java/com/baeldung/batch/SpringBatchConfig.java b/spring-batch/src/main/java/com/baeldung/batch/SpringBatchConfig.java index 5546df22fc6f..5d999c68e7f0 100644 --- a/spring-batch/src/main/java/com/baeldung/batch/SpringBatchConfig.java +++ b/spring-batch/src/main/java/com/baeldung/batch/SpringBatchConfig.java @@ -1,5 +1,7 @@ package com.baeldung.batch; +import javax.sql.DataSource; + import com.baeldung.batch.model.Transaction; import com.baeldung.batch.service.CustomItemProcessor; import com.baeldung.batch.service.CustomSkipPolicy; @@ -7,10 +9,15 @@ import com.baeldung.batch.service.NegativeAmountException; import com.baeldung.batch.service.RecordFieldSetMapper; import com.baeldung.batch.service.SkippingItemProcessor; + import org.springframework.batch.core.Job; import org.springframework.batch.core.Step; -import org.springframework.batch.core.configuration.annotation.JobBuilderFactory; -import org.springframework.batch.core.configuration.annotation.StepBuilderFactory; +import org.springframework.batch.core.job.builder.JobBuilder; +import org.springframework.batch.core.launch.JobLauncher; +import org.springframework.batch.core.launch.support.TaskExecutorJobLauncher; +import org.springframework.batch.core.repository.JobRepository; +import org.springframework.batch.core.repository.support.JobRepositoryFactoryBean; +import org.springframework.batch.core.step.builder.StepBuilder; import org.springframework.batch.item.ItemProcessor; import org.springframework.batch.item.ItemReader; import org.springframework.batch.item.ItemWriter; @@ -19,24 +26,23 @@ import org.springframework.batch.item.file.mapping.DefaultLineMapper; import org.springframework.batch.item.file.transform.DelimitedLineTokenizer; import org.springframework.batch.item.xml.StaxEventItemWriter; -import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.batch.support.transaction.ResourcelessTransactionManager; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Profile; import org.springframework.core.io.Resource; +import org.springframework.core.io.WritableResource; +import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder; +import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType; import org.springframework.oxm.Marshaller; import org.springframework.oxm.jaxb.Jaxb2Marshaller; +import org.springframework.transaction.PlatformTransactionManager; -import java.text.ParseException; - +@Configuration @Profile("spring") public class SpringBatchConfig { - @Autowired - private JobBuilderFactory jobBuilderFactory; - - @Autowired - private StepBuilderFactory stepBuilderFactory; @Value("input/record.csv") private Resource inputCsv; @@ -45,9 +51,9 @@ public class SpringBatchConfig { private Resource invalidInputCsv; @Value("file:xml/output.xml") - private Resource outputXml; + private WritableResource outputXml; - public ItemReader itemReader(Resource inputData) throws UnexpectedInputException, ParseException { + public ItemReader itemReader(Resource inputData) throws UnexpectedInputException { FlatFileItemReader reader = new FlatFileItemReader<>(); DelimitedLineTokenizer tokenizer = new DelimitedLineTokenizer(); String[] tokens = {"username", "userid", "transactiondate", "amount"}; @@ -88,10 +94,10 @@ public Marshaller marshaller() { } @Bean - protected Step step1(@Qualifier("itemProcessor") ItemProcessor processor, ItemWriter writer) throws ParseException { - return stepBuilderFactory - .get("step1") - . chunk(10) + protected Step step1(JobRepository jobRepository, PlatformTransactionManager transactionManager, @Qualifier("itemProcessor") ItemProcessor processor, ItemWriter writer) { + return new StepBuilder("step1", jobRepository) + . chunk(10, transactionManager) .reader(itemReader(inputCsv)) .processor(processor) .writer(writer) @@ -99,16 +105,15 @@ protected Step step1(@Qualifier("itemProcessor") ItemProcessor processor, - ItemWriter writer) throws ParseException { - return stepBuilderFactory - .get("skippingStep") - .chunk(10) + public Step skippingStep(JobRepository jobRepository, PlatformTransactionManager transactionManager, @Qualifier("skippingItemProcessor") ItemProcessor processor, ItemWriter writer) { + return new StepBuilder("skippingStep", jobRepository) + .chunk(10, transactionManager) .reader(itemReader(invalidInputCsv)) .processor(processor) .writer(writer) @@ -120,19 +125,18 @@ public Step skippingStep(@Qualifier("skippingItemProcessor") ItemProcessor processor, - ItemWriter writer) throws ParseException { - return stepBuilderFactory - .get("skipPolicyStep") - .chunk(10) + public Step skipPolicyStep(JobRepository jobRepository, PlatformTransactionManager transactionManager, @Qualifier("skippingItemProcessor") ItemProcessor processor, + ItemWriter writer) { + return new StepBuilder("skipPolicyStep", jobRepository) + .chunk(10, transactionManager) .reader(itemReader(invalidInputCsv)) .processor(processor) .writer(writer) @@ -142,11 +146,44 @@ public Step skipPolicyStep(@Qualifier("skippingItemProcessor") ItemProcessor itemReader(Resource inputData) throws ParseException { + public ItemReader itemReader(Resource inputData) { DelimitedLineTokenizer tokenizer = new DelimitedLineTokenizer(); tokenizer.setNames(tokens); DefaultLineMapper lineMapper = new DefaultLineMapper<>(); @@ -93,10 +86,11 @@ public Marshaller marshaller() { } @Bean - public Step retryStep(@Qualifier("retryItemProcessor") ItemProcessor processor, - ItemWriter writer) throws ParseException { - return stepBuilderFactory.get("retryStep") - .chunk(10) + public Step retryStep( + JobRepository jobRepository, PlatformTransactionManager transactionManager, @Qualifier("retryItemProcessor") ItemProcessor processor, + ItemWriter writer) { + return new StepBuilder("retryStep", jobRepository) + .chunk(10, transactionManager) .reader(itemReader(inputCsv)) .processor(processor) .writer(writer) @@ -108,9 +102,8 @@ public Step retryStep(@Qualifier("retryItemProcessor") ItemProcessor partition(int gridSize) { - Map map = new HashMap(gridSize); + Map map = new HashMap<>(gridSize); int i = 0, k = 1; for (Resource resource : resources) { ExecutionContext context = new ExecutionContext(); diff --git a/spring-batch/src/main/java/com/baeldung/batch/partitioner/SpringbatchPartitionConfig.java b/spring-batch/src/main/java/com/baeldung/batch/partitioner/SpringBatchPartitionConfig.java similarity index 77% rename from spring-batch/src/main/java/com/baeldung/batch/partitioner/SpringbatchPartitionConfig.java rename to spring-batch/src/main/java/com/baeldung/batch/partitioner/SpringBatchPartitionConfig.java index b08c95af53bc..ceacb36e4dcd 100644 --- a/spring-batch/src/main/java/com/baeldung/batch/partitioner/SpringbatchPartitionConfig.java +++ b/spring-batch/src/main/java/com/baeldung/batch/partitioner/SpringBatchPartitionConfig.java @@ -5,13 +5,13 @@ import org.springframework.batch.core.Job; import org.springframework.batch.core.Step; import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing; -import org.springframework.batch.core.configuration.annotation.JobBuilderFactory; -import org.springframework.batch.core.configuration.annotation.StepBuilderFactory; import org.springframework.batch.core.configuration.annotation.StepScope; +import org.springframework.batch.core.job.builder.JobBuilder; import org.springframework.batch.core.launch.JobLauncher; -import org.springframework.batch.core.launch.support.SimpleJobLauncher; +import org.springframework.batch.core.launch.support.TaskExecutorJobLauncher; import org.springframework.batch.core.repository.JobRepository; import org.springframework.batch.core.repository.support.JobRepositoryFactoryBean; +import org.springframework.batch.core.step.builder.StepBuilder; import org.springframework.batch.item.UnexpectedInputException; import org.springframework.batch.item.file.FlatFileItemReader; import org.springframework.batch.item.file.mapping.DefaultLineMapper; @@ -36,42 +36,35 @@ import javax.sql.DataSource; import java.io.IOException; -import java.net.MalformedURLException; import java.text.ParseException; @Configuration @EnableBatchProcessing -public class SpringbatchPartitionConfig { +public class SpringBatchPartitionConfig { @Autowired - ResourcePatternResolver resoursePatternResolver; - - @Autowired - private JobBuilderFactory jobs; - - @Autowired - private StepBuilderFactory steps; + private ResourcePatternResolver resourcePatternResolver; @Bean(name = "partitionerJob") - public Job partitionerJob() throws UnexpectedInputException, MalformedURLException, ParseException { - return jobs.get("partitionerJob") - .start(partitionStep()) + public Job partitionerJob(JobRepository jobRepository, PlatformTransactionManager transactionManager) throws UnexpectedInputException, ParseException { + return new JobBuilder("partitionerJob", jobRepository) + .start(partitionStep(jobRepository, transactionManager)) .build(); } @Bean - public Step partitionStep() throws UnexpectedInputException, MalformedURLException, ParseException { - return steps.get("partitionStep") + public Step partitionStep(JobRepository jobRepository, PlatformTransactionManager transactionManager) throws UnexpectedInputException, ParseException { + return new StepBuilder("partitionStep", jobRepository) .partitioner("slaveStep", partitioner()) - .step(slaveStep()) + .step(slaveStep(jobRepository, transactionManager)) .taskExecutor(taskExecutor()) .build(); } @Bean - public Step slaveStep() throws UnexpectedInputException, MalformedURLException, ParseException { - return steps.get("slaveStep") - .chunk(1) + public Step slaveStep(JobRepository jobRepository, PlatformTransactionManager transactionManager) throws UnexpectedInputException, ParseException { + return new StepBuilder("slaveStep", jobRepository) + .chunk(1, transactionManager) .reader(itemReader(null)) .writer(itemWriter(marshaller(), null)) .build(); @@ -82,7 +75,7 @@ public CustomMultiResourcePartitioner partitioner() { CustomMultiResourcePartitioner partitioner = new CustomMultiResourcePartitioner(); Resource[] resources; try { - resources = resoursePatternResolver.getResources("file:src/main/resources/input/partitioner/*.csv"); + resources = resourcePatternResolver.getResources("file:src/main/resources/input/partitioner/*.csv"); } catch (IOException e) { throw new RuntimeException("I/O problems when resolving the input file pattern.", e); } @@ -108,7 +101,7 @@ public FlatFileItemReader itemReader(@Value("#{stepExecutionContext @Bean(destroyMethod = "") @StepScope - public StaxEventItemWriter itemWriter(Marshaller marshaller, @Value("#{stepExecutionContext[opFileName]}") String filename) throws MalformedURLException { + public StaxEventItemWriter itemWriter(Marshaller marshaller, @Value("#{stepExecutionContext[opFileName]}") String filename) { StaxEventItemWriter itemWriter = new StaxEventItemWriter<>(); itemWriter.setMarshaller(marshaller); itemWriter.setRootTagName("transactionRecord"); @@ -133,7 +126,8 @@ public TaskExecutor taskExecutor() { return taskExecutor; } - private JobRepository getJobRepository() throws Exception { + @Bean(name = "jobRepository") + public JobRepository getJobRepository() throws Exception { JobRepositoryFactoryBean factory = new JobRepositoryFactoryBean(); factory.setDataSource(dataSource()); factory.setTransactionManager(getTransactionManager()); @@ -143,20 +137,23 @@ private JobRepository getJobRepository() throws Exception { return factory.getObject(); } - private DataSource dataSource() { + @Bean(name = "dataSource") + public DataSource dataSource() { EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder(); - return builder.setType(EmbeddedDatabaseType.HSQL) + return builder.setType(EmbeddedDatabaseType.H2) .addScript("classpath:org/springframework/batch/core/schema-drop-h2.sql") .addScript("classpath:org/springframework/batch/core/schema-h2.sql") .build(); } - private PlatformTransactionManager getTransactionManager() { + @Bean(name = "transactionManager") + public PlatformTransactionManager getTransactionManager() { return new ResourcelessTransactionManager(); } + @Bean(name = "jobLauncher") public JobLauncher getJobLauncher() throws Exception { - SimpleJobLauncher jobLauncher = new SimpleJobLauncher(); + TaskExecutorJobLauncher jobLauncher = new TaskExecutorJobLauncher(); // SimpleJobLauncher's methods Throws Generic Exception, // it would have been better to have a specific one jobLauncher.setJobRepository(getJobRepository()); diff --git a/spring-batch/src/main/java/com/baeldung/batch/partitioner/SpringbatchPartitionerApp.java b/spring-batch/src/main/java/com/baeldung/batch/partitioner/SpringBatchPartitionerApp.java similarity index 89% rename from spring-batch/src/main/java/com/baeldung/batch/partitioner/SpringbatchPartitionerApp.java rename to spring-batch/src/main/java/com/baeldung/batch/partitioner/SpringBatchPartitionerApp.java index e755e21ca9c9..a1661e750e46 100644 --- a/spring-batch/src/main/java/com/baeldung/batch/partitioner/SpringbatchPartitionerApp.java +++ b/spring-batch/src/main/java/com/baeldung/batch/partitioner/SpringBatchPartitionerApp.java @@ -8,14 +8,14 @@ import org.springframework.batch.core.launch.JobLauncher; import org.springframework.context.annotation.AnnotationConfigApplicationContext; -public class SpringbatchPartitionerApp { +public class SpringBatchPartitionerApp { - private static final Logger LOGGER = LoggerFactory.getLogger(SpringbatchPartitionerApp.class); + private static final Logger LOGGER = LoggerFactory.getLogger(SpringBatchPartitionerApp.class); public static void main(final String[] args) { // Spring Java config final AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(); - context.register(SpringbatchPartitionConfig.class); + context.register(SpringBatchPartitionConfig.class); context.refresh(); final JobLauncher jobLauncher = (JobLauncher) context.getBean("jobLauncher"); diff --git a/spring-batch/src/main/java/com/baeldung/batch/service/CustomSkipPolicy.java b/spring-batch/src/main/java/com/baeldung/batch/service/CustomSkipPolicy.java index 25401de02203..af6fe20529f1 100644 --- a/spring-batch/src/main/java/com/baeldung/batch/service/CustomSkipPolicy.java +++ b/spring-batch/src/main/java/com/baeldung/batch/service/CustomSkipPolicy.java @@ -9,19 +9,13 @@ public class CustomSkipPolicy implements SkipPolicy { private static final int INVALID_TX_AMOUNT_LIMIT = -1000; @Override - public boolean shouldSkip(Throwable throwable, int skipCount) throws SkipLimitExceededException { - + public boolean shouldSkip(Throwable throwable, long skipCount) throws SkipLimitExceededException { if (throwable instanceof MissingUsernameException && skipCount < MAX_SKIP_COUNT) { return true; } - if (throwable instanceof NegativeAmountException && skipCount < MAX_SKIP_COUNT ) { - NegativeAmountException ex = (NegativeAmountException) throwable; - if(ex.getAmount() < INVALID_TX_AMOUNT_LIMIT){ - return false; - } else{ - return true; - } + if (throwable instanceof NegativeAmountException ex && skipCount < MAX_SKIP_COUNT ) { + return ex.getAmount() >= INVALID_TX_AMOUNT_LIMIT; } return false; diff --git a/spring-batch/src/main/java/com/baeldung/batch/service/RecordFieldSetMapper.java b/spring-batch/src/main/java/com/baeldung/batch/service/RecordFieldSetMapper.java index 09478e9a3099..97c77d9e6ac6 100644 --- a/spring-batch/src/main/java/com/baeldung/batch/service/RecordFieldSetMapper.java +++ b/spring-batch/src/main/java/com/baeldung/batch/service/RecordFieldSetMapper.java @@ -10,7 +10,7 @@ public class RecordFieldSetMapper implements FieldSetMapper { - public Transaction mapFieldSet(FieldSet fieldSet) throws BindException { + public Transaction mapFieldSet(FieldSet fieldSet) { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("d/M/yyy"); diff --git a/spring-batch/src/main/java/com/baeldung/batch/service/RetryItemProcessor.java b/spring-batch/src/main/java/com/baeldung/batch/service/RetryItemProcessor.java index c380e2c0ab6b..aa49680b2ade 100644 --- a/spring-batch/src/main/java/com/baeldung/batch/service/RetryItemProcessor.java +++ b/spring-batch/src/main/java/com/baeldung/batch/service/RetryItemProcessor.java @@ -5,15 +5,13 @@ import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.util.EntityUtils; import com.baeldung.batch.model.Transaction; -import org.codehaus.jettison.json.JSONException; + import org.codehaus.jettison.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.batch.item.ItemProcessor; import org.springframework.beans.factory.annotation.Autowired; -import java.io.IOException; - public class RetryItemProcessor implements ItemProcessor { private static final Logger LOGGER = LoggerFactory.getLogger(RetryItemProcessor.class); @@ -22,7 +20,7 @@ public class RetryItemProcessor implements ItemProcessor { private static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss"; diff --git a/spring-batch/src/main/java/com/baeldung/batch/springboot/SpringBootBatchConfig.java b/spring-batch/src/main/java/com/baeldung/batch/springboot/SpringBootBatchConfig.java index 57531ebc39ea..6c463de5dcea 100644 --- a/spring-batch/src/main/java/com/baeldung/batch/springboot/SpringBootBatchConfig.java +++ b/spring-batch/src/main/java/com/baeldung/batch/springboot/SpringBootBatchConfig.java @@ -5,8 +5,9 @@ import org.springframework.batch.core.Job; import org.springframework.batch.core.Step; import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing; -import org.springframework.batch.core.configuration.annotation.JobBuilderFactory; -import org.springframework.batch.core.configuration.annotation.StepBuilderFactory; +import org.springframework.batch.core.job.builder.JobBuilder; +import org.springframework.batch.core.repository.JobRepository; +import org.springframework.batch.core.step.builder.StepBuilder; import org.springframework.batch.item.ItemProcessor; import org.springframework.batch.item.ItemReader; import org.springframework.batch.item.ItemWriter; @@ -15,27 +16,21 @@ import org.springframework.batch.item.file.mapping.DefaultLineMapper; import org.springframework.batch.item.file.transform.DelimitedLineTokenizer; import org.springframework.batch.item.xml.StaxEventItemWriter; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Profile; import org.springframework.core.io.Resource; +import org.springframework.core.io.WritableResource; import org.springframework.oxm.Marshaller; import org.springframework.oxm.jaxb.Jaxb2Marshaller; - -import java.text.ParseException; +import org.springframework.transaction.PlatformTransactionManager; @Configuration @EnableBatchProcessing @Profile("spring-boot") public class SpringBootBatchConfig { - @Autowired - private JobBuilderFactory jobBuilderFactory; - - @Autowired - private StepBuilderFactory stepBuilderFactory; @Value("input/record.csv") private Resource inputCsv; @@ -44,9 +39,9 @@ public class SpringBootBatchConfig { private Resource invalidInputCsv; @Value("file:xml/output.xml") - private Resource outputXml; + private WritableResource outputXml; - public ItemReader itemReader(Resource inputData) throws UnexpectedInputException, ParseException { + public ItemReader itemReader(Resource inputData) throws UnexpectedInputException { FlatFileItemReader reader = new FlatFileItemReader<>(); DelimitedLineTokenizer tokenizer = new DelimitedLineTokenizer(); String[] tokens = {"username", "userid", "transactiondate", "amount"}; @@ -86,11 +81,10 @@ public Marshaller marshaller3() { return marshaller3; } - @Bean - protected Step step1(@Qualifier("itemProcessor") ItemProcessor processor, ItemWriter itemWriter3) throws ParseException { - return stepBuilderFactory - .get("step1") - . chunk(10) + @Bean(name = "step1") + protected Step step1(JobRepository jobRepository, PlatformTransactionManager transactionManager, @Qualifier("itemProcessor") ItemProcessor processor, ItemWriter itemWriter3) { + return new StepBuilder("step1", jobRepository) + . chunk(10, transactionManager) .reader(itemReader(inputCsv)) .processor(processor) .writer(itemWriter3) @@ -98,16 +92,15 @@ protected Step step1(@Qualifier("itemProcessor") ItemProcessor processor, - ItemWriter itemWriter3) throws ParseException { - return stepBuilderFactory - .get("skippingStep") - .chunk(10) + public Step skippingStep(JobRepository jobRepository, PlatformTransactionManager transactionManager, @Qualifier("skippingItemProcessor") ItemProcessor processor, + ItemWriter itemWriter3) { + return new StepBuilder("skippingStep", jobRepository) + .chunk(10, transactionManager) .reader(itemReader(invalidInputCsv)) .processor(processor) .writer(itemWriter3) @@ -119,19 +112,17 @@ public Step skippingStep(@Qualifier("skippingItemProcessor") ItemProcessor processor, - ItemWriter itemWriter3) throws ParseException { - return stepBuilderFactory - .get("skipPolicyStep") - .chunk(10) + @Bean(name = "skipPolicyStep") + public Step skipPolicyStep(JobRepository jobRepository, PlatformTransactionManager transactionManager, @Qualifier("skippingItemProcessor") ItemProcessor processor, + ItemWriter itemWriter3) { + return new StepBuilder("skipPolicyStep", jobRepository) + .chunk(10, transactionManager) .reader(itemReader(invalidInputCsv)) .processor(processor) .writer(itemWriter3) @@ -141,11 +132,9 @@ public Step skipPolicyStep(@Qualifier("skippingItemProcessor") ItemProcessor csvItemReader(@Value("#{jobParameters['file.input']}") String input) { @@ -65,7 +55,7 @@ public FlatFileItemReader csvItemReader(@Value("#{jobParameters['fil @Bean @StepScope - public JsonFileItemWriter jsonItemWriter(@Value("#{jobParameters['file.output']}") String output) throws IOException { + public JsonFileItemWriter jsonItemWriter(@Value("#{jobParameters['file.output']}") String output) { JsonFileItemWriterBuilder builder = new JsonFileItemWriterBuilder<>(); JacksonJsonObjectMarshaller marshaller = new JacksonJsonObjectMarshaller<>(); LOGGER.info("Configuring writer to output {}", output); @@ -81,7 +71,7 @@ public JsonFileItemWriter jsonItemWriter(@Value("#{jobParameters['file.out @Bean @StepScope public ListItemWriter listItemWriter() { - return new ListItemWriter(); + return new ListItemWriter<>(); } @Bean @@ -96,12 +86,11 @@ public BookDetailsItemProcessor bookDetailsItemProcessor() { return new BookDetailsItemProcessor(); } - @Bean - public Step step1(ItemReader csvItemReader, ItemWriter jsonItemWriter) throws IOException { + @Bean(name = "step1") + public Step step1(JobRepository jobRepository, PlatformTransactionManager transactionManager, ItemReader csvItemReader, ItemWriter jsonItemWriter) { // @formatter:off - return stepBuilderFactory - .get("step1") - . chunk(3) + return new StepBuilder("step1", jobRepository) + . chunk(3, transactionManager) .reader(csvItemReader) .processor(bookItemProcessor()) .writer(jsonItemWriter) @@ -109,12 +98,11 @@ public Step step1(ItemReader csvItemReader, ItemWriter jsonIte // @formatter:on } - @Bean - public Step step2(ItemReader csvItemReader, ItemWriter listItemWriter) { + @Bean(name = "step2") + public Step step2(JobRepository jobRepository, PlatformTransactionManager transactionManager, ItemReader csvItemReader, ItemWriter listItemWriter) { // @formatter:off - return stepBuilderFactory - .get("step2") - . chunk(3) + return new StepBuilder("step2", jobRepository) + . chunk(3, transactionManager) .reader(csvItemReader) .processor(bookDetailsItemProcessor()) .writer(listItemWriter) @@ -123,15 +111,13 @@ public Step step2(ItemReader csvItemReader, ItemWriter } @Bean(name = "transformBooksRecords") - public Job transformBookRecords(Step step1, Step step2) throws IOException { + public Job transformBookRecords(JobRepository jobRepository, Step step1, Step step2) { // @formatter:off - return jobBuilderFactory - .get("transformBooksRecords") + return new JobBuilder("transformBooksRecords", jobRepository) .flow(step1) .next(step2) .end() .build(); // @formatter:on } - } diff --git a/spring-batch/src/main/java/com/baeldung/batchtesting/service/BookDetailsItemProcessor.java b/spring-batch/src/main/java/com/baeldung/batchtesting/service/BookDetailsItemProcessor.java index 514a3831087e..4e4d1e90755f 100644 --- a/spring-batch/src/main/java/com/baeldung/batchtesting/service/BookDetailsItemProcessor.java +++ b/spring-batch/src/main/java/com/baeldung/batchtesting/service/BookDetailsItemProcessor.java @@ -11,7 +11,7 @@ public class BookDetailsItemProcessor implements ItemProcessor { private static Logger LOGGER = LoggerFactory.getLogger(BookItemProcessor.class); @Override - public Book process(BookRecord item) throws Exception { + public Book process(BookRecord item) { Book book = new Book(); book.setAuthor(item.getBookAuthor()); book.setName(item.getBookName()); diff --git a/spring-batch/src/main/java/com/baeldung/batchtesting/service/BookRecordFieldSetMapper.java b/spring-batch/src/main/java/com/baeldung/batchtesting/service/BookRecordFieldSetMapper.java index d9e8ee115813..e4760da20f07 100644 --- a/spring-batch/src/main/java/com/baeldung/batchtesting/service/BookRecordFieldSetMapper.java +++ b/spring-batch/src/main/java/com/baeldung/batchtesting/service/BookRecordFieldSetMapper.java @@ -9,7 +9,7 @@ public class BookRecordFieldSetMapper implements FieldSetMapper { @Override - public BookRecord mapFieldSet(FieldSet fieldSet) throws BindException { + public BookRecord mapFieldSet(FieldSet fieldSet) { BookRecord bookRecord = new BookRecord(); bookRecord.setBookName(fieldSet.readString("bookname")); bookRecord.setBookAuthor(fieldSet.readString("bookauthor")); diff --git a/spring-batch/src/main/java/com/baeldung/taskletsvschunks/chunks/LineReader.java b/spring-batch/src/main/java/com/baeldung/taskletsvschunks/chunks/LineReader.java index 6ffa730c19fe..d8ba2c972830 100644 --- a/spring-batch/src/main/java/com/baeldung/taskletsvschunks/chunks/LineReader.java +++ b/spring-batch/src/main/java/com/baeldung/taskletsvschunks/chunks/LineReader.java @@ -21,9 +21,9 @@ public void beforeStep(StepExecution stepExecution) { } @Override - public Line read() throws Exception { + public Line read() { Line line = fu.readLine(); - if (line != null) logger.debug("Read line: " + line.toString()); + if (line != null) logger.debug("Read line: " + line); return line; } diff --git a/spring-batch/src/main/java/com/baeldung/taskletsvschunks/chunks/LinesWriter.java b/spring-batch/src/main/java/com/baeldung/taskletsvschunks/chunks/LinesWriter.java index 9f292b24b963..bcf648820cb7 100644 --- a/spring-batch/src/main/java/com/baeldung/taskletsvschunks/chunks/LinesWriter.java +++ b/spring-batch/src/main/java/com/baeldung/taskletsvschunks/chunks/LinesWriter.java @@ -7,10 +7,9 @@ import org.springframework.batch.core.ExitStatus; import org.springframework.batch.core.StepExecution; import org.springframework.batch.core.StepExecutionListener; +import org.springframework.batch.item.Chunk; import org.springframework.batch.item.ItemWriter; -import java.util.List; - public class LinesWriter implements ItemWriter, StepExecutionListener { private final Logger logger = LoggerFactory.getLogger(LinesWriter.class); @@ -30,7 +29,7 @@ public ExitStatus afterStep(StepExecution stepExecution) { } @Override - public void write(List lines) throws Exception { + public void write(Chunk lines) { for (Line line : lines) { fu.writeLine(line); logger.debug("Wrote line " + line.toString()); diff --git a/spring-batch/src/main/java/com/baeldung/taskletsvschunks/config/ChunksConfig.java b/spring-batch/src/main/java/com/baeldung/taskletsvschunks/config/ChunksConfig.java index c8b05848f997..16c6b1191f24 100644 --- a/spring-batch/src/main/java/com/baeldung/taskletsvschunks/config/ChunksConfig.java +++ b/spring-batch/src/main/java/com/baeldung/taskletsvschunks/config/ChunksConfig.java @@ -6,67 +6,19 @@ import com.baeldung.taskletsvschunks.model.Line; import org.springframework.batch.core.Job; import org.springframework.batch.core.Step; -import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing; -import org.springframework.batch.core.configuration.annotation.JobBuilderFactory; -import org.springframework.batch.core.configuration.annotation.StepBuilderFactory; -import org.springframework.batch.core.launch.JobLauncher; -import org.springframework.batch.core.launch.support.SimpleJobLauncher; +import org.springframework.batch.core.job.builder.JobBuilder; import org.springframework.batch.core.repository.JobRepository; -import org.springframework.batch.core.repository.support.JobRepositoryFactoryBean; +import org.springframework.batch.core.step.builder.StepBuilder; import org.springframework.batch.item.ItemProcessor; import org.springframework.batch.item.ItemReader; import org.springframework.batch.item.ItemWriter; -import org.springframework.batch.support.transaction.ResourcelessTransactionManager; -import org.springframework.batch.test.JobLauncherTestUtils; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.jdbc.datasource.DriverManagerDataSource; import org.springframework.transaction.PlatformTransactionManager; -import javax.sql.DataSource; - @Configuration -@EnableBatchProcessing public class ChunksConfig { - @Autowired private JobBuilderFactory jobs; - - @Autowired private StepBuilderFactory steps; - - @Bean - public JobLauncherTestUtils jobLauncherTestUtils() { - return new JobLauncherTestUtils(); - } - - @Bean - public JobRepository jobRepository() throws Exception { - JobRepositoryFactoryBean factory = new JobRepositoryFactoryBean(); - factory.setDataSource(dataSource()); - factory.setTransactionManager(transactionManager()); - return factory.getObject(); - } - - @Bean - public DataSource dataSource() { - DriverManagerDataSource dataSource = new DriverManagerDataSource(); - dataSource.setDriverClassName("org.sqlite.JDBC"); - dataSource.setUrl("jdbc:sqlite:repository.sqlite"); - return dataSource; - } - - @Bean - public PlatformTransactionManager transactionManager() { - return new ResourcelessTransactionManager(); - } - - @Bean - public JobLauncher jobLauncher() throws Exception { - SimpleJobLauncher jobLauncher = new SimpleJobLauncher(); - jobLauncher.setJobRepository(jobRepository()); - return jobLauncher; - } - @Bean public ItemReader itemReader() { return new LineReader(); @@ -82,20 +34,19 @@ public ItemWriter itemWriter() { return new LinesWriter(); } - @Bean - protected Step processLines(ItemReader reader, ItemProcessor processor, ItemWriter writer) { - return steps.get("processLines"). chunk(2) + @Bean(name = "processLines") + protected Step processLines(JobRepository jobRepository, PlatformTransactionManager transactionManager, ItemReader reader, ItemProcessor processor, ItemWriter writer) { + return new StepBuilder("processLines", jobRepository). chunk(2, transactionManager) .reader(reader) .processor(processor) .writer(writer) .build(); } - @Bean - public Job job() { - return jobs - .get("chunksJob") - .start(processLines(itemReader(), itemProcessor(), itemWriter())) + @Bean(name = "chunksJob") + public Job job(JobRepository jobRepository, PlatformTransactionManager transactionManager) { + return new JobBuilder("chunksJob", jobRepository) + .start(processLines(jobRepository, transactionManager, itemReader(), itemProcessor(), itemWriter())) .build(); } diff --git a/spring-batch/src/main/java/com/baeldung/taskletsvschunks/config/TaskletsConfig.java b/spring-batch/src/main/java/com/baeldung/taskletsvschunks/config/TaskletsConfig.java index 5f2f49928cc3..ab9d506229ba 100644 --- a/spring-batch/src/main/java/com/baeldung/taskletsvschunks/config/TaskletsConfig.java +++ b/spring-batch/src/main/java/com/baeldung/taskletsvschunks/config/TaskletsConfig.java @@ -5,64 +5,16 @@ import com.baeldung.taskletsvschunks.tasklets.LinesWriter; import org.springframework.batch.core.Job; import org.springframework.batch.core.Step; -import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing; -import org.springframework.batch.core.configuration.annotation.JobBuilderFactory; -import org.springframework.batch.core.configuration.annotation.StepBuilderFactory; -import org.springframework.batch.core.launch.JobLauncher; -import org.springframework.batch.core.launch.support.SimpleJobLauncher; +import org.springframework.batch.core.job.builder.JobBuilder; import org.springframework.batch.core.repository.JobRepository; -import org.springframework.batch.core.repository.support.JobRepositoryFactoryBean; -import org.springframework.batch.support.transaction.ResourcelessTransactionManager; -import org.springframework.batch.test.JobLauncherTestUtils; -import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.batch.core.step.builder.StepBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.jdbc.datasource.DriverManagerDataSource; import org.springframework.transaction.PlatformTransactionManager; -import javax.sql.DataSource; - @Configuration -@EnableBatchProcessing public class TaskletsConfig { - @Autowired private JobBuilderFactory jobs; - - @Autowired private StepBuilderFactory steps; - - @Bean - public JobLauncherTestUtils jobLauncherTestUtils() { - return new JobLauncherTestUtils(); - } - - @Bean - public JobRepository jobRepository() throws Exception { - JobRepositoryFactoryBean factory = new JobRepositoryFactoryBean(); - factory.setDataSource(dataSource()); - factory.setTransactionManager(transactionManager()); - return factory.getObject(); - } - - @Bean - public DataSource dataSource() { - DriverManagerDataSource dataSource = new DriverManagerDataSource(); - dataSource.setDriverClassName("org.sqlite.JDBC"); - dataSource.setUrl("jdbc:sqlite:repository.sqlite"); - return dataSource; - } - - @Bean - public PlatformTransactionManager transactionManager() { - return new ResourcelessTransactionManager(); - } - - @Bean - public JobLauncher jobLauncher() throws Exception { - SimpleJobLauncher jobLauncher = new SimpleJobLauncher(); - jobLauncher.setJobRepository(jobRepository()); - return jobLauncher; - } - @Bean public LinesReader linesReader() { return new LinesReader(); @@ -79,36 +31,32 @@ public LinesWriter linesWriter() { } @Bean - protected Step readLines() { - return steps - .get("readLines") - .tasklet(linesReader()) + protected Step readLines(JobRepository jobRepository, PlatformTransactionManager transactionManager) { + return new StepBuilder("readLines", jobRepository) + .tasklet(linesReader(), transactionManager) .build(); } @Bean - protected Step processLines() { - return steps - .get("processLines") - .tasklet(linesProcessor()) + protected Step processLines(JobRepository jobRepository, PlatformTransactionManager transactionManager) { + return new StepBuilder("processLines", jobRepository) + .tasklet(linesProcessor(), transactionManager) .build(); } @Bean - protected Step writeLines() { - return steps - .get("writeLines") - .tasklet(linesWriter()) + protected Step writeLines(JobRepository jobRepository, PlatformTransactionManager transactionManager) { + return new StepBuilder("writeLines", jobRepository) + .tasklet(linesWriter(), transactionManager) .build(); } @Bean - public Job job() { - return jobs - .get("taskletsJob") - .start(readLines()) - .next(processLines()) - .next(writeLines()) + public Job job(JobRepository jobRepository, PlatformTransactionManager transactionManager) { + return new JobBuilder("taskletsJob", jobRepository) + .start(readLines(jobRepository, transactionManager)) + .next(processLines(jobRepository, transactionManager)) + .next(writeLines(jobRepository, transactionManager)) .build(); } diff --git a/spring-batch/src/main/java/com/baeldung/taskletsvschunks/tasklets/LinesReader.java b/spring-batch/src/main/java/com/baeldung/taskletsvschunks/tasklets/LinesReader.java index b1f58be4a4be..70f1a1b05d69 100644 --- a/spring-batch/src/main/java/com/baeldung/taskletsvschunks/tasklets/LinesReader.java +++ b/spring-batch/src/main/java/com/baeldung/taskletsvschunks/tasklets/LinesReader.java @@ -24,7 +24,7 @@ public class LinesReader implements Tasklet, StepExecutionListener { @Override public void beforeStep(StepExecution stepExecution) { - lines = new ArrayList(); + lines = new ArrayList<>(); fu = new FileUtils("taskletsvschunks/input/tasklets-vs-chunks.csv"); logger.debug("Lines Reader initialized."); } diff --git a/spring-batch/src/main/java/org/baeldung/conditionalflow/ConditionalFlowApplication.java b/spring-batch/src/main/java/org/baeldung/conditionalflow/ConditionalFlowApplication.java index c977d6ecabf3..8a8f62ae3127 100644 --- a/spring-batch/src/main/java/org/baeldung/conditionalflow/ConditionalFlowApplication.java +++ b/spring-batch/src/main/java/org/baeldung/conditionalflow/ConditionalFlowApplication.java @@ -15,7 +15,7 @@ public static void main(String[] args) { } @Override - public void run(String... args) throws Exception { + public void run(String... args) { logger.info("Running conditional flow application..."); } } diff --git a/spring-batch/src/main/java/org/baeldung/conditionalflow/config/NumberInfoConfig.java b/spring-batch/src/main/java/org/baeldung/conditionalflow/config/NumberInfoConfig.java index 906a6e1d28a5..4954d9ffcdf2 100644 --- a/spring-batch/src/main/java/org/baeldung/conditionalflow/config/NumberInfoConfig.java +++ b/spring-batch/src/main/java/org/baeldung/conditionalflow/config/NumberInfoConfig.java @@ -6,39 +6,49 @@ import org.springframework.batch.core.Job; import org.springframework.batch.core.Step; import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing; -import org.springframework.batch.core.configuration.annotation.JobBuilderFactory; -import org.springframework.batch.core.configuration.annotation.StepBuilderFactory; +import org.springframework.batch.core.job.builder.JobBuilder; +import org.springframework.batch.core.launch.JobLauncher; +import org.springframework.batch.core.launch.support.TaskExecutorJobLauncher; +import org.springframework.batch.core.repository.JobRepository; +import org.springframework.batch.core.repository.support.JobRepositoryFactoryBean; +import org.springframework.batch.core.step.builder.StepBuilder; +import org.springframework.batch.support.transaction.ResourcelessTransactionManager; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; +import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder; +import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType; +import org.springframework.transaction.PlatformTransactionManager; import static org.baeldung.conditionalflow.NumberInfoDecider.NOTIFY; +import javax.sql.DataSource; + @Configuration @EnableBatchProcessing public class NumberInfoConfig { @Bean @Qualifier("NotificationStep") - public Step notificationStep(StepBuilderFactory sbf) { - return sbf.get("Notify step") - .tasklet(new NotifierTasklet()) + public Step notificationStep(JobRepository jobRepository, PlatformTransactionManager transactionManager) { + return new StepBuilder("Notify step", jobRepository) + .tasklet(new NotifierTasklet(), transactionManager) .build(); } - public Step numberGeneratorStep(StepBuilderFactory sbf, int[] values, String prepend) { - return sbf.get("Number generator") - . chunk(1) + public Step numberGeneratorStep(JobRepository jobRepositories, PlatformTransactionManager transactionManager, int[] values, String prepend) { + return new StepBuilder("Number generator", jobRepositories) + . chunk(1, transactionManager) .reader(new NumberInfoGenerator(values)) .processor(new NumberInfoClassifier()) .writer(new PrependingStdoutWriter<>(prepend)) .build(); } - public Step numberGeneratorStepDecider(StepBuilderFactory sbf, int[] values, String prepend) { - return sbf.get("Number generator decider") - . chunk(1) + public Step numberGeneratorStepDecider(JobRepository jobRepositories, PlatformTransactionManager transactionManager, int[] values, String prepend) { + return new StepBuilder("Number generator decider", jobRepositories) + . chunk(1, transactionManager) .reader(new NumberInfoGenerator(values)) .processor(new NumberInfoClassifierWithDecider()) .writer(new PrependingStdoutWriter<>(prepend)) @@ -47,10 +57,10 @@ public Step numberGeneratorStepDecider(StepBuilderFactory sbf, int[] values, Str @Bean @Qualifier("first_job") - public Job numberGeneratorNonNotifierJob(JobBuilderFactory jobBuilderFactory, StepBuilderFactory stepBuilderFactory, @Qualifier("NotificationStep") Step notificationStep) { + public Job numberGeneratorNonNotifierJob(JobRepository jobRepository, PlatformTransactionManager transactionManager, @Qualifier("NotificationStep") Step notificationStep) { int[] nonNotifierData = { -1, -2, -3 }; - Step step = numberGeneratorStep(stepBuilderFactory, nonNotifierData, "First Dataset Processor"); - return jobBuilderFactory.get("Number generator - first dataset") + Step step = numberGeneratorStep(jobRepository, transactionManager, nonNotifierData, "First Dataset Processor"); + return new JobBuilder("Number generator - first dataset", jobRepository) .start(step) .on(NOTIFY) .to(notificationStep) @@ -63,10 +73,10 @@ public Job numberGeneratorNonNotifierJob(JobBuilderFactory jobBuilderFactory, St @Bean @Qualifier("second_job") - public Job numberGeneratorNotifierJob(JobBuilderFactory jobBuilderFactory, StepBuilderFactory stepBuilderFactory, @Qualifier("NotificationStep") Step notificationStep) { + public Job numberGeneratorNotifierJob(JobRepository jobRepository, PlatformTransactionManager transactionManager, @Qualifier("NotificationStep") Step notificationStep) { int[] billableData = { 11, -2, -3 }; - Step dataProviderStep = numberGeneratorStep(stepBuilderFactory, billableData, "Second Dataset Processor"); - return jobBuilderFactory.get("Number generator - second dataset") + Step dataProviderStep = numberGeneratorStep(jobRepository, transactionManager, billableData, "Second Dataset Processor"); + return new JobBuilder("Number generator - second dataset", jobRepository) .start(dataProviderStep) .on(NOTIFY) .to(notificationStep) @@ -77,10 +87,10 @@ public Job numberGeneratorNotifierJob(JobBuilderFactory jobBuilderFactory, StepB @Bean @Qualifier("third_job") @Primary - public Job numberGeneratorNotifierJobWithDecider(JobBuilderFactory jobBuilderFactory, StepBuilderFactory stepBuilderFactory, @Qualifier("NotificationStep") Step notificationStep) { + public Job numberGeneratorNotifierJobWithDecider(JobRepository jobRepository, PlatformTransactionManager transactionManager, @Qualifier("NotificationStep") Step notificationStep) { int[] billableData = { 11, -2, -3 }; - Step dataProviderStep = numberGeneratorStepDecider(stepBuilderFactory, billableData, "Third Dataset Processor"); - return jobBuilderFactory.get("Number generator - third dataset") + Step dataProviderStep = numberGeneratorStepDecider(jobRepository, transactionManager, billableData, "Third Dataset Processor"); + return new JobBuilder("Number generator - third dataset", jobRepository) .start(dataProviderStep) .next(new NumberInfoDecider()) .on(NOTIFY) @@ -88,4 +98,39 @@ public Job numberGeneratorNotifierJobWithDecider(JobBuilderFactory jobBuilderFac .end() .build(); } + + @Bean(name = "jobRepository") + public JobRepository getJobRepository() throws Exception { + JobRepositoryFactoryBean factory = new JobRepositoryFactoryBean(); + factory.setDataSource(dataSource()); + factory.setTransactionManager(getTransactionManager()); + // JobRepositoryFactoryBean's methods Throws Generic Exception, + // it would have been better to have a specific one + factory.afterPropertiesSet(); + return factory.getObject(); + } + + @Bean(name = "dataSource") + public DataSource dataSource() { + EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder(); + return builder.setType(EmbeddedDatabaseType.H2) + .addScript("classpath:org/springframework/batch/core/schema-drop-h2.sql") + .addScript("classpath:org/springframework/batch/core/schema-h2.sql") + .build(); + } + + @Bean(name = "transactionManager") + public PlatformTransactionManager getTransactionManager() { + return new ResourcelessTransactionManager(); + } + + @Bean(name = "jobLauncher") + public JobLauncher getJobLauncher() throws Exception { + TaskExecutorJobLauncher jobLauncher = new TaskExecutorJobLauncher(); + // SimpleJobLauncher's methods Throws Generic Exception, + // it would have been better to have a specific one + jobLauncher.setJobRepository(getJobRepository()); + jobLauncher.afterPropertiesSet(); + return jobLauncher; + } } diff --git a/spring-batch/src/main/java/org/baeldung/conditionalflow/step/NotifierTasklet.java b/spring-batch/src/main/java/org/baeldung/conditionalflow/step/NotifierTasklet.java index 0d1db66fe95e..99ec151cba9c 100644 --- a/spring-batch/src/main/java/org/baeldung/conditionalflow/step/NotifierTasklet.java +++ b/spring-batch/src/main/java/org/baeldung/conditionalflow/step/NotifierTasklet.java @@ -7,9 +7,8 @@ public class NotifierTasklet implements Tasklet { @Override - public RepeatStatus execute(StepContribution stepContribution, ChunkContext chunkContext) throws Exception { - System.err.println("[" + chunkContext.getStepContext() - .getJobName() + "] contains interesting data!!"); + public RepeatStatus execute(StepContribution stepContribution, ChunkContext chunkContext) { + System.err.println("[" + chunkContext.getStepContext().getJobName() + "] contains interesting data!!"); return RepeatStatus.FINISHED; } } diff --git a/spring-batch/src/main/java/org/baeldung/conditionalflow/step/NumberInfoClassifier.java b/spring-batch/src/main/java/org/baeldung/conditionalflow/step/NumberInfoClassifier.java index fdb28263e74a..71d88e3f0ae5 100644 --- a/spring-batch/src/main/java/org/baeldung/conditionalflow/step/NumberInfoClassifier.java +++ b/spring-batch/src/main/java/org/baeldung/conditionalflow/step/NumberInfoClassifier.java @@ -29,7 +29,7 @@ public void afterProcess(NumberInfo item, Integer result) { } @Override - public Integer process(NumberInfo numberInfo) throws Exception { - return Integer.valueOf(numberInfo.getNumber()); + public Integer process(NumberInfo numberInfo) { + return numberInfo.getNumber(); } } diff --git a/spring-batch/src/main/java/org/baeldung/conditionalflow/step/NumberInfoClassifierWithDecider.java b/spring-batch/src/main/java/org/baeldung/conditionalflow/step/NumberInfoClassifierWithDecider.java index 4a8b7f19637b..26a225d715de 100644 --- a/spring-batch/src/main/java/org/baeldung/conditionalflow/step/NumberInfoClassifierWithDecider.java +++ b/spring-batch/src/main/java/org/baeldung/conditionalflow/step/NumberInfoClassifierWithDecider.java @@ -7,7 +7,7 @@ public class NumberInfoClassifierWithDecider extends ItemListenerSupport implements ItemProcessor { @Override - public Integer process(NumberInfo numberInfo) throws Exception { + public Integer process(NumberInfo numberInfo) { return Integer.valueOf(numberInfo.getNumber()); } } diff --git a/spring-batch/src/main/java/org/baeldung/conditionalflow/step/PrependingStdoutWriter.java b/spring-batch/src/main/java/org/baeldung/conditionalflow/step/PrependingStdoutWriter.java index 9ffea1e79821..abadb78e9306 100644 --- a/spring-batch/src/main/java/org/baeldung/conditionalflow/step/PrependingStdoutWriter.java +++ b/spring-batch/src/main/java/org/baeldung/conditionalflow/step/PrependingStdoutWriter.java @@ -1,7 +1,6 @@ package org.baeldung.conditionalflow.step; -import java.util.List; - +import org.springframework.batch.item.Chunk; import org.springframework.batch.item.ItemWriter; public class PrependingStdoutWriter implements ItemWriter { @@ -12,8 +11,8 @@ public PrependingStdoutWriter(String prependText) { } @Override - public void write(List list) { - for (T listItem : list) { + public void write(Chunk chunk) { + for (T listItem : chunk) { System.out.println(prependText + " " + listItem.toString()); } } diff --git a/spring-batch/src/main/resources/output/output1.xml b/spring-batch/src/main/resources/output/output1.xml index 838d04882a50..78bc7349e8da 100644 --- a/spring-batch/src/main/resources/output/output1.xml +++ b/spring-batch/src/main/resources/output/output1.xml @@ -1,21 +1,21 @@ - - 10000.0 - 2015-10-31 00:00:00 - 1234 - devendra - - - 12321.0 - 2015-12-03 00:00:00 - 2134 - john - - - 23411.0 - 2015-02-02 00:00:00 - 2134 - robin - + + 10000.0 + 2015-10-31 00:00:00 + 1234 + devendra + + + 12321.0 + 2015-12-03 00:00:00 + 2134 + john + + + 23411.0 + 2015-02-02 00:00:00 + 2134 + robin + \ No newline at end of file diff --git a/spring-batch/src/main/resources/output/output2.xml b/spring-batch/src/main/resources/output/output2.xml index 838d04882a50..78bc7349e8da 100644 --- a/spring-batch/src/main/resources/output/output2.xml +++ b/spring-batch/src/main/resources/output/output2.xml @@ -1,21 +1,21 @@ - - 10000.0 - 2015-10-31 00:00:00 - 1234 - devendra - - - 12321.0 - 2015-12-03 00:00:00 - 2134 - john - - - 23411.0 - 2015-02-02 00:00:00 - 2134 - robin - + + 10000.0 + 2015-10-31 00:00:00 + 1234 + devendra + + + 12321.0 + 2015-12-03 00:00:00 + 2134 + john + + + 23411.0 + 2015-02-02 00:00:00 + 2134 + robin + \ No newline at end of file diff --git a/spring-batch/src/main/resources/output/output3.xml b/spring-batch/src/main/resources/output/output3.xml index 838d04882a50..78bc7349e8da 100644 --- a/spring-batch/src/main/resources/output/output3.xml +++ b/spring-batch/src/main/resources/output/output3.xml @@ -1,21 +1,21 @@ - - 10000.0 - 2015-10-31 00:00:00 - 1234 - devendra - - - 12321.0 - 2015-12-03 00:00:00 - 2134 - john - - - 23411.0 - 2015-02-02 00:00:00 - 2134 - robin - + + 10000.0 + 2015-10-31 00:00:00 + 1234 + devendra + + + 12321.0 + 2015-12-03 00:00:00 + 2134 + john + + + 23411.0 + 2015-02-02 00:00:00 + 2134 + robin + \ No newline at end of file diff --git a/spring-batch/src/main/resources/output/output4.xml b/spring-batch/src/main/resources/output/output4.xml index 838d04882a50..78bc7349e8da 100644 --- a/spring-batch/src/main/resources/output/output4.xml +++ b/spring-batch/src/main/resources/output/output4.xml @@ -1,21 +1,21 @@ - - 10000.0 - 2015-10-31 00:00:00 - 1234 - devendra - - - 12321.0 - 2015-12-03 00:00:00 - 2134 - john - - - 23411.0 - 2015-02-02 00:00:00 - 2134 - robin - + + 10000.0 + 2015-10-31 00:00:00 + 1234 + devendra + + + 12321.0 + 2015-12-03 00:00:00 + 2134 + john + + + 23411.0 + 2015-02-02 00:00:00 + 2134 + robin + \ No newline at end of file diff --git a/spring-batch/src/main/resources/output/output5.xml b/spring-batch/src/main/resources/output/output5.xml index 838d04882a50..78bc7349e8da 100644 --- a/spring-batch/src/main/resources/output/output5.xml +++ b/spring-batch/src/main/resources/output/output5.xml @@ -1,21 +1,21 @@ - - 10000.0 - 2015-10-31 00:00:00 - 1234 - devendra - - - 12321.0 - 2015-12-03 00:00:00 - 2134 - john - - - 23411.0 - 2015-02-02 00:00:00 - 2134 - robin - + + 10000.0 + 2015-10-31 00:00:00 + 1234 + devendra + + + 12321.0 + 2015-12-03 00:00:00 + 2134 + john + + + 23411.0 + 2015-02-02 00:00:00 + 2134 + robin + \ No newline at end of file diff --git a/spring-batch/src/main/resources/spring-batch-intro.xml b/spring-batch/src/main/resources/spring-batch-intro.xml index 2a7c1e7c4a0d..bb11ea0efdd9 100644 --- a/spring-batch/src/main/resources/spring-batch-intro.xml +++ b/spring-batch/src/main/resources/spring-batch-intro.xml @@ -17,7 +17,7 @@ + value="username,userid,transactiondate,amount" /> @@ -33,11 +33,11 @@ - + - + com.baeldung.batch.model.Transaction diff --git a/spring-batch/src/main/resources/spring.xml b/spring-batch/src/main/resources/spring.xml index dea261c5e612..fc7e86794130 100644 --- a/spring-batch/src/main/resources/spring.xml +++ b/spring-batch/src/main/resources/spring.xml @@ -9,8 +9,8 @@ - - + + @@ -18,8 +18,8 @@ - + location="org/springframework/batch/core/schema-drop-h2.sql" /> + @@ -31,7 +31,6 @@ class="org.springframework.batch.core.repository.support.JobRepositoryFactoryBean"> - { - assertThat(stepExecution.getWriteCount(), is(8)); + assertEquals(8L, stepExecution.getWriteCount()); }); } diff --git a/spring-batch/src/test/java/com/baeldung/batchtesting/SpringBatchStepScopeIntegrationTest.java b/spring-batch/src/test/java/com/baeldung/batchtesting/SpringBatchStepScopeIntegrationTest.java index 4655117b856e..311bd828cbd4 100644 --- a/spring-batch/src/test/java/com/baeldung/batchtesting/SpringBatchStepScopeIntegrationTest.java +++ b/spring-batch/src/test/java/com/baeldung/batchtesting/SpringBatchStepScopeIntegrationTest.java @@ -1,22 +1,21 @@ package com.baeldung.batchtesting; -import static org.hamcrest.Matchers.is; -import static org.junit.Assert.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.springframework.batch.test.AssertFile.assertFileEquals; -import java.util.Arrays; +import java.util.List; -import com.baeldung.batchtesting.SpringBatchConfiguration; import com.baeldung.batchtesting.model.Book; import com.baeldung.batchtesting.model.BookRecord; -import org.junit.After; -import org.junit.Test; -import org.junit.runner.RunWith; + +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.Test; import org.springframework.batch.core.JobParameters; import org.springframework.batch.core.JobParametersBuilder; import org.springframework.batch.core.StepExecution; +import org.springframework.batch.item.Chunk; import org.springframework.batch.item.file.FlatFileItemReader; import org.springframework.batch.item.json.JsonFileItemWriter; -import org.springframework.batch.test.AssertFile; import org.springframework.batch.test.JobRepositoryTestUtils; import org.springframework.batch.test.MetaDataInstanceFactory; import org.springframework.batch.test.StepScopeTestUtils; @@ -24,21 +23,12 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.core.io.FileSystemResource; -import org.springframework.test.annotation.DirtiesContext; -import org.springframework.test.annotation.DirtiesContext.ClassMode; import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.TestExecutionListeners; -import org.springframework.test.context.junit4.SpringRunner; -import org.springframework.test.context.support.DependencyInjectionTestExecutionListener; -import org.springframework.test.context.support.DirtiesContextTestExecutionListener; -@RunWith(SpringRunner.class) @SpringBatchTest @EnableAutoConfiguration @ContextConfiguration(classes = { SpringBatchConfiguration.class }) -@TestExecutionListeners({ DependencyInjectionTestExecutionListener.class, DirtiesContextTestExecutionListener.class }) -@DirtiesContext(classMode = ClassMode.AFTER_CLASS) public class SpringBatchStepScopeIntegrationTest { private static final String TEST_OUTPUT = "src/test/resources/output/actual-output.json"; @@ -62,7 +52,7 @@ private JobParameters defaultJobParameters() { return paramsBuilder.toJobParameters(); } - @After + @AfterEach public void cleanUp() { jobRepositoryTestUtils.removeJobExecutions(); } @@ -80,11 +70,11 @@ public void givenMockedStep_whenReaderCalled_thenSuccess() throws Exception { while ((bookRecord = itemReader.read()) != null) { // then - assertThat(bookRecord.getBookName(), is("Foundation")); - assertThat(bookRecord.getBookAuthor(), is("Asimov I.")); - assertThat(bookRecord.getBookISBN(), is("ISBN 12839")); - assertThat(bookRecord.getBookFormat(), is("hardcover")); - assertThat(bookRecord.getPublishingYear(), is("2018")); + assertEquals("Foundation", bookRecord.getBookName()); + assertEquals("Asimov I.", bookRecord.getBookAuthor()); + assertEquals("ISBN 12839", bookRecord.getBookISBN()); + assertEquals("hardcover", bookRecord.getBookFormat()); + assertEquals("2018", bookRecord.getPublishingYear()); } itemReader.close(); return null; @@ -106,12 +96,12 @@ public void givenMockedStep_whenWriterCalled_thenSuccess() throws Exception { StepScopeTestUtils.doInStepScope(stepExecution, () -> { jsonItemWriter.open(stepExecution.getExecutionContext()); - jsonItemWriter.write(Arrays.asList(demoBook)); + jsonItemWriter.write(new Chunk<>(List.of(demoBook))); jsonItemWriter.close(); return null; }); // then - AssertFile.assertFileEquals(expectedResult, actualResult); + assertFileEquals(expectedResult, actualResult); } } diff --git a/spring-batch/src/test/java/com/baeldung/taskletsvschunks/chunks/ChunksIntegrationTest.java b/spring-batch/src/test/java/com/baeldung/taskletsvschunks/chunks/ChunksIntegrationTest.java index 1132e4d5e26a..109342076b2b 100644 --- a/spring-batch/src/test/java/com/baeldung/taskletsvschunks/chunks/ChunksIntegrationTest.java +++ b/spring-batch/src/test/java/com/baeldung/taskletsvschunks/chunks/ChunksIntegrationTest.java @@ -1,25 +1,29 @@ package com.baeldung.taskletsvschunks.chunks; +import static org.junit.jupiter.api.Assertions.assertEquals; + import com.baeldung.taskletsvschunks.config.ChunksConfig; -import org.junit.Assert; -import org.junit.Test; -import org.junit.runner.RunWith; + +import org.junit.jupiter.api.Test; import org.springframework.batch.core.ExitStatus; import org.springframework.batch.core.JobExecution; import org.springframework.batch.test.JobLauncherTestUtils; +import org.springframework.batch.test.context.SpringBatchTest; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(classes = ChunksConfig.class) +@SpringBatchTest +@EnableAutoConfiguration +@ContextConfiguration(classes = ChunksConfig.class) public class ChunksIntegrationTest { - @Autowired private JobLauncherTestUtils jobLauncherTestUtils; + @Autowired + private JobLauncherTestUtils jobLauncherTestUtils; @Test public void givenChunksJob_WhenJobEnds_ThenStatusCompleted() throws Exception { JobExecution jobExecution = jobLauncherTestUtils.launchJob(); - Assert.assertEquals(ExitStatus.COMPLETED, jobExecution.getExitStatus()); + assertEquals(ExitStatus.COMPLETED, jobExecution.getExitStatus()); } } \ No newline at end of file diff --git a/spring-batch/src/test/java/com/baeldung/taskletsvschunks/tasklets/TaskletsIntegrationTest.java b/spring-batch/src/test/java/com/baeldung/taskletsvschunks/tasklets/TaskletsIntegrationTest.java index 2e1ad031aa33..103b1a209654 100644 --- a/spring-batch/src/test/java/com/baeldung/taskletsvschunks/tasklets/TaskletsIntegrationTest.java +++ b/spring-batch/src/test/java/com/baeldung/taskletsvschunks/tasklets/TaskletsIntegrationTest.java @@ -1,25 +1,29 @@ package com.baeldung.taskletsvschunks.tasklets; +import static org.junit.jupiter.api.Assertions.assertEquals; + import com.baeldung.taskletsvschunks.config.TaskletsConfig; -import org.junit.Assert; -import org.junit.Test; -import org.junit.runner.RunWith; + +import org.junit.jupiter.api.Test; import org.springframework.batch.core.ExitStatus; import org.springframework.batch.core.JobExecution; import org.springframework.batch.test.JobLauncherTestUtils; +import org.springframework.batch.test.context.SpringBatchTest; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -@RunWith(SpringJUnit4ClassRunner.class) +@SpringBatchTest +@EnableAutoConfiguration @ContextConfiguration(classes = TaskletsConfig.class) public class TaskletsIntegrationTest { - @Autowired private JobLauncherTestUtils jobLauncherTestUtils; + @Autowired + private JobLauncherTestUtils jobLauncherTestUtils; @Test public void givenTaskletsJob_WhenJobEnds_ThenStatusCompleted() throws Exception { JobExecution jobExecution = jobLauncherTestUtils.launchJob(); - Assert.assertEquals(ExitStatus.COMPLETED, jobExecution.getExitStatus()); + assertEquals(ExitStatus.COMPLETED, jobExecution.getExitStatus()); } } \ No newline at end of file diff --git a/spring-batch/src/test/java/org/baeldung/conditionalflow/DeciderJobIntegrationTest.java b/spring-batch/src/test/java/org/baeldung/conditionalflow/DeciderJobIntegrationTest.java index e73cb17494f3..a50ad0455ce3 100644 --- a/spring-batch/src/test/java/org/baeldung/conditionalflow/DeciderJobIntegrationTest.java +++ b/spring-batch/src/test/java/org/baeldung/conditionalflow/DeciderJobIntegrationTest.java @@ -1,8 +1,10 @@ package org.baeldung.conditionalflow; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + import org.baeldung.conditionalflow.config.NumberInfoConfig; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.Test; import org.springframework.batch.core.ExitStatus; import org.springframework.batch.core.JobExecution; import org.springframework.batch.core.StepExecution; @@ -10,26 +12,16 @@ import org.springframework.batch.test.context.SpringBatchTest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.TestExecutionListeners; -import org.springframework.test.context.junit4.SpringRunner; -import org.springframework.test.context.support.DependencyInjectionTestExecutionListener; -import org.springframework.test.context.support.DirtiesContextTestExecutionListener; import java.util.Collection; import java.util.Iterator; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -@RunWith(SpringRunner.class) @SpringBatchTest @EnableAutoConfiguration @ContextConfiguration(classes = { NumberInfoConfig.class }) -@TestExecutionListeners({ DependencyInjectionTestExecutionListener.class, DirtiesContextTestExecutionListener.class }) -@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS) public class DeciderJobIntegrationTest { + @Autowired private JobLauncherTestUtils jobLauncherTestUtils; @@ -39,8 +31,7 @@ public void givenNumberGeneratorDecider_whenDeciderRuns_thenStatusIsNotify() thr Collection actualStepExecutions = jobExecution.getStepExecutions(); ExitStatus actualJobExitStatus = jobExecution.getExitStatus(); - assertEquals("COMPLETED", actualJobExitStatus.getExitCode() - .toString()); + assertEquals("COMPLETED", actualJobExitStatus.getExitCode()); assertEquals(2, actualStepExecutions.size()); boolean notifyStepDidRun = false; Iterator iterator = actualStepExecutions.iterator(); diff --git a/spring-batch/src/test/java/org/baeldung/conditionalflow/model/NumberInfoUnitTest.java b/spring-batch/src/test/java/org/baeldung/conditionalflow/model/NumberInfoUnitTest.java index dc396b38da55..bdecee5621cb 100644 --- a/spring-batch/src/test/java/org/baeldung/conditionalflow/model/NumberInfoUnitTest.java +++ b/spring-batch/src/test/java/org/baeldung/conditionalflow/model/NumberInfoUnitTest.java @@ -5,10 +5,10 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; -import org.junit.runner.RunWith; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.test.context.junit.jupiter.SpringExtension; -@RunWith(SpringJUnit4ClassRunner.class) +@ExtendWith(SpringExtension.class) class NumberInfoUnitTest { @Test diff --git a/spring-batch/src/test/resources/output/actual-output.json b/spring-batch/src/test/resources/output/actual-output.json index 1fd6cfcf378c..32ad8b7ead0e 100644 --- a/spring-batch/src/test/resources/output/actual-output.json +++ b/spring-batch/src/test/resources/output/actual-output.json @@ -1,3 +1,10 @@ [ - {"author":"Grisham J.","name":"The Firm"} + {"author":"Asimov I.","name":"Foundation"}, + {"author":"Strugatski A.","name":"Roadside Picnic"}, + {"author":"Murakami H.","name":"Norwegian Wood"}, + {"author":"Brown D.","name":"Davinci Code"}, + {"author":"Dick K. P.","name":"Ubik"}, + {"author":"King S.","name":"JFK"}, + {"author":"Sagan C.","name":"Contact"}, + {"author":"Huxley A.","name":"Brave New World"} ] From 0062225a20b22d36a1ede2c8671acb6e776ab142 Mon Sep 17 00:00:00 2001 From: Bipin kumar Date: Wed, 5 Apr 2023 21:56:04 +0530 Subject: [PATCH 027/390] =?UTF-8?q?Java-14972:=20changes=20made=20for=20ad?= =?UTF-8?q?ding=20new=20example=20using=20field=20annoted=20@=E2=80=A6=20(?= =?UTF-8?q?#13746)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Java-19389: changes made for adding new example using field annoted @jsonValue * Java-14972: Changes made for renaming the test methods and removing commented code * dev-14972 : Changes made for incorporating review comments * dev-14972: changes made for adding GeneralBean class and test cases of jsonValue against the GeneralBean class --- .../jackson/annotation/GeneralBean.java | 26 +++++++++++++++ .../dtos/withEnum/TypeEnumWithValue.java | 23 +++++++++++++ .../annotation/JacksonAnnotationUnitTest.java | 33 +++++++++++++++++++ 3 files changed, 82 insertions(+) create mode 100644 jackson-simple/src/main/java/com/baeldung/jackson/annotation/GeneralBean.java create mode 100644 jackson-simple/src/main/java/com/baeldung/jackson/annotation/dtos/withEnum/TypeEnumWithValue.java diff --git a/jackson-simple/src/main/java/com/baeldung/jackson/annotation/GeneralBean.java b/jackson-simple/src/main/java/com/baeldung/jackson/annotation/GeneralBean.java new file mode 100644 index 000000000000..a8333f54ae5d --- /dev/null +++ b/jackson-simple/src/main/java/com/baeldung/jackson/annotation/GeneralBean.java @@ -0,0 +1,26 @@ +package com.baeldung.jackson.annotation; + +import com.fasterxml.jackson.annotation.JsonValue; + +public class GeneralBean { + Integer id; + + @JsonValue + String name; + + public GeneralBean() { + } + + public GeneralBean(Integer id, String name) { + this.id = id; + this.name = name; + } + + public Integer getId() { + return id; + } + + public String getName() { + return name; + } +} diff --git a/jackson-simple/src/main/java/com/baeldung/jackson/annotation/dtos/withEnum/TypeEnumWithValue.java b/jackson-simple/src/main/java/com/baeldung/jackson/annotation/dtos/withEnum/TypeEnumWithValue.java new file mode 100644 index 000000000000..2c8718dfd8fd --- /dev/null +++ b/jackson-simple/src/main/java/com/baeldung/jackson/annotation/dtos/withEnum/TypeEnumWithValue.java @@ -0,0 +1,23 @@ +package com.baeldung.jackson.annotation.dtos.withEnum; + +import com.fasterxml.jackson.annotation.JsonValue; + +public enum TypeEnumWithValue { + TYPE1(1, "Type A"), TYPE2(2, "Type 2"); + + private Integer id; + + @JsonValue + private String name; + + + TypeEnumWithValue(int id, String name) { + this.id = id; + this.name = name; + } + + //@JsonValue + public String getName() { + return name; + } +} diff --git a/jackson-simple/src/test/java/com/baeldung/jackson/annotation/JacksonAnnotationUnitTest.java b/jackson-simple/src/test/java/com/baeldung/jackson/annotation/JacksonAnnotationUnitTest.java index bbbb79b0a85f..9fb982842f03 100644 --- a/jackson-simple/src/test/java/com/baeldung/jackson/annotation/JacksonAnnotationUnitTest.java +++ b/jackson-simple/src/test/java/com/baeldung/jackson/annotation/JacksonAnnotationUnitTest.java @@ -20,6 +20,7 @@ import com.baeldung.jackson.annotation.bidirection.UserWithRef; import com.baeldung.jackson.annotation.date.EventWithFormat; import com.baeldung.jackson.annotation.date.EventWithSerializer; +import com.baeldung.jackson.annotation.dtos.withEnum.TypeEnumWithValue; import com.baeldung.jackson.annotation.ignore.MyMixInForIgnoreType; import com.baeldung.jackson.annotation.dtos.withEnum.DistanceEnumWithValue; import com.baeldung.jackson.annotation.exception.UserWithRoot; @@ -95,6 +96,7 @@ public void whenSerializingUsingJsonValue_thenCorrect() throws IOException { assertThat(enumAsString, is("1609.34")); } + @Test public void whenSerializingUsingJsonSerialize_thenCorrect() throws JsonProcessingException, ParseException { final SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy hh:mm:ss"); @@ -107,6 +109,19 @@ public void whenSerializingUsingJsonSerialize_thenCorrect() throws JsonProcessin assertThat(result, containsString(toParse)); } + @Test + public void whenSerializingUsingJsonValueAnnotatedField_thenCorrect() throws JsonProcessingException { + final String enumValue = new ObjectMapper().writeValueAsString(TypeEnumWithValue.TYPE1); + assertThat(enumValue, is("\"Type A\"")); + } + + @Test + public void whenSerializingUsingJsonValueAnnotatedFieldInPojo_thenCorrect() throws JsonProcessingException { + GeneralBean bean1 = new GeneralBean(1, "Bean 1"); + final String bean1AsString = new ObjectMapper().writeValueAsString(bean1); + assertThat(bean1AsString, is("\"Bean 1\"")); + } + // ========================= Deserializing annotations ============================ @Test @@ -118,6 +133,7 @@ public void whenDeserializingUsingJsonCreator_thenCorrect() throws IOException { assertEquals("My bean", bean.name); } + @Test public void whenDeserializingUsingJsonInject_thenCorrect() throws IOException { final String json = "{\"name\":\"My bean\"}"; @@ -161,6 +177,23 @@ public void whenDeserializingUsingJsonDeserialize_thenCorrect() throws IOExcepti assertEquals("20-12-2014 02:30:00", df.format(event.eventDate)); } + @Test + public void whenDeserializingUsingJsonValue_thenCorrect() throws JsonProcessingException { + final String str = "\"Type A\""; + TypeEnumWithValue te = new ObjectMapper().readerFor(TypeEnumWithValue.class) + .readValue(str); + assertThat(te, is(TypeEnumWithValue.TYPE1)); + } + + @Test(expected = Exception.class) + public void whenDeserializingUsingJsonValueAnnotatedFieldInPojo_thenGetException() throws JsonProcessingException { + GeneralBean bean1 = new GeneralBean(1, "Bean 1"); + final String bean1AsString = new ObjectMapper().writeValueAsString(bean1); + GeneralBean bean = new ObjectMapper().readerFor(GeneralBean.class) + .readValue(bean1AsString); + assertThat(bean.getName(), is(bean1.getName())); + } + // ========================= Inclusion annotations ============================ @Test From 054c9958bebc0e7a508df3b988e34246b73842ad Mon Sep 17 00:00:00 2001 From: Bipin kumar Date: Wed, 5 Apr 2023 21:58:06 +0530 Subject: [PATCH 028/390] Dev 19389 (#13745) * Java-19389 : commits made for adding two new test cases for UUID use: * Java-19389 : commits made for adding two new test cases for UUID use: * JAVA-19389: Changes made for incorporating review comments --- .../main/java/com/baeldung/entity/Customer.java | 15 +++++++++++++++ .../baeldung/repository/CustomerRepository.java | 2 ++ .../CustomerRepositoryIntegrationTest.java | 16 ++++++++++++++++ 3 files changed, 33 insertions(+) diff --git a/persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/entity/Customer.java b/persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/entity/Customer.java index efcae7385316..5af96d78221e 100644 --- a/persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/entity/Customer.java +++ b/persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/entity/Customer.java @@ -1,8 +1,11 @@ package com.baeldung.entity; +import org.hibernate.annotations.Type; + import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; +import java.util.UUID; @Entity public class Customer { @@ -13,11 +16,20 @@ public class Customer { private String name; private String email; + @Type(type = "org.hibernate.type.UUIDCharType") + private UUID uuid; + public Customer(String name, String email) { this.name = name; this.email = email; } + public Customer(String name, String email, UUID uuid) { + this.name = name; + this.email = email; + this.uuid = uuid; + } + public String getName() { return name; } @@ -34,4 +46,7 @@ public void setEmail(String email) { this.email = email; } + public UUID getUuid() { + return this.uuid; + } } diff --git a/persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/repository/CustomerRepository.java b/persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/repository/CustomerRepository.java index 65b22bbd84a8..5f9710b83919 100644 --- a/persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/repository/CustomerRepository.java +++ b/persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/repository/CustomerRepository.java @@ -6,6 +6,7 @@ import org.springframework.data.repository.query.Param; import java.util.List; +import java.util.UUID; public interface CustomerRepository extends JpaRepository { @@ -16,4 +17,5 @@ public interface CustomerRepository extends JpaRepository { @Query("SELECT c FROM Customer c WHERE (:name is null or c.name = :name) and (:email is null or c.email = :email)") List findCustomerByNameAndEmail(@Param("name") String name, @Param("email") String email); + List findCustomerByUuid(@Param("uuid") UUID uuid); } diff --git a/persistence-modules/spring-data-jpa-filtering/src/test/java/com/baeldung/repository/CustomerRepositoryIntegrationTest.java b/persistence-modules/spring-data-jpa-filtering/src/test/java/com/baeldung/repository/CustomerRepositoryIntegrationTest.java index 5d6457ce30af..27208507f1df 100644 --- a/persistence-modules/spring-data-jpa-filtering/src/test/java/com/baeldung/repository/CustomerRepositoryIntegrationTest.java +++ b/persistence-modules/spring-data-jpa-filtering/src/test/java/com/baeldung/repository/CustomerRepositoryIntegrationTest.java @@ -12,6 +12,7 @@ import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import java.util.List; +import java.util.UUID; import static org.junit.Assert.assertEquals; @@ -30,6 +31,7 @@ public void before() { entityManager.persist(new Customer("A", "A@example.com")); entityManager.persist(new Customer("D", null)); entityManager.persist(new Customer("D", "D@example.com")); + entityManager.persist(new Customer("C", null, UUID.fromString("c7c19ff4-8636-4b99-9591-c3327652f191"))); } @Test @@ -57,6 +59,20 @@ public void givenQueryAnnotation_whenEmailIsNull_thenIgnoreEmail() { assertEquals(2, customers.size()); } + @Test + public void givenUUIDIsPresent_whenQueryMethod_thenFetchedCorrectly() { + List customers = repository.findCustomerByUuid(UUID.fromString("c7c19ff4-8636-4b99-9591-c3327652f191")); + + assertEquals(1, customers.size()); + } + + @Test + public void givenNullUuid_whenQueryMethod_thenFetchedCorrectly() { + List customers = repository.findCustomerByUuid(null); + + assertEquals(3, customers.size()); + } + @After public void cleanUp() { repository.deleteAll(); From eb04de7dfbb295f313fdfad83f896e846f4b8e60 Mon Sep 17 00:00:00 2001 From: Iniubong LA Date: Thu, 6 Apr 2023 01:22:12 +0000 Subject: [PATCH 029/390] arthurshur (#13737) * Creating a deep vs shallow copy of an object in Java * Creating a deep vs shallow copy of an object in Java * Baeldung article converting number bases * Baeldung article converting number bases * edits made to Converting a Number from One Base to Another in Java * added braces to oneliners * added precondition to check input * String[] vs String... * helper vs Utility classes * helper vs utility classes code * helper vs utility classes refactor * utility vs helper class * Helper vs utility * helper vs utility classes * refactor package name * Revert "refactor package name" This reverts commit d9464aa2de272b75ff7efe1c5ffb4de7fd4506e0. * renamed package --- .../helpervsutilityclasses/MyHelperClass.java | 40 +++++++++++++++++++ .../MyUtilityClass.java | 19 +++++++++ .../MyHelperClassUnitTest.java | 20 ++++++++++ .../MyUtilityClassUnitTest.java | 15 +++++++ 4 files changed, 94 insertions(+) create mode 100644 core-java-modules/core-java-8-2/src/main/java/com/baeldung/helpervsutilityclasses/MyHelperClass.java create mode 100644 core-java-modules/core-java-8-2/src/main/java/com/baeldung/helpervsutilityclasses/MyUtilityClass.java create mode 100644 core-java-modules/core-java-8-2/src/test/java/com/baeldung/helpervsutilityclasses/MyHelperClassUnitTest.java create mode 100644 core-java-modules/core-java-8-2/src/test/java/com/baeldung/helpervsutilityclasses/MyUtilityClassUnitTest.java diff --git a/core-java-modules/core-java-8-2/src/main/java/com/baeldung/helpervsutilityclasses/MyHelperClass.java b/core-java-modules/core-java-8-2/src/main/java/com/baeldung/helpervsutilityclasses/MyHelperClass.java new file mode 100644 index 000000000000..40b58bf20020 --- /dev/null +++ b/core-java-modules/core-java-8-2/src/main/java/com/baeldung/helpervsutilityclasses/MyHelperClass.java @@ -0,0 +1,40 @@ +package com.baeldung.helpervsutilityclasses; + +class MyHelperClass { + public double discount; + public MyHelperClass(double discount) { + if (discount > 0 && discount < 1) { + this.discount = discount; + } + } + public double discountedPrice(double price) { + return price - (price * discount); + } + + public static int getMaxNumber(int[] numbers) { + if (numbers.length == 0) { + throw new IllegalArgumentException("Ensure array is not empty"); + } + int max = numbers[0]; + for (int i = 1; i < numbers.length; i++) { + if (numbers[i] > max) { + max = numbers[i]; + } + } + return max; + } + + public static int getMinNumber(int[] numbers) { + if (numbers.length == 0) { + throw new IllegalArgumentException("Ensure array is not empty"); + } + int min = numbers[0]; + for (int i = 1; i < numbers.length; i++) { + if (numbers[i] < min) { + min = numbers[i]; + } + } + return min; + } + +} diff --git a/core-java-modules/core-java-8-2/src/main/java/com/baeldung/helpervsutilityclasses/MyUtilityClass.java b/core-java-modules/core-java-8-2/src/main/java/com/baeldung/helpervsutilityclasses/MyUtilityClass.java new file mode 100644 index 000000000000..1f0075995ced --- /dev/null +++ b/core-java-modules/core-java-8-2/src/main/java/com/baeldung/helpervsutilityclasses/MyUtilityClass.java @@ -0,0 +1,19 @@ +package com.baeldung.helpervsutilityclasses; + +public final class MyUtilityClass { + + private MyUtilityClass(){} + + public static String returnUpperCase(String stringInput) { + return stringInput.toUpperCase(); + } + + public static String returnLowerCase(String stringInput) { + return stringInput.toLowerCase(); + } + + public static String[] splitStringInput(String stringInput, String delimiter) { + return stringInput.split(delimiter); + } + +} diff --git a/core-java-modules/core-java-8-2/src/test/java/com/baeldung/helpervsutilityclasses/MyHelperClassUnitTest.java b/core-java-modules/core-java-8-2/src/test/java/com/baeldung/helpervsutilityclasses/MyHelperClassUnitTest.java new file mode 100644 index 000000000000..a0c1afea52e3 --- /dev/null +++ b/core-java-modules/core-java-8-2/src/test/java/com/baeldung/helpervsutilityclasses/MyHelperClassUnitTest.java @@ -0,0 +1,20 @@ +package com.baeldung.helpervsutilityclasses; + +import static org.junit.jupiter.api.Assertions.*; + +import org.junit.jupiter.api.Test; + +class MyHelperClassUnitTest { + + @Test + void whenCreatingHelperObject_thenHelperObjectShouldBeCreated() { + MyHelperClass myHelperClassObject = new MyHelperClass(0.10); + int[] numberArray = {15, 23, 66, 3, 51, 79}; + + assertNotNull(myHelperClassObject); + + assertEquals(90, myHelperClassObject.discountedPrice(100.00)); + assertEquals( 79, MyHelperClass.getMaxNumber(numberArray)); + assertEquals(3, MyHelperClass.getMinNumber(numberArray)); + } +} \ No newline at end of file diff --git a/core-java-modules/core-java-8-2/src/test/java/com/baeldung/helpervsutilityclasses/MyUtilityClassUnitTest.java b/core-java-modules/core-java-8-2/src/test/java/com/baeldung/helpervsutilityclasses/MyUtilityClassUnitTest.java new file mode 100644 index 000000000000..8b29f51959e3 --- /dev/null +++ b/core-java-modules/core-java-8-2/src/test/java/com/baeldung/helpervsutilityclasses/MyUtilityClassUnitTest.java @@ -0,0 +1,15 @@ +package com.baeldung.helpervsutilityclasses; + +import static org.junit.jupiter.api.Assertions.*; + +import org.junit.jupiter.api.Test; + +class MyUtilityClassUnitTest { + + @Test + void whenUsingUtilityMethods_thenAccessMethodsViaClassName(){ + assertEquals( "INIUBONG", MyUtilityClass.returnUpperCase("iniubong")); + assertEquals("accra", MyUtilityClass.returnLowerCase("AcCrA")); + } + +} \ No newline at end of file From 9633617144b948a4d91fe6c6cfb89aa427d350fc Mon Sep 17 00:00:00 2001 From: jsgrah-spring Date: Thu, 6 Apr 2023 18:39:24 +0200 Subject: [PATCH 030/390] JAVA-19970, Module gcp-firebase - use dummy keys. (#13742) Co-authored-by: jogra --- .../src/main/resources/firebase-service-account.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/gcp-firebase/src/main/resources/firebase-service-account.json b/gcp-firebase/src/main/resources/firebase-service-account.json index ed5afa9f134e..cd87ff6bda42 100644 --- a/gcp-firebase/src/main/resources/firebase-service-account.json +++ b/gcp-firebase/src/main/resources/firebase-service-account.json @@ -1,10 +1,10 @@ { "type": "service_account", - "project_id": "tutorials-2cdfb", - "private_key_id": "d9f6a684d6814f85ed2d0490585eb7bf590f983a", - "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDdJWTeGT2eBFo+\nXxzT9xFJYPtyawTAj0K1rVUNlWNUwj3zszK6P2sAsrpI2Rz1klwQ9aDz9i3+Opxv\n7UZ3pOzur6S58JnoswtNs6BZ9P7oeggLJJC6MPjioxwh8jLLIGMgdVtC2/iPYW3r\nGzurWlwkM8M8DyCgNq7KKJcx44pGcyy16ZGCYiijuTEmK6R+WHJTTyICzRFu3Org\nuHGlZUs/G4E76p10HanoFX2AIS/fDEEMP2DXBB73yoCal5GuvMY9yZWxnvV65Y5z\nGveY3NDB9EESbO2AAhDvHekWT17uWhymtO5N3gM8da48J9d51tVzi0D/NIPZnF0u\nTS64uxK3AgMBAAECggEAYuEQa7oPcfLyQscWRbRH1250n2E4e7zSkBcTW4J7Km+7\ncZajTOGEP4iqgF4Lc8XgQnkBYXOmdvDP97+47VAh3EtOtRDeUEyV9kUlonNH8rx1\nkj3kNEwnTHav4oG/slEl4WJ3zro6NinTEvdXQ7OgVVOLrPP6m4g3uQ5TJCxgLEUI\nTd3Hs3cg3P71mzEqfBF4NmGVmC1ea5lXFELd6giJJMvL7g+O2w22/fquGWOrreAM\ncj/G2Xv9/vmzeb9yzbgGxqCJyY6vspmd90fQLUu7bxkEY5/PPc6Zk8qay4AdEn47\nkL6hnJiR8H1wMCzV2RTUKE7ospriNVdBilXgxm9IMQKBgQD1TmF0Bg85zvXmEKBa\nLBhbc3xTtM7DOgKs+pI12sYDKwgL/QKEI/TKkYXua0aVGiQWc2Bk2/0sYhO6aB2f\n6AN1ZUrf4PRM8c53jebChc7beVLSjWI8Tx+kE+0t8864OwvELYZUzP35oSx3RdJD\nE/CvqBM7NQfJwx2Mw2VJK/YRGQKBgQDmyWLm/IWitehkITw6xMQpkkFs2m4Joq3A\nJvAyri58TRkw/7rqWaIxb5Wcy/7BOvjDN8PZNTHh4ZvhQiHpn7NGUks2/ULnWxUB\nWAA9YbeO9PNHJfZ6PjD2FSvwOXHj+vVkWt2GCXT8pDGYM2ImqXon85Oe3OH/h+N5\nktO9taesTwKBgQCSdPGKK/P7N61oZpTWQW1pbFHWSCUKOiBO1mtk6/E9AvwS7EQM\nUMteBfRInJPPgYP6Q3hRv2YwkX3l1TOavRMTjB5f/BbfuZ7jkj0r9mfCcXUZcIAu\nMa9abus0fFP3eolT3zpMdvdLiwbZTz5x/f29YkPZHZhAxdVmrWJThYOsQQKBgBDu\nZVsc25D8V3hBF/IXzWxfVn1t6PS8ApM+SBDvxmlIHrkBiez3dna6APfn32C9utJX\nnP6qcGZp7s2v1F0XYkeecfYuzmG6xOe8VQgryxOp1M87ccG2HlFvbDHLhRd8qdQa\n9nWG7BY81Yac/m5nsJaNwB6/hbUBeybIJtCcKxjxAoGBAJ3y+QSFb4AYmxLFtmMA\nklOvlT+r70w4RV/z4SEO1gjWEh9IozNSXknl5Q/8Zh9IVm3+/qYap//IzEv9JUc3\nv4+HlpZu0trxTpvRWWjPqVr3ssxRdiFLC0LCLEk4rzqWLBVyzJm8uHVIF9Inv8PE\naudInvdbnfAWi60+1Wi8u0Co\n-----END PRIVATE KEY-----\n", - "client_email": "firebase-adminsdk-2afzd@tutorials-2cdfb.iam.gserviceaccount.com", - "client_id": "111111112074248894669", + "project_id": "REPLACE WITH VALID PROJECT ID", + "private_key_id": "REPLACE WITH VALID PRIVATE KEY ID", + "private_key": "REPLACE WITH VALID PRIVATE KEY", + "client_email": "REPLACE WITH VALID CLIENT EMAIL", + "client_id": "REPLACE WITH VALID CLIENT ID", "auth_uri": "https://accounts.google.com/o/oauth2/auth", "token_uri": "https://oauth2.googleapis.com/token", "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", From 65e22c8b027af063b210cd07f575dc39c0486aac Mon Sep 17 00:00:00 2001 From: Tapan Avasthi Date: Fri, 7 Apr 2023 05:23:50 +0530 Subject: [PATCH 031/390] BAEL-6370: Introduce @JsonKey annotation for Map serialization (#13766) Co-authored-by: Tapan Avasthi --- jackson-modules/jackson-conversions/pom.xml | 5 ++ .../java/com/baeldung/jackson/map/Fruit.java | 21 ++++++++ .../map/MapWithJsonKeyValueUnitTest.java | 48 +++++++++++++++++++ 3 files changed, 74 insertions(+) create mode 100644 jackson-modules/jackson-conversions/src/main/java/com/baeldung/jackson/map/Fruit.java create mode 100644 jackson-modules/jackson-conversions/src/test/java/com/baeldung/jackson/map/MapWithJsonKeyValueUnitTest.java diff --git a/jackson-modules/jackson-conversions/pom.xml b/jackson-modules/jackson-conversions/pom.xml index 9218f209ac33..9ab1fa9020c9 100644 --- a/jackson-modules/jackson-conversions/pom.xml +++ b/jackson-modules/jackson-conversions/pom.xml @@ -24,6 +24,11 @@ jackson-datatype-jsr310 ${jackson.version} + + com.fasterxml.jackson.core + jackson-databind + ${jackson.version} + diff --git a/jackson-modules/jackson-conversions/src/main/java/com/baeldung/jackson/map/Fruit.java b/jackson-modules/jackson-conversions/src/main/java/com/baeldung/jackson/map/Fruit.java new file mode 100644 index 000000000000..49e45f216183 --- /dev/null +++ b/jackson-modules/jackson-conversions/src/main/java/com/baeldung/jackson/map/Fruit.java @@ -0,0 +1,21 @@ +package com.baeldung.jackson.map; + +import com.fasterxml.jackson.annotation.JsonKey; +import com.fasterxml.jackson.annotation.JsonValue; + +public class Fruit { + public String variety; + + @JsonKey + public String name; + + public Fruit(String variety, String name) { + this.variety = variety; + this.name = name; + } + + @JsonValue + public String getFullName() { + return this.variety + " " + this.name; + } +} diff --git a/jackson-modules/jackson-conversions/src/test/java/com/baeldung/jackson/map/MapWithJsonKeyValueUnitTest.java b/jackson-modules/jackson-conversions/src/test/java/com/baeldung/jackson/map/MapWithJsonKeyValueUnitTest.java new file mode 100644 index 000000000000..87c425fe96b6 --- /dev/null +++ b/jackson-modules/jackson-conversions/src/test/java/com/baeldung/jackson/map/MapWithJsonKeyValueUnitTest.java @@ -0,0 +1,48 @@ +package com.baeldung.jackson.map; + +import java.util.HashMap; +import java.util.Map; + +import org.junit.Test; +import org.junit.jupiter.api.Assertions; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; + +public class MapWithJsonKeyValueUnitTest { + private static final Fruit FRUIT1 = new Fruit("Alphonso", "Mango"); + private static final Fruit FRUIT2 = new Fruit("Black", "Grapes"); + private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); + + @Test + public void givenObject_WhenSerialize_ThenUseJsonValueForSerialization() throws JsonProcessingException { + String serializedValueForFruit1 = OBJECT_MAPPER.writeValueAsString(FRUIT1); + Assertions.assertEquals("\"Alphonso Mango\"", serializedValueForFruit1); + String serializedValueForFruit2 = OBJECT_MAPPER.writeValueAsString(FRUIT2); + Assertions.assertEquals("\"Black Grapes\"", serializedValueForFruit2); + } + + @Test + public void givenMapWithObjectKeys_WhenSerialize_ThenUseJsonKeyForSerialization() throws JsonProcessingException { + // Given + Map selectionByFruit = new HashMap<>(); + selectionByFruit.put(FRUIT1, "Hagrid"); + selectionByFruit.put(FRUIT2, "Hercules"); + // When + String serializedValue = OBJECT_MAPPER.writeValueAsString(selectionByFruit); + // Then + Assertions.assertEquals("{\"Mango\":\"Hagrid\",\"Grapes\":\"Hercules\"}", serializedValue); + } + + @Test + public void givenMapWithObjectValues_WhenSerialize_ThenUseJsonValueForSerialization() throws JsonProcessingException { + // Given + Map selectionByPerson = new HashMap<>(); + selectionByPerson.put("Hagrid", FRUIT1); + selectionByPerson.put("Hercules", FRUIT2); + // When + String serializedValue = OBJECT_MAPPER.writeValueAsString(selectionByPerson); + // Then + Assertions.assertEquals("{\"Hagrid\":\"Alphonso Mango\",\"Hercules\":\"Black Grapes\"}", serializedValue); + } +} From 101fc1b42494618fd81eea50600e3750cb73efc2 Mon Sep 17 00:00:00 2001 From: timis1 <12120641+timis1@users.noreply.github.com> Date: Fri, 7 Apr 2023 04:53:12 +0300 Subject: [PATCH 032/390] JAVA-18167 Upgrade persistence-modules to JDK 11 (#13714) * JAVA-18167 Upgrade persistence-modules to JDK 11 (activejdbc and core-java-persistence) * JAVA-16167 Update pom.xml to include just the updated modules * JAVA-18167 Added vaadin because it looks that I removed * JAVA-18167 Migration deltaspike * JAVA-18167 Migration hbase module * JAVA-18167 Migration hibernate-mapping-2 * JAVA-18167 Migration hibernate-exceptions * JAVA-18167 Migration hibernate-jpa module * JAVA-18167 Migration hibernate-jpa change the name of User entity * JAVA-18167 Overwriting the version of slf4j and logback for hibernate-jpa * JAVA-18167 Migrate deltaspike back to jdk8 * JAVA-18167 Remove some modules that was added elsewhere * Revert "JAVA-18167 Migration deltaspike" This reverts commit 874b4ba2 * JAVA-18167 Comment failed module (it will be migrated later) --------- Co-authored-by: timis1 --- .gitignore | 1 + persistence-modules/activejdbc/pom.xml | 4 +- .../main/java/com/baeldung/ActiveJDBCApp.java | 4 +- .../core-java-persistence/pom.xml | 17 ++-- .../baeldung/jdbcmetadata/DatabaseConfig.java | 13 +-- .../jdbcmetadata/JdbcMetadataApplication.java | 7 +- .../jdbcrowset/DatabaseConfiguration.java | 4 - .../jdbcrowset/JdbcRowsetApplication.java | 18 ++--- .../jdbcrowset/JdbcRowSetLiveTest.java | 22 +++-- .../baeldung/spring/jdbc/JdbcLiveTest.java | 5 +- .../spring/jdbc/ResultSetLiveTest.java | 3 - persistence-modules/hbase/pom.xml | 2 +- .../baeldung/hbase/HbaseClientExample.java | 8 +- .../hibernate-exceptions/pom.xml | 8 +- .../entitynotfoundexception/Category.java | 2 +- .../entitynotfoundexception/Item.java | 5 +- .../entitynotfoundexception/User.java | 4 +- .../detachedentity/entity/Comment.java | 10 +-- .../exception/detachedentity/entity/Post.java | 8 +- .../lazyinitialization/entity/Role.java | 12 +-- .../lazyinitialization/entity/User.java | 16 ++-- .../persistentobject/entity/Article.java | 10 +-- .../persistentobject/entity/Author.java | 11 ++- .../persistentobject/entity/Book.java | 11 ++- .../transientobject/entity/Address.java | 20 ++--- .../transientobject/entity/Author.java | 17 ++-- .../transientobject/entity/Book.java | 17 ++-- .../transientobject/entity/Department.java | 16 ++-- .../transientobject/entity/Employee.java | 17 ++-- .../transientobject/entity/User.java | 23 +++--- ...ntityNotFoundExceptionIntegrationTest.java | 8 +- .../DetachedEntityUnitTest.java | 7 +- persistence-modules/hibernate-jpa/pom.xml | 12 +-- .../converters/PersonNameConverter.java | 4 +- .../hibernate/entities/Department.java | 2 +- .../hibernate/entities/DeptEmployee.java | 12 +-- .../entitymanager/getreference/Game.java | 4 +- .../entitymanager/getreference/Player.java | 6 +- .../jpabootstrap/application/Application.java | 5 +- .../config/HibernatePersistenceUnitInfo.java | 10 +-- .../config/JpaEntityManagerFactory.java | 6 +- .../hibernate/jpabootstrap/entities/User.java | 10 +-- .../service/EmployeeSearchServiceImpl.java | 14 ++-- .../onetoone/foreignkeybased/Address.java | 14 ++-- .../onetoone/foreignkeybased/User.java | 18 ++--- .../onetoone/jointablebased/Employee.java | 20 ++--- .../onetoone/jointablebased/WorkStation.java | 14 ++-- .../onetoone/sharedkeybased/Address.java | 14 ++-- .../onetoone/sharedkeybased/User.java | 18 ++--- .../OptimisticLockingCourse.java | 2 +- .../OptimisticLockingStudent.java | 2 +- .../hibernate/pessimisticlocking/Address.java | 2 +- .../pessimisticlocking/Customer.java | 2 +- .../pessimisticlocking/Individual.java | 8 +- .../PessimisticLockingCourse.java | 2 +- .../PessimisticLockingEmployee.java | 2 +- .../PessimisticLockingStudent.java | 2 +- .../com/baeldung/hibernate/pojo/Movie.java | 6 +- .../com/baeldung/hibernate/pojo/Person.java | 8 +- .../com/baeldung/hibernate/pojo/Post.java | 8 +- .../com/baeldung/hibernate/pojo/Student.java | 8 +- .../hibernate/serializable/Account.java | 8 +- .../hibernate/serializable/Email.java | 4 +- .../baeldung/hibernate/serializable/User.java | 4 +- .../hibernate/serializable/UserId.java | 2 +- .../persistencecontext/entity/User.java | 6 +- ...ExtendedPersistenceContextUserService.java | 12 +-- ...ansctionPersistenceContextUserService.java | 12 +-- .../main/resources/META-INF/persistence.xml | 81 ++++++++++++------- .../GetReferenceH2IntegrationTest.java | 44 +++++----- .../GetReferenceMySQLManualTest.java | 6 +- .../GetReferencePostgreSQLManualTest.java | 6 +- .../EmployeeSearchServiceIntegrationTest.java | 4 +- .../OptimisticLockingIntegrationTest.java | 6 +- ...asicPessimisticLockingIntegrationTest.java | 6 +- .../PessimisticLockScopesIntegrationTest.java | 12 +-- .../JPASerializableIntegrationTest.java | 11 ++- .../TransactionIntegrationTest.java | 2 - .../PersistenceContextIntegrationTest.java | 4 +- .../hibernate-mapping-2/pom.xml | 24 +----- .../baeldung/manytomany/model/Employee.java | 20 ++--- .../baeldung/manytomany/model/Project.java | 12 +-- persistence-modules/pom.xml | 55 +++++++------ pom.xml | 13 ++- 84 files changed, 441 insertions(+), 478 deletions(-) diff --git a/.gitignore b/.gitignore index d68ab983497a..7725bf202ed4 100644 --- a/.gitignore +++ b/.gitignore @@ -89,6 +89,7 @@ spring-soap/src/main/java/com/baeldung/springsoap/gen/ /report-*.json transaction.log *-shell.log +customers.xml apache-cxf/cxf-aegis/baeldung.xml testing-modules/report-*.json diff --git a/persistence-modules/activejdbc/pom.xml b/persistence-modules/activejdbc/pom.xml index 5fdf27a67900..a661fc3abb52 100644 --- a/persistence-modules/activejdbc/pom.xml +++ b/persistence-modules/activejdbc/pom.xml @@ -74,9 +74,9 @@ - 2.0 + 3.4-j11 development.test,development - 5.1.34 + 8.0.32 \ No newline at end of file diff --git a/persistence-modules/activejdbc/src/main/java/com/baeldung/ActiveJDBCApp.java b/persistence-modules/activejdbc/src/main/java/com/baeldung/ActiveJDBCApp.java index 8906d3e759f3..ea600b972171 100644 --- a/persistence-modules/activejdbc/src/main/java/com/baeldung/ActiveJDBCApp.java +++ b/persistence-modules/activejdbc/src/main/java/com/baeldung/ActiveJDBCApp.java @@ -4,6 +4,7 @@ import com.baeldung.model.Employee; import com.baeldung.model.Role; import org.javalite.activejdbc.Base; +import org.javalite.activejdbc.DB; import org.javalite.activejdbc.LazyList; import org.javalite.activejdbc.Model; @@ -11,8 +12,7 @@ public class ActiveJDBCApp { public static void main( String[] args ) { - try { - Base.open(); + try(final DB open = Base.open()) { ActiveJDBCApp app = new ActiveJDBCApp(); app.create(); app.update(); diff --git a/persistence-modules/core-java-persistence/pom.xml b/persistence-modules/core-java-persistence/pom.xml index 5cc1df483fd5..e8add07fbf15 100644 --- a/persistence-modules/core-java-persistence/pom.xml +++ b/persistence-modules/core-java-persistence/pom.xml @@ -52,14 +52,21 @@ spring-boot-starter ${springframework.boot.spring-boot-starter.version} + + mysql + mysql-connector-java + ${mysql-connector.version} + runtime + - 2.4.0 - 3.2.0 - 0.9.5.2 - 1.5.8.RELEASE - 4.3.4.RELEASE + 2.9.0 + 5.0.1 + 0.9.5.5 + 3.0.4 + 6.0.6 + 8.0.32 \ No newline at end of file diff --git a/persistence-modules/core-java-persistence/src/main/java/com/baeldung/jdbcmetadata/DatabaseConfig.java b/persistence-modules/core-java-persistence/src/main/java/com/baeldung/jdbcmetadata/DatabaseConfig.java index 8ad689041ec2..44cfc75a2b23 100644 --- a/persistence-modules/core-java-persistence/src/main/java/com/baeldung/jdbcmetadata/DatabaseConfig.java +++ b/persistence-modules/core-java-persistence/src/main/java/com/baeldung/jdbcmetadata/DatabaseConfig.java @@ -1,13 +1,14 @@ package com.baeldung.jdbcmetadata; -import org.apache.log4j.Logger; - import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + public class DatabaseConfig { - private static final Logger LOG = Logger.getLogger(DatabaseConfig.class); + private static final Logger LOG = LoggerFactory.getLogger(DatabaseConfig.class); private Connection connection; @@ -17,7 +18,7 @@ public DatabaseConfig() { String url = "jdbc:h2:mem:testdb"; connection = DriverManager.getConnection(url, "sa", ""); } catch (ClassNotFoundException | SQLException e) { - LOG.error(e); + LOG.error(e.getMessage()); } } @@ -35,7 +36,7 @@ private void createTables() { connection.createStatement().executeUpdate("create table CUSTOMER (ID int primary key auto_increment, NAME VARCHAR(45))"); connection.createStatement().executeUpdate("create table CUST_ADDRESS (ID VARCHAR(36), CUST_ID int, ADDRESS VARCHAR(45), FOREIGN KEY (CUST_ID) REFERENCES CUSTOMER(ID))"); } catch (SQLException e) { - LOG.error(e); + LOG.error(e.getMessage()); } } @@ -43,7 +44,7 @@ private void createViews() { try { connection.createStatement().executeUpdate("CREATE VIEW CUSTOMER_VIEW AS SELECT * FROM CUSTOMER"); } catch (SQLException e) { - LOG.error(e); + LOG.error(e.getMessage()); } } } diff --git a/persistence-modules/core-java-persistence/src/main/java/com/baeldung/jdbcmetadata/JdbcMetadataApplication.java b/persistence-modules/core-java-persistence/src/main/java/com/baeldung/jdbcmetadata/JdbcMetadataApplication.java index 591a14f3b5df..f85f2273814c 100644 --- a/persistence-modules/core-java-persistence/src/main/java/com/baeldung/jdbcmetadata/JdbcMetadataApplication.java +++ b/persistence-modules/core-java-persistence/src/main/java/com/baeldung/jdbcmetadata/JdbcMetadataApplication.java @@ -1,12 +1,13 @@ package com.baeldung.jdbcmetadata; -import org.apache.log4j.Logger; - import java.sql.SQLException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + public class JdbcMetadataApplication { - private static final Logger LOG = Logger.getLogger(JdbcMetadataApplication.class); + private static final Logger LOG = LoggerFactory.getLogger(JdbcMetadataApplication.class); public static void main(String[] args) { DatabaseConfig databaseConfig = new DatabaseConfig(); diff --git a/persistence-modules/core-java-persistence/src/main/java/com/baeldung/jdbcrowset/DatabaseConfiguration.java b/persistence-modules/core-java-persistence/src/main/java/com/baeldung/jdbcrowset/DatabaseConfiguration.java index 9cfcff468e96..a53c82d3da24 100644 --- a/persistence-modules/core-java-persistence/src/main/java/com/baeldung/jdbcrowset/DatabaseConfiguration.java +++ b/persistence-modules/core-java-persistence/src/main/java/com/baeldung/jdbcrowset/DatabaseConfiguration.java @@ -5,10 +5,6 @@ import java.sql.SQLException; import java.sql.Statement; -import javax.sql.rowset.JdbcRowSet; -import javax.sql.rowset.RowSetFactory; -import javax.sql.rowset.RowSetProvider; - import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.context.annotation.Configuration; diff --git a/persistence-modules/core-java-persistence/src/main/java/com/baeldung/jdbcrowset/JdbcRowsetApplication.java b/persistence-modules/core-java-persistence/src/main/java/com/baeldung/jdbcrowset/JdbcRowsetApplication.java index 72c462ac428c..163b3a3b589d 100644 --- a/persistence-modules/core-java-persistence/src/main/java/com/baeldung/jdbcrowset/JdbcRowsetApplication.java +++ b/persistence-modules/core-java-persistence/src/main/java/com/baeldung/jdbcrowset/JdbcRowsetApplication.java @@ -7,8 +7,6 @@ import java.sql.SQLException; import java.sql.Statement; -import com.sun.rowset.*; - import javax.sql.rowset.CachedRowSet; import javax.sql.rowset.FilteredRowSet; import javax.sql.rowset.JdbcRowSet; @@ -25,7 +23,7 @@ public class JdbcRowsetApplication { public static void main(String[] args) throws Exception { SpringApplication.run(JdbcRowsetApplication.class, args); - Statement stmt = null; + Statement stmt; try { Connection conn = DatabaseConfiguration.geth2Connection(); @@ -41,8 +39,7 @@ public static void main(String[] args) throws Exception { DatabaseConfiguration.initDatabase(stmt); // JdbcRowSet Example String sql = "SELECT * FROM customers"; - JdbcRowSet jdbcRS; - jdbcRS = new JdbcRowSetImpl(conn); + JdbcRowSet jdbcRS = RowSetProvider.newFactory().createJdbcRowSet(); jdbcRS.setType(ResultSet.TYPE_SCROLL_INSENSITIVE); jdbcRS.setCommand(sql); jdbcRS.execute(); @@ -58,7 +55,8 @@ public static void main(String[] args) throws Exception { String username = "sa"; String password = ""; String url = "jdbc:h2:mem:testdb"; - CachedRowSet crs = new CachedRowSetImpl(); + RowSetFactory aFactory = RowSetProvider.newFactory(); + CachedRowSet crs = aFactory.createCachedRowSet(); crs.setUsername(username); crs.setPassword(password); crs.setUrl(url); @@ -74,7 +72,7 @@ public static void main(String[] args) throws Exception { } // WebRowSet example - WebRowSet wrs = new WebRowSetImpl(); + WebRowSet wrs = RowSetProvider.newFactory().createWebRowSet(); wrs.setUsername(username); wrs.setPassword(password); wrs.setUrl(url); @@ -84,14 +82,14 @@ public static void main(String[] args) throws Exception { wrs.writeXml(ostream); // JoinRowSet example - CachedRowSetImpl customers = new CachedRowSetImpl(); + CachedRowSet customers = aFactory.createCachedRowSet(); customers.setUsername(username); customers.setPassword(password); customers.setUrl(url); customers.setCommand(sql); customers.execute(); - CachedRowSetImpl associates = new CachedRowSetImpl(); + CachedRowSet associates = aFactory.createCachedRowSet(); associates.setUsername(username); associates.setPassword(password); associates.setUrl(url); @@ -99,7 +97,7 @@ public static void main(String[] args) throws Exception { associates.setCommand(associatesSQL); associates.execute(); - JoinRowSet jrs = new JoinRowSetImpl(); + JoinRowSet jrs = RowSetProvider.newFactory().createJoinRowSet(); final String ID = "id"; final String NAME = "name"; jrs.addRowSet(customers, ID); diff --git a/persistence-modules/core-java-persistence/src/test/java/com/baeldung/jdbcrowset/JdbcRowSetLiveTest.java b/persistence-modules/core-java-persistence/src/test/java/com/baeldung/jdbcrowset/JdbcRowSetLiveTest.java index ebfb4df102e5..2b2b35c42394 100644 --- a/persistence-modules/core-java-persistence/src/test/java/com/baeldung/jdbcrowset/JdbcRowSetLiveTest.java +++ b/persistence-modules/core-java-persistence/src/test/java/com/baeldung/jdbcrowset/JdbcRowSetLiveTest.java @@ -19,11 +19,6 @@ import org.junit.Before; import org.junit.Test; -import com.sun.rowset.CachedRowSetImpl; -import com.sun.rowset.JdbcRowSetImpl; -import com.sun.rowset.JoinRowSetImpl; -import com.sun.rowset.WebRowSetImpl; - public class JdbcRowSetLiveTest { Statement stmt = null; String username = "sa"; @@ -51,9 +46,10 @@ public void setup() throws Exception { public void createJdbcRowSet_SelectCustomers_ThenCorrect() throws Exception { String sql = "SELECT * FROM customers"; - JdbcRowSet jdbcRS; - Connection conn = DatabaseConfiguration.geth2Connection(); - jdbcRS = new JdbcRowSetImpl(conn); + JdbcRowSet jdbcRS = RowSetProvider.newFactory().createJdbcRowSet(); + jdbcRS.setUrl("jdbc:h2:mem:testdb"); + jdbcRS.setUsername("sa"); + jdbcRS.setPassword(""); jdbcRS.setType(ResultSet.TYPE_SCROLL_INSENSITIVE); jdbcRS.setCommand(sql); jdbcRS.execute(); @@ -71,7 +67,7 @@ public void createJdbcRowSet_SelectCustomers_ThenCorrect() throws Exception { @Test public void createCachedRowSet_DeleteRecord_ThenCorrect() throws Exception { - CachedRowSet crs = new CachedRowSetImpl(); + CachedRowSet crs = RowSetProvider.newFactory().createCachedRowSet(); crs.setUsername(username); crs.setPassword(password); crs.setUrl(url); @@ -91,7 +87,7 @@ public void createCachedRowSet_DeleteRecord_ThenCorrect() throws Exception { @Test public void createWebRowSet_SelectCustomers_WritetoXML_ThenCorrect() throws SQLException, IOException { - WebRowSet wrs = new WebRowSetImpl(); + WebRowSet wrs = RowSetProvider.newFactory().createWebRowSet(); wrs.setUsername(username); wrs.setPassword(password); wrs.setUrl(url); @@ -105,14 +101,14 @@ public void createWebRowSet_SelectCustomers_WritetoXML_ThenCorrect() throws SQLE @Test public void createCachedRowSets_DoJoinRowSet_ThenCorrect() throws Exception { - CachedRowSetImpl customers = new CachedRowSetImpl(); + CachedRowSet customers = RowSetProvider.newFactory().createCachedRowSet(); customers.setUsername(username); customers.setPassword(password); customers.setUrl(url); customers.setCommand(sql); customers.execute(); - CachedRowSetImpl associates = new CachedRowSetImpl(); + CachedRowSet associates = RowSetProvider.newFactory().createCachedRowSet(); associates.setUsername(username); associates.setPassword(password); associates.setUrl(url); @@ -120,7 +116,7 @@ public void createCachedRowSets_DoJoinRowSet_ThenCorrect() throws Exception { associates.setCommand(associatesSQL); associates.execute(); - JoinRowSet jrs = new JoinRowSetImpl(); + JoinRowSet jrs = RowSetProvider.newFactory().createJoinRowSet(); final String ID = "id"; final String NAME = "name"; jrs.addRowSet(customers, ID); diff --git a/persistence-modules/core-java-persistence/src/test/java/com/baeldung/spring/jdbc/JdbcLiveTest.java b/persistence-modules/core-java-persistence/src/test/java/com/baeldung/spring/jdbc/JdbcLiveTest.java index c13f94f12afd..fe00ca28dcb5 100644 --- a/persistence-modules/core-java-persistence/src/test/java/com/baeldung/spring/jdbc/JdbcLiveTest.java +++ b/persistence-modules/core-java-persistence/src/test/java/com/baeldung/spring/jdbc/JdbcLiveTest.java @@ -1,9 +1,10 @@ package com.baeldung.spring.jdbc; -import org.apache.log4j.Logger; import org.junit.After; import org.junit.Before; import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.sql.CallableStatement; import java.sql.Connection; @@ -24,7 +25,7 @@ public class JdbcLiveTest { - private static final Logger LOG = Logger.getLogger(JdbcLiveTest.class); + private static final Logger LOG = LoggerFactory.getLogger(JdbcLiveTest.class); private Connection con; diff --git a/persistence-modules/core-java-persistence/src/test/java/com/baeldung/spring/jdbc/ResultSetLiveTest.java b/persistence-modules/core-java-persistence/src/test/java/com/baeldung/spring/jdbc/ResultSetLiveTest.java index 853e78a68d29..c77e314141b4 100644 --- a/persistence-modules/core-java-persistence/src/test/java/com/baeldung/spring/jdbc/ResultSetLiveTest.java +++ b/persistence-modules/core-java-persistence/src/test/java/com/baeldung/spring/jdbc/ResultSetLiveTest.java @@ -13,7 +13,6 @@ import java.util.ArrayList; import java.util.List; -import org.apache.log4j.Logger; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.FixMethodOrder; @@ -25,8 +24,6 @@ @FixMethodOrder(MethodSorters.NAME_ASCENDING) public class ResultSetLiveTest { - private static final Logger logger = Logger.getLogger(ResultSetLiveTest.class); - private final Employee expectedEmployee1 = new Employee(1, "John", 1000.0, "Developer"); private final Employee updatedEmployee1 = new Employee(1, "John", 1100.0, "Developer"); diff --git a/persistence-modules/hbase/pom.xml b/persistence-modules/hbase/pom.xml index e38b73e137b3..3e6cfe27be5b 100644 --- a/persistence-modules/hbase/pom.xml +++ b/persistence-modules/hbase/pom.xml @@ -33,7 +33,7 @@ - 1.3.1 + 2.5.3 \ No newline at end of file diff --git a/persistence-modules/hbase/src/main/java/com/baeldung/hbase/HbaseClientExample.java b/persistence-modules/hbase/src/main/java/com/baeldung/hbase/HbaseClientExample.java index 5546f15e365e..3a137a60198f 100644 --- a/persistence-modules/hbase/src/main/java/com/baeldung/hbase/HbaseClientExample.java +++ b/persistence-modules/hbase/src/main/java/com/baeldung/hbase/HbaseClientExample.java @@ -1,7 +1,5 @@ package com.baeldung.hbase; - -import com.google.protobuf.ServiceException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.hbase.HBaseConfiguration; @@ -13,11 +11,11 @@ //install hbase locally & hbase master start public class HbaseClientExample { - public static void main(String[] args) throws IOException, ServiceException { + public static void main(String[] args) throws IOException { new HbaseClientExample().connect(); } - private void connect() throws IOException, ServiceException { + private void connect() throws IOException { Configuration config = HBaseConfiguration.create(); String path = this.getClass().getClassLoader().getResource("hbase-site.xml").getPath(); @@ -25,7 +23,7 @@ private void connect() throws IOException, ServiceException { config.addResource(new Path(path)); try { - HBaseAdmin.checkHBaseAvailable(config); + HBaseAdmin.available(config); } catch (MasterNotRunningException e) { System.out.println("HBase is not running." + e.getMessage()); return; diff --git a/persistence-modules/hibernate-exceptions/pom.xml b/persistence-modules/hibernate-exceptions/pom.xml index 4bef688715b9..670ff4cdb8eb 100644 --- a/persistence-modules/hibernate-exceptions/pom.xml +++ b/persistence-modules/hibernate-exceptions/pom.xml @@ -24,11 +24,6 @@ hibernate-core ${hibernate.version} - - javax.xml.bind - jaxb-api - ${jaxb.version} - com.h2database h2 @@ -37,8 +32,7 @@ - 2.4.0 - 2.3.0 + 2.7.1 2.1.214 diff --git a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/entitynotfoundexception/Category.java b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/entitynotfoundexception/Category.java index 25d31d50c77b..cab06ae9cf0a 100644 --- a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/entitynotfoundexception/Category.java +++ b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/entitynotfoundexception/Category.java @@ -1,6 +1,6 @@ package com.baeldung.hibernate.entitynotfoundexception; -import javax.persistence.*; +import jakarta.persistence.*; import java.io.Serializable; import java.util.ArrayList; import java.util.List; diff --git a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/entitynotfoundexception/Item.java b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/entitynotfoundexception/Item.java index 3abed00eb85c..2d07178aafd0 100644 --- a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/entitynotfoundexception/Item.java +++ b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/entitynotfoundexception/Item.java @@ -1,9 +1,6 @@ package com.baeldung.hibernate.entitynotfoundexception; -import org.hibernate.annotations.NotFound; -import org.hibernate.annotations.NotFoundAction; - -import javax.persistence.*; +import jakarta.persistence.*; import java.io.Serializable; @Entity diff --git a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/entitynotfoundexception/User.java b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/entitynotfoundexception/User.java index d89047195c74..8351c5df9687 100644 --- a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/entitynotfoundexception/User.java +++ b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/entitynotfoundexception/User.java @@ -1,7 +1,7 @@ package com.baeldung.hibernate.entitynotfoundexception; -import javax.persistence.Entity; -import javax.persistence.Id; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; @Entity public class User { diff --git a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/detachedentity/entity/Comment.java b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/detachedentity/entity/Comment.java index 4a3e9739e2a1..e73adfef6b6c 100644 --- a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/detachedentity/entity/Comment.java +++ b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/detachedentity/entity/Comment.java @@ -1,10 +1,10 @@ package com.baeldung.hibernate.exception.detachedentity.entity; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.ManyToOne; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.ManyToOne; @Entity public class Comment { diff --git a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/detachedentity/entity/Post.java b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/detachedentity/entity/Post.java index 7d95b4194809..155a1bfe6907 100644 --- a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/detachedentity/entity/Post.java +++ b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/detachedentity/entity/Post.java @@ -1,9 +1,9 @@ package com.baeldung.hibernate.exception.detachedentity.entity; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; @Entity public class Post { diff --git a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/lazyinitialization/entity/Role.java b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/lazyinitialization/entity/Role.java index c15e674c52c2..5e613004a380 100644 --- a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/lazyinitialization/entity/Role.java +++ b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/lazyinitialization/entity/Role.java @@ -1,11 +1,11 @@ package com.baeldung.hibernate.exception.lazyinitialization.entity; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.Table; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.Table; @Entity @Table(name = "role") diff --git a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/lazyinitialization/entity/User.java b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/lazyinitialization/entity/User.java index 5bd7e00801dd..ffae05c0a060 100644 --- a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/lazyinitialization/entity/User.java +++ b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/lazyinitialization/entity/User.java @@ -3,14 +3,14 @@ import java.util.HashSet; import java.util.Set; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.OneToMany; -import javax.persistence.Table; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.OneToMany; +import jakarta.persistence.Table; @Entity @Table(name = "user") diff --git a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/persistentobject/entity/Article.java b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/persistentobject/entity/Article.java index 3c9c7c5b31a5..eb697334ae06 100644 --- a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/persistentobject/entity/Article.java +++ b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/persistentobject/entity/Article.java @@ -1,10 +1,10 @@ package com.baeldung.hibernate.exception.persistentobject.entity; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.ManyToOne; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.ManyToOne; @Entity public class Article { diff --git a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/persistentobject/entity/Author.java b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/persistentobject/entity/Author.java index fa6aaa9abe33..f8dcb82b7e52 100644 --- a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/persistentobject/entity/Author.java +++ b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/persistentobject/entity/Author.java @@ -2,12 +2,11 @@ import java.util.List; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.OneToMany; -import javax.persistence.OneToOne; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.OneToMany; import org.hibernate.annotations.Cascade; import org.hibernate.annotations.CascadeType; diff --git a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/persistentobject/entity/Book.java b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/persistentobject/entity/Book.java index 342da27c77f5..986c7f061f8e 100644 --- a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/persistentobject/entity/Book.java +++ b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/persistentobject/entity/Book.java @@ -1,11 +1,10 @@ package com.baeldung.hibernate.exception.persistentobject.entity; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.JoinColumn; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; @Entity public class Book { diff --git a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/transientobject/entity/Address.java b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/transientobject/entity/Address.java index e450fc3c182e..8d1208e03603 100644 --- a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/transientobject/entity/Address.java +++ b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/transientobject/entity/Address.java @@ -1,18 +1,12 @@ package com.baeldung.hibernate.exception.transientobject.entity; -import java.io.Serializable; -import java.util.HashSet; -import java.util.Set; - -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.OneToMany; -import javax.persistence.OneToOne; -import javax.persistence.Table; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.OneToOne; +import jakarta.persistence.Table; @Entity @Table(name = "address") diff --git a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/transientobject/entity/Author.java b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/transientobject/entity/Author.java index f1a88daa360b..271e810002c0 100644 --- a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/transientobject/entity/Author.java +++ b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/transientobject/entity/Author.java @@ -3,15 +3,14 @@ import org.hibernate.annotations.Cascade; import org.hibernate.annotations.CascadeType; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToMany; -import javax.persistence.ManyToOne; -import javax.persistence.Table; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToMany; +import jakarta.persistence.Table; import java.util.HashSet; import java.util.Set; diff --git a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/transientobject/entity/Book.java b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/transientobject/entity/Book.java index 91728430eace..0734cccff118 100644 --- a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/transientobject/entity/Book.java +++ b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/transientobject/entity/Book.java @@ -4,15 +4,14 @@ import org.hibernate.annotations.Cascade; import org.hibernate.annotations.CascadeType; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToMany; -import javax.persistence.OneToMany; -import javax.persistence.Table; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToMany; +import jakarta.persistence.Table; import java.util.HashSet; import java.util.Set; diff --git a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/transientobject/entity/Department.java b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/transientobject/entity/Department.java index 4b8fa699642b..5bd9a109ab11 100644 --- a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/transientobject/entity/Department.java +++ b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/transientobject/entity/Department.java @@ -1,13 +1,13 @@ package com.baeldung.hibernate.exception.transientobject.entity; -import javax.persistence.CascadeType; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.OneToMany; -import javax.persistence.Table; +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.OneToMany; +import jakarta.persistence.Table; import java.util.HashSet; import java.util.Set; diff --git a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/transientobject/entity/Employee.java b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/transientobject/entity/Employee.java index 56443cce70ef..6a2ec8b9388b 100644 --- a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/transientobject/entity/Employee.java +++ b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/transientobject/entity/Employee.java @@ -4,15 +4,14 @@ import org.hibernate.annotations.Cascade; import org.hibernate.annotations.CascadeType; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.Table; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.Table; @Entity @Table(name = "employee") diff --git a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/transientobject/entity/User.java b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/transientobject/entity/User.java index eff1a88b513b..cf56afd8b9da 100644 --- a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/transientobject/entity/User.java +++ b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/transientobject/entity/User.java @@ -1,19 +1,14 @@ package com.baeldung.hibernate.exception.transientobject.entity; -import java.io.Serializable; -import java.util.HashSet; -import java.util.Set; - -import javax.persistence.CascadeType; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.OneToMany; -import javax.persistence.OneToOne; -import javax.persistence.Table; +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.OneToOne; +import jakarta.persistence.Table; @Entity @Table(name = "user") diff --git a/persistence-modules/hibernate-exceptions/src/test/java/com/baeldung/hibernate/entitynotfoundexception/EntityNotFoundExceptionIntegrationTest.java b/persistence-modules/hibernate-exceptions/src/test/java/com/baeldung/hibernate/entitynotfoundexception/EntityNotFoundExceptionIntegrationTest.java index bcb4e3eb9515..f339afd536de 100644 --- a/persistence-modules/hibernate-exceptions/src/test/java/com/baeldung/hibernate/entitynotfoundexception/EntityNotFoundExceptionIntegrationTest.java +++ b/persistence-modules/hibernate-exceptions/src/test/java/com/baeldung/hibernate/entitynotfoundexception/EntityNotFoundExceptionIntegrationTest.java @@ -4,10 +4,10 @@ import org.junit.Before; import org.junit.Test; -import javax.persistence.EntityManager; -import javax.persistence.EntityManagerFactory; -import javax.persistence.EntityNotFoundException; -import javax.persistence.Persistence; +import jakarta.persistence.EntityManager; +import jakarta.persistence.EntityManagerFactory; +import jakarta.persistence.EntityNotFoundException; +import jakarta.persistence.Persistence; import java.io.IOException; public class EntityNotFoundExceptionIntegrationTest { diff --git a/persistence-modules/hibernate-exceptions/src/test/java/com/baeldung/hibernate/exception/detachedentity/DetachedEntityUnitTest.java b/persistence-modules/hibernate-exceptions/src/test/java/com/baeldung/hibernate/exception/detachedentity/DetachedEntityUnitTest.java index afb0efae77ec..c10b319319c2 100644 --- a/persistence-modules/hibernate-exceptions/src/test/java/com/baeldung/hibernate/exception/detachedentity/DetachedEntityUnitTest.java +++ b/persistence-modules/hibernate-exceptions/src/test/java/com/baeldung/hibernate/exception/detachedentity/DetachedEntityUnitTest.java @@ -3,13 +3,12 @@ import com.baeldung.hibernate.exception.detachedentity.entity.Comment; import com.baeldung.hibernate.exception.detachedentity.entity.Post; -import org.assertj.core.api.Assertions; import org.hibernate.Session; import org.junit.After; import org.junit.Before; import org.junit.Test; -import javax.persistence.PersistenceException; +import jakarta.persistence.PersistenceException; import java.util.List; @@ -43,7 +42,7 @@ public void givenDetachedPost_whenTryingToPersist_thenThrowException() { assertThatThrownBy(() -> session.persist(detachedPost)) .isInstanceOf(PersistenceException.class) - .hasMessageContaining("org.hibernate.PersistentObjectException: detached entity passed to persist"); + .hasMessageContaining("`org.hibernate.PersistentObjectException` to JPA `PersistenceException` : detached entity passed to persist"); } @Test @@ -72,7 +71,7 @@ public void givenDetachedPost_whenPersistingNewCommentWithIt_thenThrowException( assertThatThrownBy(() -> session.persist(detachedPost)) .isInstanceOf(PersistenceException.class) - .hasMessageContaining("org.hibernate.PersistentObjectException: detached entity passed to persist"); + .hasMessageContaining("`org.hibernate.PersistentObjectException` to JPA `PersistenceException` : detached entity passed to persist"); } @Test diff --git a/persistence-modules/hibernate-jpa/pom.xml b/persistence-modules/hibernate-jpa/pom.xml index f742290884fd..086e487eb906 100644 --- a/persistence-modules/hibernate-jpa/pom.xml +++ b/persistence-modules/hibernate-jpa/pom.xml @@ -83,11 +83,13 @@ - 5.3.7.Final - 8.0.13 - 2.2.3 - 2.1.7.RELEASE - 1.4.200 + 6.1.7.Final + 8.0.32 + 2.6.0 + 3.0.4 + 2.1.214 + 2.0.7 + 1.4.6 \ No newline at end of file diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/converters/PersonNameConverter.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/converters/PersonNameConverter.java index 506e67498463..ec0e2f2e2cd7 100644 --- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/converters/PersonNameConverter.java +++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/converters/PersonNameConverter.java @@ -1,7 +1,7 @@ package com.baeldung.hibernate.converters; -import javax.persistence.AttributeConverter; -import javax.persistence.Converter; +import jakarta.persistence.AttributeConverter; +import jakarta.persistence.Converter; import com.baeldung.hibernate.pojo.PersonName; diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/entities/Department.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/entities/Department.java index ff94f4f849a1..39e69a2b1c0f 100644 --- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/entities/Department.java +++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/entities/Department.java @@ -2,7 +2,7 @@ import java.util.List; -import javax.persistence.*; +import jakarta.persistence.*; @Entity public class Department { diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/entities/DeptEmployee.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/entities/DeptEmployee.java index 6510e706503e..38519644c5d8 100644 --- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/entities/DeptEmployee.java +++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/entities/DeptEmployee.java @@ -1,13 +1,13 @@ package com.baeldung.hibernate.entities; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.ManyToOne; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.ManyToOne; @org.hibernate.annotations.NamedQueries({ @org.hibernate.annotations.NamedQuery(name = "DeptEmployee_FindByEmployeeNumber", query = "from DeptEmployee where employeeNumber = :employeeNo"), - @org.hibernate.annotations.NamedQuery(name = "DeptEmployee_FindAllByDesgination", query = "from DeptEmployee where designation = :designation"), + @org.hibernate.annotations.NamedQuery(name = "DeptEmployee_FindAllByDesgination", query = "from DeptEmployee where employeeNumber = :employeeNumber"), @org.hibernate.annotations.NamedQuery(name = "DeptEmployee_UpdateEmployeeDepartment", query = "Update DeptEmployee set department = :newDepartment where employeeNumber = :employeeNo"), @org.hibernate.annotations.NamedQuery(name = "DeptEmployee_FindAllByDepartment", query = "from DeptEmployee where department = :department", timeout = 1, fetchSize = 10) }) @org.hibernate.annotations.NamedNativeQueries({ @org.hibernate.annotations.NamedNativeQuery(name = "DeptEmployee_FindByEmployeeName", query = "select * from deptemployee emp where name=:name", resultClass = DeptEmployee.class), diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/entitymanager/getreference/Game.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/entitymanager/getreference/Game.java index 1de8de032764..5a6f9c7c6c3c 100644 --- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/entitymanager/getreference/Game.java +++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/entitymanager/getreference/Game.java @@ -1,7 +1,7 @@ package com.baeldung.hibernate.entitymanager.getreference; -import javax.persistence.Entity; -import javax.persistence.Id; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; @Entity public class Game { diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/entitymanager/getreference/Player.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/entitymanager/getreference/Player.java index 459a3a00adcd..6e62aeda4548 100644 --- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/entitymanager/getreference/Player.java +++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/entitymanager/getreference/Player.java @@ -1,8 +1,8 @@ package com.baeldung.hibernate.entitymanager.getreference; -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.ManyToOne; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.ManyToOne; @Entity public class Player { diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/jpabootstrap/application/Application.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/jpabootstrap/application/Application.java index b547a60b06be..6263df4237f8 100644 --- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/jpabootstrap/application/Application.java +++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/jpabootstrap/application/Application.java @@ -2,7 +2,7 @@ import com.baeldung.hibernate.jpabootstrap.config.JpaEntityManagerFactory; import com.baeldung.hibernate.jpabootstrap.entities.User; -import javax.persistence.EntityManager; +import jakarta.persistence.EntityManager; public class Application { @@ -24,8 +24,7 @@ public static void main(String[] args) { } private static class EntityManagerHolder { - private static final EntityManager ENTITY_MANAGER = new JpaEntityManagerFactory( - new Class[]{User.class}).getEntityManager(); + private static final EntityManager ENTITY_MANAGER = new JpaEntityManagerFactory(new Class[]{User.class}).getEntityManager(); } public static EntityManager getJpaEntityManager() { diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/jpabootstrap/config/HibernatePersistenceUnitInfo.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/jpabootstrap/config/HibernatePersistenceUnitInfo.java index 3852b44b6449..af01ea630c2f 100644 --- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/jpabootstrap/config/HibernatePersistenceUnitInfo.java +++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/jpabootstrap/config/HibernatePersistenceUnitInfo.java @@ -6,11 +6,11 @@ import java.util.List; import java.util.Properties; import javax.sql.DataSource; -import javax.persistence.SharedCacheMode; -import javax.persistence.ValidationMode; -import javax.persistence.spi.ClassTransformer; -import javax.persistence.spi.PersistenceUnitInfo; -import javax.persistence.spi.PersistenceUnitTransactionType; +import jakarta.persistence.SharedCacheMode; +import jakarta.persistence.ValidationMode; +import jakarta.persistence.spi.ClassTransformer; +import jakarta.persistence.spi.PersistenceUnitInfo; +import jakarta.persistence.spi.PersistenceUnitTransactionType; import org.hibernate.jpa.HibernatePersistenceProvider; public class HibernatePersistenceUnitInfo implements PersistenceUnitInfo { diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/jpabootstrap/config/JpaEntityManagerFactory.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/jpabootstrap/config/JpaEntityManagerFactory.java index bc1932af6f73..e115727d673a 100644 --- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/jpabootstrap/config/JpaEntityManagerFactory.java +++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/jpabootstrap/config/JpaEntityManagerFactory.java @@ -7,10 +7,10 @@ import java.util.Map; import java.util.Properties; import java.util.stream.Collectors; -import javax.persistence.EntityManager; +import jakarta.persistence.EntityManager; import javax.sql.DataSource; -import javax.persistence.EntityManagerFactory; -import javax.persistence.spi.PersistenceUnitInfo; +import jakarta.persistence.EntityManagerFactory; +import jakarta.persistence.spi.PersistenceUnitInfo; import org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl; import org.hibernate.jpa.boot.internal.PersistenceUnitInfoDescriptor; diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/jpabootstrap/entities/User.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/jpabootstrap/entities/User.java index 86ca1dfa19ab..43c99f8d96ea 100644 --- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/jpabootstrap/entities/User.java +++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/jpabootstrap/entities/User.java @@ -1,10 +1,10 @@ package com.baeldung.hibernate.jpabootstrap.entities; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.Table; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.Table; @Entity @Table(name = "users") diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/jpacriteriabuilder/service/EmployeeSearchServiceImpl.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/jpacriteriabuilder/service/EmployeeSearchServiceImpl.java index e79168a4519b..9a3216b5eb61 100644 --- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/jpacriteriabuilder/service/EmployeeSearchServiceImpl.java +++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/jpacriteriabuilder/service/EmployeeSearchServiceImpl.java @@ -2,13 +2,13 @@ import java.util.List; -import javax.persistence.EntityManager; -import javax.persistence.TypedQuery; -import javax.persistence.criteria.CriteriaBuilder; -import javax.persistence.criteria.CriteriaBuilder.In; -import javax.persistence.criteria.CriteriaQuery; -import javax.persistence.criteria.Root; -import javax.persistence.criteria.Subquery; +import jakarta.persistence.EntityManager; +import jakarta.persistence.TypedQuery; +import jakarta.persistence.criteria.CriteriaBuilder; +import jakarta.persistence.criteria.CriteriaBuilder.In; +import jakarta.persistence.criteria.CriteriaQuery; +import jakarta.persistence.criteria.Root; +import jakarta.persistence.criteria.Subquery; import com.baeldung.hibernate.entities.Department; import com.baeldung.hibernate.entities.DeptEmployee; diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/onetoone/foreignkeybased/Address.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/onetoone/foreignkeybased/Address.java index e05eb460302a..0c3238cf98f8 100644 --- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/onetoone/foreignkeybased/Address.java +++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/onetoone/foreignkeybased/Address.java @@ -1,12 +1,12 @@ package com.baeldung.hibernate.onetoone.foreignkeybased; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.OneToOne; -import javax.persistence.Table; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.OneToOne; +import jakarta.persistence.Table; @Entity @Table(name = "address") diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/onetoone/foreignkeybased/User.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/onetoone/foreignkeybased/User.java index dda972f29c1c..14c2a0a28c52 100644 --- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/onetoone/foreignkeybased/User.java +++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/onetoone/foreignkeybased/User.java @@ -1,14 +1,14 @@ package com.baeldung.hibernate.onetoone.foreignkeybased; -import javax.persistence.CascadeType; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.OneToOne; -import javax.persistence.Table; +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.OneToOne; +import jakarta.persistence.Table; @Entity @Table(name = "users") diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/onetoone/jointablebased/Employee.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/onetoone/jointablebased/Employee.java index a0bc101b9f32..fc8b9eefec76 100644 --- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/onetoone/jointablebased/Employee.java +++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/onetoone/jointablebased/Employee.java @@ -1,15 +1,15 @@ package com.baeldung.hibernate.onetoone.jointablebased; -import javax.persistence.CascadeType; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.JoinTable; -import javax.persistence.OneToOne; -import javax.persistence.Table; +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.JoinTable; +import jakarta.persistence.OneToOne; +import jakarta.persistence.Table; @Entity @Table(name = "employee") diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/onetoone/jointablebased/WorkStation.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/onetoone/jointablebased/WorkStation.java index f530611f6e79..0834b9f9d7e2 100644 --- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/onetoone/jointablebased/WorkStation.java +++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/onetoone/jointablebased/WorkStation.java @@ -1,13 +1,13 @@ package com.baeldung.hibernate.onetoone.jointablebased; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.OneToOne; -import javax.persistence.Table; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.OneToOne; +import jakarta.persistence.Table; @Entity @Table(name = "workstation") diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/onetoone/sharedkeybased/Address.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/onetoone/sharedkeybased/Address.java index e70c62e77ba4..d738b900bca0 100644 --- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/onetoone/sharedkeybased/Address.java +++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/onetoone/sharedkeybased/Address.java @@ -1,12 +1,12 @@ package com.baeldung.hibernate.onetoone.sharedkeybased; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.MapsId; -import javax.persistence.OneToOne; -import javax.persistence.Table; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.MapsId; +import jakarta.persistence.OneToOne; +import jakarta.persistence.Table; @Entity @Table(name = "address") diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/onetoone/sharedkeybased/User.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/onetoone/sharedkeybased/User.java index 605671a14907..8ce767eaf706 100644 --- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/onetoone/sharedkeybased/User.java +++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/onetoone/sharedkeybased/User.java @@ -1,15 +1,15 @@ package com.baeldung.hibernate.onetoone.sharedkeybased; -import javax.persistence.CascadeType; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.OneToOne; -import javax.persistence.PrimaryKeyJoinColumn; -import javax.persistence.Table; +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.OneToOne; +import jakarta.persistence.PrimaryKeyJoinColumn; +import jakarta.persistence.Table; @Entity @Table(name = "users") diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/optimisticlocking/OptimisticLockingCourse.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/optimisticlocking/OptimisticLockingCourse.java index 1af3e3e21b34..b8212a049d64 100644 --- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/optimisticlocking/OptimisticLockingCourse.java +++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/optimisticlocking/OptimisticLockingCourse.java @@ -1,6 +1,6 @@ package com.baeldung.hibernate.optimisticlocking; -import javax.persistence.*; +import jakarta.persistence.*; @Entity public class OptimisticLockingCourse { diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/optimisticlocking/OptimisticLockingStudent.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/optimisticlocking/OptimisticLockingStudent.java index b79212ae8d1f..22f11e37fb00 100644 --- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/optimisticlocking/OptimisticLockingStudent.java +++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/optimisticlocking/OptimisticLockingStudent.java @@ -1,6 +1,6 @@ package com.baeldung.hibernate.optimisticlocking; -import javax.persistence.*; +import jakarta.persistence.*; import java.util.List; @Entity diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pessimisticlocking/Address.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pessimisticlocking/Address.java index c889cb612750..7c6d20df4050 100644 --- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pessimisticlocking/Address.java +++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pessimisticlocking/Address.java @@ -1,6 +1,6 @@ package com.baeldung.hibernate.pessimisticlocking; -import javax.persistence.Embeddable; +import jakarta.persistence.Embeddable; @Embeddable public class Address { diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pessimisticlocking/Customer.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pessimisticlocking/Customer.java index cb73cbc958f9..9f36e3b308e1 100644 --- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pessimisticlocking/Customer.java +++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pessimisticlocking/Customer.java @@ -1,6 +1,6 @@ package com.baeldung.hibernate.pessimisticlocking; -import javax.persistence.*; +import jakarta.persistence.*; import java.util.List; @Entity diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pessimisticlocking/Individual.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pessimisticlocking/Individual.java index e491c09eb558..b954c9fdb222 100644 --- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pessimisticlocking/Individual.java +++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pessimisticlocking/Individual.java @@ -1,9 +1,9 @@ package com.baeldung.hibernate.pessimisticlocking; -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.Inheritance; -import javax.persistence.InheritanceType; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Inheritance; +import jakarta.persistence.InheritanceType; @Entity @Inheritance(strategy = InheritanceType.JOINED) diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pessimisticlocking/PessimisticLockingCourse.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pessimisticlocking/PessimisticLockingCourse.java index aea7d5fc87a5..012f3d1d39a5 100644 --- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pessimisticlocking/PessimisticLockingCourse.java +++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pessimisticlocking/PessimisticLockingCourse.java @@ -1,6 +1,6 @@ package com.baeldung.hibernate.pessimisticlocking; -import javax.persistence.*; +import jakarta.persistence.*; @Entity public class PessimisticLockingCourse { diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pessimisticlocking/PessimisticLockingEmployee.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pessimisticlocking/PessimisticLockingEmployee.java index a1328cbdaddc..e5b00f380093 100644 --- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pessimisticlocking/PessimisticLockingEmployee.java +++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pessimisticlocking/PessimisticLockingEmployee.java @@ -1,6 +1,6 @@ package com.baeldung.hibernate.pessimisticlocking; -import javax.persistence.Entity; +import jakarta.persistence.Entity; import java.math.BigDecimal; @Entity diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pessimisticlocking/PessimisticLockingStudent.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pessimisticlocking/PessimisticLockingStudent.java index e6c5f476b442..c5634ebc242e 100644 --- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pessimisticlocking/PessimisticLockingStudent.java +++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pessimisticlocking/PessimisticLockingStudent.java @@ -1,6 +1,6 @@ package com.baeldung.hibernate.pessimisticlocking; -import javax.persistence.*; +import jakarta.persistence.*; import java.util.List; @Entity diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pojo/Movie.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pojo/Movie.java index 5fae7f6a9748..7aeadd4501ea 100644 --- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pojo/Movie.java +++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pojo/Movie.java @@ -1,8 +1,8 @@ package com.baeldung.hibernate.pojo; -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.Table; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; @Entity @Table(name = "MOVIE") diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pojo/Person.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pojo/Person.java index 390a5954ed22..d0c8b8aa2fd5 100644 --- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pojo/Person.java +++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pojo/Person.java @@ -1,9 +1,9 @@ package com.baeldung.hibernate.pojo; -import javax.persistence.Convert; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; +import jakarta.persistence.Convert; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.Id; import com.baeldung.hibernate.converters.PersonNameConverter; diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pojo/Post.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pojo/Post.java index 25e51e35d0af..66a68367d711 100644 --- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pojo/Post.java +++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pojo/Post.java @@ -1,9 +1,9 @@ package com.baeldung.hibernate.pojo; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; -import javax.persistence.Table; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.Id; +import jakarta.persistence.Table; @Entity @Table(name = "posts") diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pojo/Student.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pojo/Student.java index 9b26c117ebe1..263908a5fccb 100644 --- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pojo/Student.java +++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pojo/Student.java @@ -1,9 +1,9 @@ package com.baeldung.hibernate.pojo; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; @Entity public class Student { diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/serializable/Account.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/serializable/Account.java index b051809ee50d..7070f21c45fc 100644 --- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/serializable/Account.java +++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/serializable/Account.java @@ -1,9 +1,9 @@ package com.baeldung.hibernate.serializable; -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; @Entity public class Account { diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/serializable/Email.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/serializable/Email.java index 11e7c6f1593a..4ba902281a1c 100644 --- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/serializable/Email.java +++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/serializable/Email.java @@ -1,7 +1,7 @@ package com.baeldung.hibernate.serializable; -import javax.persistence.Entity; -import javax.persistence.Id; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; import java.io.Serializable; @Entity diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/serializable/User.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/serializable/User.java index e7820fe52f32..267155b4db2a 100644 --- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/serializable/User.java +++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/serializable/User.java @@ -1,7 +1,7 @@ package com.baeldung.hibernate.serializable; -import javax.persistence.EmbeddedId; -import javax.persistence.Entity; +import jakarta.persistence.EmbeddedId; +import jakarta.persistence.Entity; @Entity public class User { diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/serializable/UserId.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/serializable/UserId.java index 7d3d382f6787..6fcbeafdd092 100644 --- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/serializable/UserId.java +++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/serializable/UserId.java @@ -1,6 +1,6 @@ package com.baeldung.hibernate.serializable; -import javax.persistence.Embeddable; +import jakarta.persistence.Embeddable; import java.io.Serializable; @Embeddable diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/persistencecontext/entity/User.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/persistencecontext/entity/User.java index 7252ac46f56a..afdbf067c322 100644 --- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/persistencecontext/entity/User.java +++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/persistencecontext/entity/User.java @@ -1,9 +1,9 @@ package com.baeldung.persistencecontext.entity; -import javax.persistence.Entity; -import javax.persistence.Id; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; -@Entity +@Entity(name = "users") public class User { @Id diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/persistencecontext/service/ExtendedPersistenceContextUserService.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/persistencecontext/service/ExtendedPersistenceContextUserService.java index ef25aac69fbb..7ad6aae745d6 100644 --- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/persistencecontext/service/ExtendedPersistenceContextUserService.java +++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/persistencecontext/service/ExtendedPersistenceContextUserService.java @@ -1,15 +1,15 @@ package com.baeldung.persistencecontext.service; -import javax.persistence.EntityManager; -import javax.persistence.PersistenceContext; -import javax.persistence.PersistenceContextType; -import javax.transaction.Transactional; +import jakarta.persistence.EntityManager; +import jakarta.persistence.PersistenceContext; +import jakarta.persistence.PersistenceContextType; +import jakarta.transaction.Transactional; -import org.springframework.stereotype.Component; +import org.springframework.stereotype.Service; import com.baeldung.persistencecontext.entity.User; -@Component +@Service public class ExtendedPersistenceContextUserService { @PersistenceContext(type = PersistenceContextType.EXTENDED) diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/persistencecontext/service/TransctionPersistenceContextUserService.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/persistencecontext/service/TransctionPersistenceContextUserService.java index 481defcf0831..6b9fd1f14c9b 100644 --- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/persistencecontext/service/TransctionPersistenceContextUserService.java +++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/persistencecontext/service/TransctionPersistenceContextUserService.java @@ -1,20 +1,20 @@ package com.baeldung.persistencecontext.service; -import javax.persistence.EntityManager; -import javax.persistence.PersistenceContext; -import javax.transaction.Transactional; +import jakarta.persistence.EntityManager; +import jakarta.persistence.PersistenceContext; +import jakarta.transaction.Transactional; -import org.springframework.stereotype.Component; +import org.springframework.stereotype.Service; import com.baeldung.persistencecontext.entity.User; -@Component +@Service public class TransctionPersistenceContextUserService { @PersistenceContext private EntityManager entityManager; - + @Transactional public User insertWithTransaction(User user) { entityManager.persist(user); diff --git a/persistence-modules/hibernate-jpa/src/main/resources/META-INF/persistence.xml b/persistence-modules/hibernate-jpa/src/main/resources/META-INF/persistence.xml index 12b41a497323..1669413289c9 100644 --- a/persistence-modules/hibernate-jpa/src/main/resources/META-INF/persistence.xml +++ b/persistence-modules/hibernate-jpa/src/main/resources/META-INF/persistence.xml @@ -8,12 +8,13 @@ com.baeldung.hibernate.pojo.Movie true - + - - - - + + + + + @@ -34,10 +35,14 @@ - - - - + + + + + + + + @@ -57,16 +62,20 @@ - - - - - + + + + + - - - - + + + + + + + + @@ -87,16 +96,20 @@ - - - - - + + + + + - - - - + + + + + + + + @@ -113,10 +126,16 @@ - - - - + + + + + + + + + + diff --git a/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/entitymanager/getreference/GetReferenceH2IntegrationTest.java b/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/entitymanager/getreference/GetReferenceH2IntegrationTest.java index e8e6aeed7caa..02744c8ee5f3 100644 --- a/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/entitymanager/getreference/GetReferenceH2IntegrationTest.java +++ b/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/entitymanager/getreference/GetReferenceH2IntegrationTest.java @@ -5,9 +5,9 @@ import org.junit.jupiter.api.*; import org.slf4j.LoggerFactory; -import javax.persistence.EntityManager; -import javax.persistence.EntityManagerFactory; -import javax.persistence.Persistence; +import jakarta.persistence.EntityManager; +import jakarta.persistence.EntityManagerFactory; +import jakarta.persistence.Persistence; import java.io.ByteArrayOutputStream; import java.io.OutputStream; import java.io.PrintStream; @@ -87,8 +87,8 @@ public void whenUsingFindMethodToUpdateGame_thenExecutesSelectForGame() { }); StringBuilder expected = new StringBuilder(); - expected.append("Hibernate: select game0_.id as id1_0_0_, game0_.name as name2_0_0_ from Game game0_ where game0_.id=?\n"); - expected.append("Hibernate: update Game set name=? where id=?\n"); + expected.append("Hibernate: select g1_0.id,g1_0.name from Game g1_0 where g1_0.id=?" + System.lineSeparator()); + expected.append("Hibernate: update Game set name=? where id=?" + System.lineSeparator()); assertEquals(expected.toString(), output.toString()); } @@ -104,8 +104,8 @@ public void whenUsingGetReferenceMethodToUpdateGame_thenExecutesSelectForGame() }); StringBuilder expected = new StringBuilder(); - expected.append("Hibernate: select game0_.id as id1_0_0_, game0_.name as name2_0_0_ from Game game0_ where game0_.id=?\n"); - expected.append("Hibernate: update Game set name=? where id=?\n"); + expected.append("Hibernate: select g1_0.id,g1_0.name from Game g1_0 where g1_0.id=?" + System.lineSeparator()); + expected.append("Hibernate: update Game set name=? where id=?" + System.lineSeparator()); assertEquals(expected.toString(), output.toString()); } @@ -120,10 +120,9 @@ public void whenUsingFindMethodToDeletePlayer_thenExecutesSelectForPlayer() { StringBuilder expected = new StringBuilder(); expected.append("Hibernate: select "); - expected.append("player0_.id as id1_1_0_, player0_.game_id as game_id3_1_0_, "); - expected.append("player0_.name as name2_1_0_, game1_.id as id1_0_1_, game1_.name as name2_0_1_ "); - expected.append("from Player player0_ left outer join Game game1_ on player0_.game_id=game1_.id where player0_.id=?\n"); - expected.append("Hibernate: delete from Player where id=?\n"); + expected.append("p1_0.id,g1_0.id,g1_0.name,p1_0.name "); + expected.append("from Player p1_0 left join Game g1_0 on g1_0.id=p1_0.game_id where p1_0.id=?" + System.lineSeparator()); + expected.append("Hibernate: delete from Player where id=?" + System.lineSeparator()); assertEquals(expected.toString(), output.toString()); } @@ -138,10 +137,9 @@ public void whenUsingGetReferenceMethodToDeletePlayer_thenExecutesSelectForPlaye StringBuilder expected = new StringBuilder(); expected.append("Hibernate: select "); - expected.append("player0_.id as id1_1_0_, player0_.game_id as game_id3_1_0_, "); - expected.append("player0_.name as name2_1_0_, game1_.id as id1_0_1_, game1_.name as name2_0_1_ "); - expected.append("from Player player0_ left outer join Game game1_ on player0_.game_id=game1_.id where player0_.id=?\n"); - expected.append("Hibernate: delete from Player where id=?\n"); + expected.append("p1_0.id,g1_0.id,g1_0.name,p1_0.name "); + expected.append("from Player p1_0 left join Game g1_0 on g1_0.id=p1_0.game_id where p1_0.id=?" + System.lineSeparator()); + expected.append("Hibernate: delete from Player where id=?" + System.lineSeparator()); assertEquals(expected.toString(), output.toString()); } @@ -159,12 +157,11 @@ public void whenUsingFindMethodToUpdatePlayersGame_thenExecutesSelectForGame() { })); StringBuilder expected = new StringBuilder(); - expected.append("Hibernate: select game0_.id as id1_0_0_, game0_.name as name2_0_0_ from Game game0_ where game0_.id=?\n"); + expected.append("Hibernate: select g1_0.id,g1_0.name from Game g1_0 where g1_0.id=?" + System.lineSeparator()); expected.append("Hibernate: select "); - expected.append("player0_.id as id1_1_0_, player0_.game_id as game_id3_1_0_, "); - expected.append("player0_.name as name2_1_0_, game1_.id as id1_0_1_, game1_.name as name2_0_1_ "); - expected.append("from Player player0_ left outer join Game game1_ on player0_.game_id=game1_.id where player0_.id=?\n"); - expected.append("Hibernate: update Player set game_id=?, name=? where id=?\n"); + expected.append("p1_0.id,g1_0.id,g1_0.name,p1_0.name "); + expected.append("from Player p1_0 left join Game g1_0 on g1_0.id=p1_0.game_id where p1_0.id=?" + System.lineSeparator()); + expected.append("Hibernate: update Player set game_id=?, name=? where id=?" + System.lineSeparator()); assertEquals(expected.toString(), output.toString()); } @@ -183,10 +180,9 @@ public void whenUsingGetReferenceMethodToUpdatePlayersGame_thenDoesNotExecuteSel StringBuilder expected = new StringBuilder(); expected.append("Hibernate: select "); - expected.append("player0_.id as id1_1_0_, player0_.game_id as game_id3_1_0_, "); - expected.append("player0_.name as name2_1_0_, game1_.id as id1_0_1_, game1_.name as name2_0_1_ "); - expected.append("from Player player0_ left outer join Game game1_ on player0_.game_id=game1_.id where player0_.id=?\n"); - expected.append("Hibernate: update Player set game_id=?, name=? where id=?\n"); + expected.append("p1_0.id,g1_0.id,g1_0.name,p1_0.name "); + expected.append("from Player p1_0 left join Game g1_0 on g1_0.id=p1_0.game_id where p1_0.id=?" + System.lineSeparator()); + expected.append("Hibernate: update Player set game_id=?, name=? where id=?" + System.lineSeparator()); assertEquals(expected.toString(), output.toString()); } diff --git a/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/entitymanager/getreference/GetReferenceMySQLManualTest.java b/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/entitymanager/getreference/GetReferenceMySQLManualTest.java index 2b7c5e8119c3..29be19dd681d 100644 --- a/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/entitymanager/getreference/GetReferenceMySQLManualTest.java +++ b/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/entitymanager/getreference/GetReferenceMySQLManualTest.java @@ -5,9 +5,9 @@ import org.junit.jupiter.api.*; import org.slf4j.LoggerFactory; -import javax.persistence.EntityManager; -import javax.persistence.EntityManagerFactory; -import javax.persistence.Persistence; +import jakarta.persistence.EntityManager; +import jakarta.persistence.EntityManagerFactory; +import jakarta.persistence.Persistence; import java.io.ByteArrayOutputStream; import java.io.OutputStream; import java.io.PrintStream; diff --git a/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/entitymanager/getreference/GetReferencePostgreSQLManualTest.java b/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/entitymanager/getreference/GetReferencePostgreSQLManualTest.java index 17f6b10b8a06..20a0bca6f10d 100644 --- a/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/entitymanager/getreference/GetReferencePostgreSQLManualTest.java +++ b/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/entitymanager/getreference/GetReferencePostgreSQLManualTest.java @@ -5,9 +5,9 @@ import org.junit.jupiter.api.*; import org.slf4j.LoggerFactory; -import javax.persistence.EntityManager; -import javax.persistence.EntityManagerFactory; -import javax.persistence.Persistence; +import jakarta.persistence.EntityManager; +import jakarta.persistence.EntityManagerFactory; +import jakarta.persistence.Persistence; import java.io.ByteArrayOutputStream; import java.io.OutputStream; import java.io.PrintStream; diff --git a/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/jpacriteriabuilder/EmployeeSearchServiceIntegrationTest.java b/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/jpacriteriabuilder/EmployeeSearchServiceIntegrationTest.java index 2b12734a1065..d9bffcfc08d7 100644 --- a/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/jpacriteriabuilder/EmployeeSearchServiceIntegrationTest.java +++ b/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/jpacriteriabuilder/EmployeeSearchServiceIntegrationTest.java @@ -9,7 +9,7 @@ import java.util.List; import java.util.stream.Collectors; -import javax.persistence.EntityManager; +import jakarta.persistence.EntityManager; import org.hibernate.HibernateException; import org.hibernate.Session; @@ -81,7 +81,7 @@ public final void teardown() { @Test public final void givenCriteriaQuery_whenSearchedUsingCriteriaBuilderWithListofAuthors_thenResultIsFilteredByAuthorNames() { - List titles = new ArrayList() { + List titles = new ArrayList<>() { { add("Manager"); add("Senior Manager"); diff --git a/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/optimisticlocking/OptimisticLockingIntegrationTest.java b/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/optimisticlocking/OptimisticLockingIntegrationTest.java index 37c490f29716..2fa302e27003 100644 --- a/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/optimisticlocking/OptimisticLockingIntegrationTest.java +++ b/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/optimisticlocking/OptimisticLockingIntegrationTest.java @@ -3,9 +3,9 @@ import java.io.IOException; import java.util.Arrays; -import javax.persistence.EntityManager; -import javax.persistence.LockModeType; -import javax.persistence.OptimisticLockException; +import jakarta.persistence.EntityManager; +import jakarta.persistence.LockModeType; +import jakarta.persistence.OptimisticLockException; import org.hibernate.SessionFactory; import org.junit.After; diff --git a/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/pessimisticlocking/BasicPessimisticLockingIntegrationTest.java b/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/pessimisticlocking/BasicPessimisticLockingIntegrationTest.java index 4b9c7720fdba..4085a98dadc5 100644 --- a/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/pessimisticlocking/BasicPessimisticLockingIntegrationTest.java +++ b/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/pessimisticlocking/BasicPessimisticLockingIntegrationTest.java @@ -1,14 +1,14 @@ package com.baeldung.hibernate.pessimisticlocking; import com.baeldung.hibernate.HibernateUtil; -import com.vividsolutions.jts.util.Assert; +import org.locationtech.jts.util.Assert; import org.hibernate.SessionFactory; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; -import javax.persistence.*; +import jakarta.persistence.*; import java.io.IOException; import java.util.Arrays; @@ -46,7 +46,7 @@ public void givenFoundRecordWithPessimisticRead_whenFindingNewOne_PessimisticLoc } @Test - public void givenRecordWithPessimisticReadQuery_whenQueryingNewOne_PessimisticLockExceptionThrown() throws IOException { + public void givenRecordWithPessimisticReadQuery_whenQueryingNewOne_PessimisticLockExceptionThrown() { try { EntityManager entityManager = getEntityManagerWithOpenTransaction(); Query query = entityManager.createQuery("from Student where studentId = :studentId"); diff --git a/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/pessimisticlocking/PessimisticLockScopesIntegrationTest.java b/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/pessimisticlocking/PessimisticLockScopesIntegrationTest.java index 81cb7d95f8c9..c2f2326159dd 100644 --- a/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/pessimisticlocking/PessimisticLockScopesIntegrationTest.java +++ b/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/pessimisticlocking/PessimisticLockScopesIntegrationTest.java @@ -6,9 +6,9 @@ import org.junit.AfterClass; import org.junit.Test; -import javax.persistence.EntityManager; -import javax.persistence.LockModeType; -import javax.persistence.PessimisticLockScope; +import jakarta.persistence.EntityManager; +import jakarta.persistence.LockModeType; +import jakarta.persistence.PessimisticLockScope; import java.io.IOException; import java.math.BigDecimal; import java.util.Arrays; @@ -36,7 +36,7 @@ public void givenEclipseEntityWithJoinInheritance_whenNormalLock_thenShouldChild // EXTENDED SCOPE Map map = new HashMap<>(); - map.put("javax.persistence.lock.scope", PessimisticLockScope.EXTENDED); + map.put("jakarta.persistence", PessimisticLockScope.EXTENDED); EntityManager em3 = getEntityManagerWithOpenTransaction(); foundEmployee = em3.find(PessimisticLockingEmployee.class, 1L, LockModeType.PESSIMISTIC_WRITE, map); @@ -65,7 +65,7 @@ public void givenEntityWithElementCollection_whenLock_thenHibernateExtendedScope // EXTENDED SCOPE Map map = new HashMap<>(); - map.put("javax.persistence.lock.scope", PessimisticLockScope.EXTENDED); + map.put("jakarta.persistence", PessimisticLockScope.EXTENDED); EntityManager em3 = getEntityManagerWithOpenTransaction(); foundCustomer = em3.find(Customer.class, 1L, LockModeType.PESSIMISTIC_WRITE, map); @@ -96,7 +96,7 @@ public void givenEntityWithOneToMany_whenLock_thenHibernateExtendedScopeLockOnly // EXTENDED SCOPE Map map = new HashMap<>(); - map.put("javax.persistence.lock.scope", PessimisticLockScope.EXTENDED); + map.put("jakarta.persistence", PessimisticLockScope.EXTENDED); EntityManager em3 = getEntityManagerWithOpenTransaction(); foundCourse = em3.find(PessimisticLockingCourse.class, 1L, LockModeType.PESSIMISTIC_WRITE, map); diff --git a/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/serializable/JPASerializableIntegrationTest.java b/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/serializable/JPASerializableIntegrationTest.java index 696bc23ab013..551275788960 100644 --- a/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/serializable/JPASerializableIntegrationTest.java +++ b/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/serializable/JPASerializableIntegrationTest.java @@ -4,10 +4,9 @@ import org.junit.Before; import org.junit.Test; -import javax.persistence.EntityManager; -import javax.persistence.EntityManagerFactory; -import javax.persistence.Persistence; -import java.io.IOException; +import jakarta.persistence.EntityManager; +import jakarta.persistence.EntityManagerFactory; +import jakarta.persistence.Persistence; import java.util.List; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -17,7 +16,7 @@ public class JPASerializableIntegrationTest { private static EntityManager entityManager; @Before - public void setUp() throws IOException { + public void setUp() { EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("com.baeldung.hibernate.serializable.h2_persistence_unit"); entityManager = entityManagerFactory.createEntityManager(); entityManager.getTransaction().begin(); @@ -63,7 +62,7 @@ public void givenAssociation_whenPersisted_thenMultipleAccountsWillBeFoundByEmai entityManager.persist(account); entityManager.persist(account2); - List userAccounts = entityManager.createQuery("select a from Account a join fetch a.user where a.user.email = :email") + List userAccounts = entityManager.createQuery("select a from Account a join fetch a.user where a.user.email = :email", Account.class) .setParameter("email", email) .getResultList(); assertEquals(2, userAccounts.size()); diff --git a/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/transaction/TransactionIntegrationTest.java b/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/transaction/TransactionIntegrationTest.java index 246a7d59f9d4..f64846ba5953 100644 --- a/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/transaction/TransactionIntegrationTest.java +++ b/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/transaction/TransactionIntegrationTest.java @@ -2,7 +2,6 @@ import com.baeldung.hibernate.HibernateUtil; import com.baeldung.hibernate.pojo.Post; -import com.baeldung.hibernate.transaction.PostService; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.junit.BeforeClass; @@ -10,7 +9,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.FileInputStream; import java.io.IOException; import java.util.Properties; diff --git a/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/persistencecontext/PersistenceContextIntegrationTest.java b/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/persistencecontext/PersistenceContextIntegrationTest.java index b299dd583428..37e6e438d862 100644 --- a/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/persistencecontext/PersistenceContextIntegrationTest.java +++ b/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/persistencecontext/PersistenceContextIntegrationTest.java @@ -4,8 +4,8 @@ import com.baeldung.persistencecontext.service.ExtendedPersistenceContextUserService; import com.baeldung.persistencecontext.service.TransctionPersistenceContextUserService; -import javax.persistence.EntityExistsException; -import javax.persistence.TransactionRequiredException; +import jakarta.persistence.EntityExistsException; +import jakarta.persistence.TransactionRequiredException; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/persistence-modules/hibernate-mapping-2/pom.xml b/persistence-modules/hibernate-mapping-2/pom.xml index 2a787a0e467b..a56f67b202d3 100644 --- a/persistence-modules/hibernate-mapping-2/pom.xml +++ b/persistence-modules/hibernate-mapping-2/pom.xml @@ -55,32 +55,16 @@ h2 ${h2.version} - - com.sun.xml.bind - jaxb-core - ${com.sun.xml.version} - - - javax.xml.bind - jaxb-api - ${javax.xml.bind.version} - - - com.sun.xml.bind - jaxb-impl - ${com.sun.xml.version} - - 5.0.2.RELEASE - 1.10.6.RELEASE + 6.0.6 + 3.0.3 - 5.2.10.Final + 6.1.7.Final 9.0.0.M26 - 2.3.0.1 - 2.3.1 + 4.0.2 2.1.214 diff --git a/persistence-modules/hibernate-mapping-2/src/main/java/com/baeldung/manytomany/model/Employee.java b/persistence-modules/hibernate-mapping-2/src/main/java/com/baeldung/manytomany/model/Employee.java index 39671c21bcbf..cc745f9307ec 100644 --- a/persistence-modules/hibernate-mapping-2/src/main/java/com/baeldung/manytomany/model/Employee.java +++ b/persistence-modules/hibernate-mapping-2/src/main/java/com/baeldung/manytomany/model/Employee.java @@ -4,16 +4,16 @@ import java.util.HashSet; import java.util.Set; -import javax.persistence.CascadeType; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.JoinTable; -import javax.persistence.ManyToMany; -import javax.persistence.Table; +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.JoinTable; +import jakarta.persistence.ManyToMany; +import jakarta.persistence.Table; @Entity @Table(name = "Employee") diff --git a/persistence-modules/hibernate-mapping-2/src/main/java/com/baeldung/manytomany/model/Project.java b/persistence-modules/hibernate-mapping-2/src/main/java/com/baeldung/manytomany/model/Project.java index b5dc3cb85678..b0ca7f06cbd0 100644 --- a/persistence-modules/hibernate-mapping-2/src/main/java/com/baeldung/manytomany/model/Project.java +++ b/persistence-modules/hibernate-mapping-2/src/main/java/com/baeldung/manytomany/model/Project.java @@ -4,12 +4,12 @@ import java.util.HashSet; import java.util.Set; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; -import javax.persistence.ManyToMany; -import javax.persistence.Table; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.Id; +import jakarta.persistence.ManyToMany; +import jakarta.persistence.Table; @Entity @Table(name = "Project") diff --git a/persistence-modules/pom.xml b/persistence-modules/pom.xml index d7ff51b4873c..85cf251d184d 100644 --- a/persistence-modules/pom.xml +++ b/persistence-modules/pom.xml @@ -21,61 +21,60 @@ blaze-persistence core-java-persistence core-java-persistence-2 - deltaspike elasticsearch flyway flyway-repair hbase hibernate5 - hibernate-mapping + hibernate-mapping-2 - hibernate-ogm - hibernate-annotations + hibernate-exceptions hibernate-libraries hibernate-jpa - hibernate-queries - hibernate-enterprise + + influxdb - java-cassandra + java-cockroachdb java-jdbi - java-jpa - java-jpa-2 + + java-jpa-3 java-mongodb-2 java-mongodb-3 java-mongodb-queries - jnosql + jooq jpa-hibernate-cascade-type liquibase orientdb persistence-libraries - querydsl - r2dbc + + read-only-transactions - redis + solr - spring-boot-persistence-2 + spring-boot-persistence-3 spring-boot-mysql spring-boot-persistence spring-boot-persistence-h2 - spring-boot-persistence-mongodb + spring-data-arangodb spring-data-cassandra spring-data-cassandra-test - spring-data-cassandra-reactive + spring-data-cosmosdb - spring-data-couchbase-2 + spring-data-dynamodb - spring-data-eclipselink + spring-data-elasticsearch @@ -89,24 +88,24 @@ spring-data-jpa-query spring-data-jpa-query-2 spring-data-jpa-query-3 - spring-data-jpa-repo + spring-data-jpa-repo-2 spring-data-jdbc spring-data-keyvalue - spring-data-mongodb + spring-data-mongodb-2 spring-data-mongodb-reactive - spring-data-neo4j + spring-data-redis spring-data-rest-2 spring-data-rest-querydsl spring-data-solr - spring-hibernate-3 - spring-hibernate-5 - spring-jpa - spring-jpa-2 + + + spring-jdbc spring-jooq spring-mybatis @@ -115,8 +114,8 @@ - 5.2.17.Final - 42.2.20 + 6.1.7.Final + 42.5.4 2.3.4 1.16.3 diff --git a/pom.xml b/pom.xml index ca55866a42cc..ca50f630ae4d 100644 --- a/pom.xml +++ b/pom.xml @@ -367,8 +367,8 @@ muleesb - persistence-modules web-modules + persistence-modules/deltaspike @@ -562,8 +562,8 @@ lombok-modules muleesb - persistence-modules web-modules + persistence-modules/deltaspike @@ -821,9 +821,7 @@ libraries-testing maven-modules optaplanner - persistence-modules/sirix - persistence-modules/spring-data-cassandra-2 - persistence-modules/spring-data-jpa-repo-3 + persistence-modules quarkus-modules spring-reactive-modules spring-swagger-codegen/custom-validations-opeanpi-codegen @@ -1073,9 +1071,7 @@ libraries-testing maven-modules optaplanner - persistence-modules/sirix - persistence-modules/spring-data-cassandra-2 - persistence-modules/spring-data-jpa-repo-3 + persistence-modules quarkus-modules spring-reactive-modules spring-swagger-codegen/custom-validations-opeanpi-codegen @@ -1257,6 +1253,7 @@ 1.12.13 + 1.7.32 1.2.7 From 34d99be895ad7fcf684eed344c324dfc31c68d9e Mon Sep 17 00:00:00 2001 From: edizor <113095366+edizor@users.noreply.github.com> Date: Fri, 7 Apr 2023 23:39:24 +0800 Subject: [PATCH 033/390] Update README.md [skip ci] --- jackson-modules/jackson-custom-conversions/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/jackson-modules/jackson-custom-conversions/README.md b/jackson-modules/jackson-custom-conversions/README.md index 68e9a6d50d0e..2f45a2f43b2d 100644 --- a/jackson-modules/jackson-custom-conversions/README.md +++ b/jackson-modules/jackson-custom-conversions/README.md @@ -7,3 +7,4 @@ This module contains articles about Jackson custom conversions. - [Getting Started with Custom Deserialization in Jackson](https://www.baeldung.com/jackson-deserialization) - [Serialize Only Fields that meet a Custom Criteria with Jackson](https://www.baeldung.com/jackson-serialize-field-custom-criteria) - [Calling Default Serializer from Custom Serializer in Jackson](https://www.baeldung.com/jackson-call-default-serializer-from-custom-serializer) +- [OffsetDateTime Serialization With Jackson](https://www.baeldung.com/java-jackson-offsetdatetime) From afb5850d1680cd0b9ceafcc9932e5d3016b81370 Mon Sep 17 00:00:00 2001 From: edizor <113095366+edizor@users.noreply.github.com> Date: Fri, 7 Apr 2023 23:44:46 +0800 Subject: [PATCH 034/390] Update README.md [skip ci] --- apache-httpclient4/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/apache-httpclient4/README.md b/apache-httpclient4/README.md index dff63a5cc17f..9c18e0624343 100644 --- a/apache-httpclient4/README.md +++ b/apache-httpclient4/README.md @@ -9,6 +9,7 @@ This module contains articles about Apache HttpClient 4.5 - [Custom HTTP Header with the Apache HttpClient](https://www.baeldung.com/httpclient-custom-http-header) - [Apache HttpClient vs. CloseableHttpClient](https://www.baeldung.com/apache-httpclient-vs-closeablehttpclient) - [Expand Shortened URLs with Apache HttpClient](https://www.baeldung.com/apache-httpclient-expand-url) +- [Retrying Requests using Apache HttpClient](https://www.baeldung.com/java-retrying-requests-using-apache-httpclient) ### Running the Tests To run the live tests, use the command: mvn clean install -Plive From 2a12cd17e673d3cf11128664119bef10294661aa Mon Sep 17 00:00:00 2001 From: edizor <113095366+edizor@users.noreply.github.com> Date: Fri, 7 Apr 2023 23:51:06 +0800 Subject: [PATCH 035/390] Update README.md [skip ci] --- core-java-modules/core-java-booleans/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core-java-modules/core-java-booleans/README.md b/core-java-modules/core-java-booleans/README.md index 6a9be31958b8..fe7068c6f464 100644 --- a/core-java-modules/core-java-booleans/README.md +++ b/core-java-modules/core-java-booleans/README.md @@ -2,4 +2,5 @@ This module contains articles about Java Booleans. -### Relevant Articles: \ No newline at end of file +### Relevant Articles: +- [Convert Boolean to String in Java](https://www.baeldung.com/java-convert-boolean-to-string) From 39037b44e436d2b73bc8e77e013dbfd8c003af3c Mon Sep 17 00:00:00 2001 From: edizor <113095366+edizor@users.noreply.github.com> Date: Fri, 7 Apr 2023 23:53:48 +0800 Subject: [PATCH 036/390] Update README.md [skip ci] --- spring-boot-modules/spring-boot-keycloak-2/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/spring-boot-modules/spring-boot-keycloak-2/README.md b/spring-boot-modules/spring-boot-keycloak-2/README.md index d372132a6a78..e4f8b1904b17 100644 --- a/spring-boot-modules/spring-boot-keycloak-2/README.md +++ b/spring-boot-modules/spring-boot-keycloak-2/README.md @@ -4,3 +4,4 @@ This module contains articles about Keycloak in Spring Boot projects. ## Relevant articles: - [Disabling Keycloak Security in Spring Boot](https://www.baeldung.com/spring-keycloak-security-disable) +- [Search Users With Keycloak in Java](https://www.baeldung.com/java-keycloak-search-users) From fb961ea44d5c167f7ae201170d39774a089d0d41 Mon Sep 17 00:00:00 2001 From: edizor <113095366+edizor@users.noreply.github.com> Date: Fri, 7 Apr 2023 23:56:46 +0800 Subject: [PATCH 037/390] Update README.md [skip ci] --- core-java-modules/core-java-uuid/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/core-java-modules/core-java-uuid/README.md b/core-java-modules/core-java-uuid/README.md index 0a77c36acdc4..4438c9a7702e 100644 --- a/core-java-modules/core-java-uuid/README.md +++ b/core-java-modules/core-java-uuid/README.md @@ -4,3 +4,4 @@ - [Generating Alphanumeric UUID String in Java](https://www.baeldung.com/java-generate-alphanumeric-uuid) - [Guide to UUID in Java](http://www.baeldung.com/java-uuid) - [Validate UUID String in Java](https://www.baeldung.com/java-validate-uuid-string) +- [Generate the Same UUID From a String in Java](https://www.baeldung.com/java-generate-same-uuid-from-string) From c8d29d68cac3dbac62a5a4c80423e2c080320191 Mon Sep 17 00:00:00 2001 From: edizor <113095366+edizor@users.noreply.github.com> Date: Fri, 7 Apr 2023 23:59:05 +0800 Subject: [PATCH 038/390] Update README.md [skip ci] --- spring-cloud-modules/spring-cloud-azure/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spring-cloud-modules/spring-cloud-azure/README.md b/spring-cloud-modules/spring-cloud-azure/README.md index 810efbc8dc4a..7f0e9815aeb7 100644 --- a/spring-cloud-modules/spring-cloud-azure/README.md +++ b/spring-cloud-modules/spring-cloud-azure/README.md @@ -1,7 +1,7 @@ # Spring Cloud Azure # Relevant Articles - +- [A Guide to Spring Cloud Azure Key Vault](https://www.baeldung.com/spring-cloud-azure-key-vault) # Azure KeyVault: In order to create the secrets, follow these steps: - create an Azure account @@ -10,4 +10,4 @@ In order to create the secrets, follow these steps: - create a resource group: _az group create --name spring_cloud_azure --location eastus_ - create a keyvault storage: _az keyvault create --name new_keyvault --resource-group spring_cloud_azure --location eastus_ - create the secrets: > az keyvault secret set --name my-database-secret --value my-database-secret-value --vault-name new_keyvault,> az keyvault secret set --name my-secret --value my-secret-value --vault-name new_keyvault -``` \ No newline at end of file +``` From 55d2378e4c257228721721e31e7a14eb9fa18f1b Mon Sep 17 00:00:00 2001 From: Anastasios Ioannidis <121166333+anastasiosioannidis@users.noreply.github.com> Date: Fri, 7 Apr 2023 19:00:48 +0300 Subject: [PATCH 039/390] JAVA-15014 Removed httpclient4 Expand Shortened Urls article from apache-httpclient-2 (#13778) --- apache-httpclient-2/README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/apache-httpclient-2/README.md b/apache-httpclient-2/README.md index 45f1e41637b2..05bebfaacb10 100644 --- a/apache-httpclient-2/README.md +++ b/apache-httpclient-2/README.md @@ -12,6 +12,5 @@ The "REST With Spring" Classes: http://bit.ly/restwithspring - [Reading an HTTP Response Body as a String in Java](https://www.baeldung.com/java-http-response-body-as-string) - [How To Get Cookies From the Apache HttpClient Response](https://www.baeldung.com/java-apache-httpclient-cookies) - [Enabling Logging for Apache HttpClient](https://www.baeldung.com/apache-httpclient-enable-logging) -- [Expand Shortened URLs with Apache HttpClient](https://www.baeldung.com/apache-httpclient-expand-url) - [Apache HttpClient vs. CloseableHttpClient](https://www.baeldung.com/apache-httpclient-vs-closeablehttpclient) - More articles: [[<-- prev]](../apache-httpclient) From 9f97bc44b1f3caf5298ac75d4a247021eb2816f5 Mon Sep 17 00:00:00 2001 From: Anastasios Ioannidis <121166333+anastasiosioannidis@users.noreply.github.com> Date: Fri, 7 Apr 2023 19:03:05 +0300 Subject: [PATCH 040/390] JAVA-18131 Adjust core-java-jvm PrintClassLoaders to sync with article (#13780) --- .../main/java/com/baeldung/classloader/PrintClassLoader.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/core-java-modules/core-java-jvm/src/main/java/com/baeldung/classloader/PrintClassLoader.java b/core-java-modules/core-java-jvm/src/main/java/com/baeldung/classloader/PrintClassLoader.java index b976ac99f28f..cd7000b41997 100644 --- a/core-java-modules/core-java-jvm/src/main/java/com/baeldung/classloader/PrintClassLoader.java +++ b/core-java-modules/core-java-jvm/src/main/java/com/baeldung/classloader/PrintClassLoader.java @@ -1,5 +1,7 @@ package com.baeldung.classloader; +import java.sql.DriverManager; + import java.util.ArrayList; public class PrintClassLoader { @@ -7,6 +9,7 @@ public class PrintClassLoader { public void printClassLoaders() throws ClassNotFoundException { System.out.println("Classloader of this class:" + PrintClassLoader.class.getClassLoader()); + System.out.println("Classloader of DriverManager:" + DriverManager.class.getClassLoader()); System.out.println("Classloader of ArrayList:" + ArrayList.class.getClassLoader()); } From 09ebfe9b6119f1582934fbbb5cb01dbc72153bea Mon Sep 17 00:00:00 2001 From: edizor <113095366+edizor@users.noreply.github.com> Date: Sat, 8 Apr 2023 00:03:46 +0800 Subject: [PATCH 041/390] Update README.md [skip ci] --- persistence-modules/spring-data-jpa-repo-2/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/persistence-modules/spring-data-jpa-repo-2/README.md b/persistence-modules/spring-data-jpa-repo-2/README.md index 23134ec02d6f..dc94ba41d090 100644 --- a/persistence-modules/spring-data-jpa-repo-2/README.md +++ b/persistence-modules/spring-data-jpa-repo-2/README.md @@ -9,4 +9,5 @@ - [Difference Between JPA and Spring Data JPA](https://www.baeldung.com/spring-data-jpa-vs-jpa) - [Differences Between Spring Data JPA findFirst() and findTop()](https://www.baeldung.com/spring-data-jpa-findfirst-vs-findtop) - [Difference Between findBy and findAllBy in Spring Data JPA](https://www.baeldung.com/spring-data-jpa-find-by-vs-find-all-by) +- [Unidirectional One-to-Many and Cascading Delete in JPA](https://www.baeldung.com/spring-jpa-unidirectional-one-to-many-and-cascading-delete) - More articles: [[<-- prev]](../spring-data-jpa-repo) From db58dbb88be4365f1da3fab60155477ee2d39cb3 Mon Sep 17 00:00:00 2001 From: edizor <113095366+edizor@users.noreply.github.com> Date: Sat, 8 Apr 2023 00:07:32 +0800 Subject: [PATCH 042/390] Update README.md [skip ci] --- core-java-modules/core-java-numbers-6/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core-java-modules/core-java-numbers-6/README.md b/core-java-modules/core-java-numbers-6/README.md index a96ddccabb39..2c0b0554c453 100644 --- a/core-java-modules/core-java-numbers-6/README.md +++ b/core-java-modules/core-java-numbers-6/README.md @@ -1,2 +1,2 @@ ### Relevant Articles: - +- [Java Program to Calculate Pi](https://www.baeldung.com/java-monte-carlo-compute-pi) From fc25fda138f7fd74fcb1e791f7d7b634b11897e8 Mon Sep 17 00:00:00 2001 From: edizor <113095366+edizor@users.noreply.github.com> Date: Sat, 8 Apr 2023 00:11:38 +0800 Subject: [PATCH 043/390] Update README.md [skip ci] --- persistence-modules/hibernate-annotations/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/persistence-modules/hibernate-annotations/README.md b/persistence-modules/hibernate-annotations/README.md index 9b6857915108..a03fb7e8e3e3 100644 --- a/persistence-modules/hibernate-annotations/README.md +++ b/persistence-modules/hibernate-annotations/README.md @@ -10,3 +10,4 @@ This module contains articles about Annotations used in Hibernate. - [Hibernate @WhereJoinTable Annotation](https://www.baeldung.com/hibernate-wherejointable) - [Usage of the Hibernate @LazyCollection Annotation](https://www.baeldung.com/hibernate-lazycollection) - [@Immutable in Hibernate](https://www.baeldung.com/hibernate-immutable) +- [Hibernate @CreationTimestamp and @UpdateTimestamp](https://www.baeldung.com/hibernate-creationtimestamp-updatetimestamp) From 388b56caac0bd3765dc04abde11848befed55bec Mon Sep 17 00:00:00 2001 From: Dhawal Kapil Date: Fri, 7 Apr 2023 22:02:06 +0530 Subject: [PATCH 044/390] JAVA-19536 Formatting of pom.xml --- ethereum/pom.xml | 8 +- feign/pom.xml | 1 - gcp-firebase/pom.xml | 83 ++++++++++--------- geotools/pom.xml | 18 ++-- google-cloud/pom.xml | 2 - graphql-modules/graphql-dgs/pom.xml | 1 - graphql-modules/graphql-java/pom.xml | 23 ++--- .../graphql-spqr-boot-starter/pom.xml | 1 - graphql-modules/graphql-spqr/pom.xml | 1 - graphql-modules/pom.xml | 1 - grpc/pom.xml | 1 - guava-modules/guava-18/pom.xml | 1 - guava-modules/guava-19/pom.xml | 1 - guava-modules/guava-21/pom.xml | 1 - guava-modules/guava-collections-list/pom.xml | 1 - guava-modules/guava-collections-map/pom.xml | 1 - guava-modules/guava-collections-set/pom.xml | 1 - guava-modules/guava-collections/pom.xml | 1 - guava-modules/guava-core/pom.xml | 1 - guava-modules/guava-io/pom.xml | 1 - guava-modules/guava-utilities/pom.xml | 1 - hazelcast/pom.xml | 1 - httpclient-simple/pom.xml | 5 +- hystrix/pom.xml | 1 - 24 files changed, 65 insertions(+), 92 deletions(-) diff --git a/ethereum/pom.xml b/ethereum/pom.xml index 6c1a0e900f83..8dc25427d9f8 100644 --- a/ethereum/pom.xml +++ b/ethereum/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 com.baeldung.ethereum ethereum @@ -113,7 +113,8 @@ test ${spring.boot.version} - + junit junit @@ -195,4 +196,5 @@ 2.0.4.RELEASE 3.1 + \ No newline at end of file diff --git a/feign/pom.xml b/feign/pom.xml index 7f71794e291b..edb55e7da5f0 100644 --- a/feign/pom.xml +++ b/feign/pom.xml @@ -3,7 +3,6 @@ xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - com.baeldung.feign feign feign diff --git a/gcp-firebase/pom.xml b/gcp-firebase/pom.xml index c563099ad6cf..10a899f37030 100644 --- a/gcp-firebase/pom.xml +++ b/gcp-firebase/pom.xml @@ -1,48 +1,51 @@ - - 4.0.0 + + 4.0.0 + gcp-firebase + com.baeldung parent-boot-2 0.0.1-SNAPSHOT ../parent-boot-2 - gcp-firebase - - - 9.1.1 - - - - com.google.firebase - firebase-admin - ${firebase-admin.version} - - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-test - test - - - org.springframework.boot - spring-boot-configuration-processor - true - - - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - + + + com.google.firebase + firebase-admin + ${firebase-admin.version} + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-test + test + + + org.springframework.boot + spring-boot-configuration-processor + true + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + 9.1.1 + + \ No newline at end of file diff --git a/geotools/pom.xml b/geotools/pom.xml index f17b4cc5daba..61682ae0f526 100644 --- a/geotools/pom.xml +++ b/geotools/pom.xml @@ -4,10 +4,8 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 geotools - 0.0.1-SNAPSHOT geotools jar - http://maven.apache.org com.baeldung @@ -15,14 +13,6 @@ 1.0.0-SNAPSHOT - - - osgeo-release - OSGeo Repository - https://repo.osgeo.org/repository/release/ - - - org.geotools @@ -41,6 +31,14 @@ + + + osgeo-release + OSGeo Repository + https://repo.osgeo.org/repository/release/ + + + 28.1 28.1 diff --git a/google-cloud/pom.xml b/google-cloud/pom.xml index 72b9647bc824..8bb535f12aa1 100644 --- a/google-cloud/pom.xml +++ b/google-cloud/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 google-cloud - 0.1-SNAPSHOT google-cloud jar Google Cloud Tutorials @@ -24,7 +23,6 @@ org.projectlombok lombok - ${lombok.version} provided diff --git a/graphql-modules/graphql-dgs/pom.xml b/graphql-modules/graphql-dgs/pom.xml index 051785b4b8b5..313e598130ce 100644 --- a/graphql-modules/graphql-dgs/pom.xml +++ b/graphql-modules/graphql-dgs/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 graphql-dgs - 1.0 graphql-dgs diff --git a/graphql-modules/graphql-java/pom.xml b/graphql-modules/graphql-java/pom.xml index 01b7a4fbc36e..88f2beb57437 100644 --- a/graphql-modules/graphql-java/pom.xml +++ b/graphql-modules/graphql-java/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 graphql-java - 1.0 graphql-java @@ -13,21 +12,6 @@ 1.0.0-SNAPSHOT - - - jitpack.io - https://jitpack.io - - - - false - - central - Central Repository - https://repo.maven.apache.org/maven2 - - - com.graphql-java @@ -143,6 +127,13 @@ + + + jitpack.io + https://jitpack.io + + + 11.0 5.2.4 diff --git a/graphql-modules/graphql-spqr-boot-starter/pom.xml b/graphql-modules/graphql-spqr-boot-starter/pom.xml index 6cb1d7432977..fd9ebc0224b4 100644 --- a/graphql-modules/graphql-spqr-boot-starter/pom.xml +++ b/graphql-modules/graphql-spqr-boot-starter/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 graphql-spqr-boot-starter - 1.0 graphql-spqr-boot-starter diff --git a/graphql-modules/graphql-spqr/pom.xml b/graphql-modules/graphql-spqr/pom.xml index d845d1ac8a74..756930f2ac75 100644 --- a/graphql-modules/graphql-spqr/pom.xml +++ b/graphql-modules/graphql-spqr/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 graphql-spqr - 1.0 graphql-spqr diff --git a/graphql-modules/pom.xml b/graphql-modules/pom.xml index a42400b7cca2..4b43cbffde9c 100644 --- a/graphql-modules/pom.xml +++ b/graphql-modules/pom.xml @@ -5,7 +5,6 @@ 4.0.0 com.baeldung.graphql graphql-modules - 1.0.0-SNAPSHOT graphql-modules pom diff --git a/grpc/pom.xml b/grpc/pom.xml index 40d35183dc81..fed1e801f204 100644 --- a/grpc/pom.xml +++ b/grpc/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 grpc - 0.0.1-SNAPSHOT grpc jar diff --git a/guava-modules/guava-18/pom.xml b/guava-modules/guava-18/pom.xml index 8f5108bff13a..873555bf2478 100644 --- a/guava-modules/guava-18/pom.xml +++ b/guava-modules/guava-18/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 guava-18 - 0.1.0-SNAPSHOT guava-18 diff --git a/guava-modules/guava-19/pom.xml b/guava-modules/guava-19/pom.xml index ba85fe0ae8c0..9a40677e08fd 100644 --- a/guava-modules/guava-19/pom.xml +++ b/guava-modules/guava-19/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 guava-19 - 0.1.0-SNAPSHOT guava-19 diff --git a/guava-modules/guava-21/pom.xml b/guava-modules/guava-21/pom.xml index 9e791bfe231d..a26176ba0b1a 100644 --- a/guava-modules/guava-21/pom.xml +++ b/guava-modules/guava-21/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 guava-21 - 1.0-SNAPSHOT guava-21 diff --git a/guava-modules/guava-collections-list/pom.xml b/guava-modules/guava-collections-list/pom.xml index 6863b4011ce8..a07f34e56cf5 100644 --- a/guava-modules/guava-collections-list/pom.xml +++ b/guava-modules/guava-collections-list/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 guava-collections-list - 0.1.0-SNAPSHOT guava-collections-list diff --git a/guava-modules/guava-collections-map/pom.xml b/guava-modules/guava-collections-map/pom.xml index 04beaa13a164..6b73e8c29a40 100644 --- a/guava-modules/guava-collections-map/pom.xml +++ b/guava-modules/guava-collections-map/pom.xml @@ -5,7 +5,6 @@ 4.0.0 com.baeldung.guava guava-collections-map - 0.1.0-SNAPSHOT guava-collections-map diff --git a/guava-modules/guava-collections-set/pom.xml b/guava-modules/guava-collections-set/pom.xml index 49bfc46ee252..ffd6c80a3ed9 100644 --- a/guava-modules/guava-collections-set/pom.xml +++ b/guava-modules/guava-collections-set/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 guava-collections-set - 0.1.0-SNAPSHOT guava-collections-set diff --git a/guava-modules/guava-collections/pom.xml b/guava-modules/guava-collections/pom.xml index 8dc052db7591..e016b1c5477f 100644 --- a/guava-modules/guava-collections/pom.xml +++ b/guava-modules/guava-collections/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 guava-collections - 0.1.0-SNAPSHOT guava-collections diff --git a/guava-modules/guava-core/pom.xml b/guava-modules/guava-core/pom.xml index dd68fef43a64..6c4f76356fe0 100644 --- a/guava-modules/guava-core/pom.xml +++ b/guava-modules/guava-core/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 guava-core - 0.1.0-SNAPSHOT guava-core diff --git a/guava-modules/guava-io/pom.xml b/guava-modules/guava-io/pom.xml index 2ea91c5e4f23..367533139e89 100644 --- a/guava-modules/guava-io/pom.xml +++ b/guava-modules/guava-io/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 guava-io - 0.1.0-SNAPSHOT guava-io diff --git a/guava-modules/guava-utilities/pom.xml b/guava-modules/guava-utilities/pom.xml index ab849072a544..407a44587e24 100644 --- a/guava-modules/guava-utilities/pom.xml +++ b/guava-modules/guava-utilities/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 guava-utilities - 0.1.0-SNAPSHOT guava-utilities diff --git a/hazelcast/pom.xml b/hazelcast/pom.xml index 694563790f9d..4742f213e52c 100644 --- a/hazelcast/pom.xml +++ b/hazelcast/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 hazelcast - 0.0.1-SNAPSHOT hazelcast diff --git a/httpclient-simple/pom.xml b/httpclient-simple/pom.xml index eea056477c43..a6049432ce53 100644 --- a/httpclient-simple/pom.xml +++ b/httpclient-simple/pom.xml @@ -1,10 +1,9 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 httpclient-simple - 0.1-SNAPSHOT httpclient-simple war diff --git a/hystrix/pom.xml b/hystrix/pom.xml index 639d4eba0222..007c2e237b2a 100644 --- a/hystrix/pom.xml +++ b/hystrix/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 hystrix - 1.0 hystrix From 4c760bd614198124415f838decb71c9b2c54cef5 Mon Sep 17 00:00:00 2001 From: Dhawal Kapil Date: Fri, 7 Apr 2023 22:32:01 +0530 Subject: [PATCH 045/390] JAVA-19536 Formatting of pom.xml --- image-processing/pom.xml | 1 - jackson-modules/jackson-annotations/pom.xml | 1 - jackson-modules/jackson-conversions-2/pom.xml | 1 - jackson-modules/jackson-conversions/pom.xml | 1 - jackson-modules/jackson-core/pom.xml | 1 - .../jackson-custom-conversions/pom.xml | 1 - jackson-modules/jackson-exceptions/pom.xml | 1 - jackson-simple/pom.xml | 1 - java-blockchain/pom.xml | 1 - java-jdi/pom.xml | 1 - java-panama/pom.xml | 87 +++++++++---------- java-rmi/pom.xml | 1 - java-websocket/pom.xml | 1 - javax-sound/pom.xml | 1 - javax-validation-advanced/pom.xml | 1 - javaxval-2/pom.xml | 1 - javaxval/pom.xml | 3 +- jaxb/pom.xml | 1 - jenkins-modules/plugins/pom.xml | 1 - jersey/pom.xml | 1 - jetbrains/pom.xml | 1 - jgit/pom.xml | 16 ++-- jib/pom.xml | 1 - jmeter/pom.xml | 22 ++--- jmh/pom.xml | 6 +- jsf/pom.xml | 3 +- json-modules/gson/pom.xml | 1 - json-modules/json-path/pom.xml | 1 - json-modules/json/pom.xml | 1 - jws/pom.xml | 2 - 30 files changed, 64 insertions(+), 98 deletions(-) diff --git a/image-processing/pom.xml b/image-processing/pom.xml index 3780ecfd331c..2a2b92ca4848 100644 --- a/image-processing/pom.xml +++ b/image-processing/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 image-processing - 1.0-SNAPSHOT image-processing diff --git a/jackson-modules/jackson-annotations/pom.xml b/jackson-modules/jackson-annotations/pom.xml index 4bb9341e43a9..e2d5e1e60758 100644 --- a/jackson-modules/jackson-annotations/pom.xml +++ b/jackson-modules/jackson-annotations/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 jackson-annotations - 0.0.1-SNAPSHOT jackson-annotations diff --git a/jackson-modules/jackson-conversions-2/pom.xml b/jackson-modules/jackson-conversions-2/pom.xml index 1c6d2fc0024c..457045b460b9 100644 --- a/jackson-modules/jackson-conversions-2/pom.xml +++ b/jackson-modules/jackson-conversions-2/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 jackson-conversions-2 - 0.0.1-SNAPSHOT jackson-conversions-2 diff --git a/jackson-modules/jackson-conversions/pom.xml b/jackson-modules/jackson-conversions/pom.xml index 9ab1fa9020c9..e0990ed34fe6 100644 --- a/jackson-modules/jackson-conversions/pom.xml +++ b/jackson-modules/jackson-conversions/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 jackson-conversions - 0.0.1-SNAPSHOT jackson-conversions diff --git a/jackson-modules/jackson-core/pom.xml b/jackson-modules/jackson-core/pom.xml index f3edffc07ca2..4eccd4d8f8dc 100644 --- a/jackson-modules/jackson-core/pom.xml +++ b/jackson-modules/jackson-core/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 jackson-core - 0.0.1-SNAPSHOT jackson-core diff --git a/jackson-modules/jackson-custom-conversions/pom.xml b/jackson-modules/jackson-custom-conversions/pom.xml index 79af962eece7..31e460511a40 100644 --- a/jackson-modules/jackson-custom-conversions/pom.xml +++ b/jackson-modules/jackson-custom-conversions/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 jackson-custom-conversions - 0.0.1-SNAPSHOT jackson-custom-conversions diff --git a/jackson-modules/jackson-exceptions/pom.xml b/jackson-modules/jackson-exceptions/pom.xml index a24a0ab4b710..e19ef4f8835b 100644 --- a/jackson-modules/jackson-exceptions/pom.xml +++ b/jackson-modules/jackson-exceptions/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 jackson-exceptions - 0.0.1-SNAPSHOT jackson-exceptions diff --git a/jackson-simple/pom.xml b/jackson-simple/pom.xml index f71cb1ffbfdc..65693245865f 100644 --- a/jackson-simple/pom.xml +++ b/jackson-simple/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 jackson-simple - 0.0.1-SNAPSHOT jackson-simple diff --git a/java-blockchain/pom.xml b/java-blockchain/pom.xml index 2279a7ceff8b..d45d2bf57378 100644 --- a/java-blockchain/pom.xml +++ b/java-blockchain/pom.xml @@ -5,7 +5,6 @@ 4.0.0 com.baeldung.blockchain java-blockchain - 0.1.0-SNAPSHOT java-blockchain jar diff --git a/java-jdi/pom.xml b/java-jdi/pom.xml index a8716de4eefd..b4c11c1bfec4 100644 --- a/java-jdi/pom.xml +++ b/java-jdi/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 java-jdi - 0.1.0-SNAPSHOT java-jdi jar diff --git a/java-panama/pom.xml b/java-panama/pom.xml index 8453a38abd7f..7c6b420eebae 100644 --- a/java-panama/pom.xml +++ b/java-panama/pom.xml @@ -1,49 +1,48 @@ - - ${project.model.version} + + ${project.model.version} + com.baeldung.java.panama + java-panama + ${project.version} + java-panama + jar - com.baeldung.java.panama - java-panama - ${project.version} - jar + + + org.junit.jupiter + junit-jupiter + ${junit.jupiter.version} + test + + - java-panama - https://maven.apache.org + + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven.compiler.version} + + ${maven.compiler.source} + ${maven.compiler.target} + + --add-opens=java.base/java.lang.foreign=ALL-UNNAMED + --enable-preview + + + + + - - 4.0.0 - UTF-8 - 1.0 - 19 - 19 - 3.10.1 - 5.9.0 - + + 4.0.0 + UTF-8 + 1.0 + 19 + 19 + 3.10.1 + 5.9.0 + - - - org.junit.jupiter - junit-jupiter - ${junit.jupiter.version} - test - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - ${maven.compiler.version} - - ${maven.compiler.source} - ${maven.compiler.target} - - --add-opens=java.base/java.lang.foreign=ALL-UNNAMED - --enable-preview - - - - - diff --git a/java-rmi/pom.xml b/java-rmi/pom.xml index fee5107423ce..2256883f84ba 100644 --- a/java-rmi/pom.xml +++ b/java-rmi/pom.xml @@ -5,7 +5,6 @@ 4.0.0 com.baeldung.rmi java-rmi - 1.0-SNAPSHOT java-rmi jar diff --git a/java-websocket/pom.xml b/java-websocket/pom.xml index 41c1b251c023..7c5c006aa9ec 100644 --- a/java-websocket/pom.xml +++ b/java-websocket/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 java-websocket - 0.0.1-SNAPSHOT java-websocket war diff --git a/javax-sound/pom.xml b/javax-sound/pom.xml index dcd08cbcb8d5..6652022a404b 100644 --- a/javax-sound/pom.xml +++ b/javax-sound/pom.xml @@ -5,7 +5,6 @@ 4.0.0 com.baeldung.javax-sound javax-sound - 1.0-SNAPSHOT javax-sound jar diff --git a/javax-validation-advanced/pom.xml b/javax-validation-advanced/pom.xml index 39da16607112..7709f37883b9 100644 --- a/javax-validation-advanced/pom.xml +++ b/javax-validation-advanced/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 javax-validation-advanced - 0.1-SNAPSHOT javax-validation-advanced diff --git a/javaxval-2/pom.xml b/javaxval-2/pom.xml index 5c311e10f821..1b1c4929c8bd 100644 --- a/javaxval-2/pom.xml +++ b/javaxval-2/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 javaxval-2 - 0.1-SNAPSHOT javaxval-2 diff --git a/javaxval/pom.xml b/javaxval/pom.xml index 1feed71abb57..78f37c20d900 100644 --- a/javaxval/pom.xml +++ b/javaxval/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 javaxval - 0.1-SNAPSHOT javaxval @@ -46,7 +45,7 @@ test - + diff --git a/jaxb/pom.xml b/jaxb/pom.xml index a7f0324bc016..ac448d2d62c9 100644 --- a/jaxb/pom.xml +++ b/jaxb/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 jaxb - 0.0.1-SNAPSHOT jaxb diff --git a/jenkins-modules/plugins/pom.xml b/jenkins-modules/plugins/pom.xml index 7f88382e2235..42add1664e4a 100644 --- a/jenkins-modules/plugins/pom.xml +++ b/jenkins-modules/plugins/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 plugins - 1.0-SNAPSHOT plugins hpi A sample Jenkins Hello World plugin diff --git a/jersey/pom.xml b/jersey/pom.xml index 9a212c6da1cd..005fa85077d1 100644 --- a/jersey/pom.xml +++ b/jersey/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 jersey - 0.0.1-SNAPSHOT jersey war diff --git a/jetbrains/pom.xml b/jetbrains/pom.xml index a10fd3b91366..ec46dc54f0af 100644 --- a/jetbrains/pom.xml +++ b/jetbrains/pom.xml @@ -7,7 +7,6 @@ 1.0-SNAPSHOT jetbrains jar - http://maven.apache.org com.baeldung diff --git a/jgit/pom.xml b/jgit/pom.xml index 91881fbec8fb..1b0d82e4d796 100644 --- a/jgit/pom.xml +++ b/jgit/pom.xml @@ -4,10 +4,8 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 jgit - 1.0-SNAPSHOT jgit jar - http://maven.apache.org com.baeldung @@ -15,14 +13,6 @@ 1.0.0-SNAPSHOT - - - jgit-repository - https://repo.eclipse.org/content/groups/releases/ - - - - org.eclipse.jgit @@ -36,6 +26,12 @@ + + + jgit-repository + https://repo.eclipse.org/content/groups/releases/ + + 4.5.0.201609210915-r diff --git a/jib/pom.xml b/jib/pom.xml index bbc9a3c623a8..2bdaa258f5af 100644 --- a/jib/pom.xml +++ b/jib/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 jib - 0.1-SNAPSHOT jib diff --git a/jmeter/pom.xml b/jmeter/pom.xml index 33cd56032e0e..5f4105d2829c 100644 --- a/jmeter/pom.xml +++ b/jmeter/pom.xml @@ -50,13 +50,13 @@ jmeter-maven-plugin ${jmeter-maven-plugin.version} - - - configuration - - configure - - + + + configuration + + configure + + jmeter-tests @@ -72,10 +72,6 @@ - - 3.7.0 - - dashboard @@ -167,4 +163,8 @@ + + 3.7.0 + + \ No newline at end of file diff --git a/jmh/pom.xml b/jmh/pom.xml index 6487b24ff483..5b98d59002a8 100644 --- a/jmh/pom.xml +++ b/jmh/pom.xml @@ -1,13 +1,11 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 jmh - 1.0-SNAPSHOT jmh jar - http://maven.apache.org com.baeldung diff --git a/jsf/pom.xml b/jsf/pom.xml index 4e1754055770..81030537fbda 100644 --- a/jsf/pom.xml +++ b/jsf/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 jsf - 0.1-SNAPSHOT jsf war @@ -79,7 +78,7 @@ 3.0.0 3.3.1 - + 1.3.1 diff --git a/json-modules/gson/pom.xml b/json-modules/gson/pom.xml index faa8a482975f..ecfbaa7be424 100644 --- a/json-modules/gson/pom.xml +++ b/json-modules/gson/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 gson - 0.1-SNAPSHOT gson diff --git a/json-modules/json-path/pom.xml b/json-modules/json-path/pom.xml index e467ee9557b7..88b81dfc688e 100644 --- a/json-modules/json-path/pom.xml +++ b/json-modules/json-path/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 json-path - 0.0.1-SNAPSHOT json-path diff --git a/json-modules/json/pom.xml b/json-modules/json/pom.xml index 06e67288c59f..bf6a511a9d5e 100644 --- a/json-modules/json/pom.xml +++ b/json-modules/json/pom.xml @@ -5,7 +5,6 @@ 4.0.0 org.baeldung json - 0.0.1-SNAPSHOT json diff --git a/jws/pom.xml b/jws/pom.xml index 3d2f67c691aa..8c14a16cff99 100644 --- a/jws/pom.xml +++ b/jws/pom.xml @@ -3,9 +3,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 - com.example jws - 0.0.1-SNAPSHOT jws war From 2d33ee4f8904ffb8a06a41da0259a36cde0123da Mon Sep 17 00:00:00 2001 From: etrandafir93 <75391049+etrandafir93@users.noreply.github.com> Date: Sun, 9 Apr 2023 05:28:06 +0300 Subject: [PATCH 046/390] BAEL-6285: added code support for JUnit5's @Timeout (#13784) --- .../junit5/timeout/TimeoutUnitTest.java | 79 +++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 testing-modules/junit5-annotations/src/test/java/com/baeldung/junit5/timeout/TimeoutUnitTest.java diff --git a/testing-modules/junit5-annotations/src/test/java/com/baeldung/junit5/timeout/TimeoutUnitTest.java b/testing-modules/junit5-annotations/src/test/java/com/baeldung/junit5/timeout/TimeoutUnitTest.java new file mode 100644 index 000000000000..b952dcf09f07 --- /dev/null +++ b/testing-modules/junit5-annotations/src/test/java/com/baeldung/junit5/timeout/TimeoutUnitTest.java @@ -0,0 +1,79 @@ +package com.baeldung.junit5.timeout; + +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.Timeout; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; + +import java.util.concurrent.TimeUnit; + + +@Timeout(5) +class TimeoutUnitTest { + + @Test + @Timeout(1) + void shouldFailAfterOneSecond() { + slowMethod(); + } + + @Test + @Timeout(value = 5, unit = TimeUnit.MINUTES, threadMode = Timeout.ThreadMode.SEPARATE_THREAD) + void shouldUseADifferentThread() { + System.out.println(Thread.currentThread().getName()); + slowMethod(); + } + + @Test + void shouldFailAfterDefaultTimeoutOfFiveSeconds() { + slowMethod(); + } + + @Test + @Timeout(value = 2, unit = TimeUnit.MINUTES) + void shouldFailAfterTwoMinutes() { + slowMethod(); + } + + @Timeout(1) + @ParameterizedTest + @ValueSource(ints = {1, 2, 3, 4, 5}) + void eachTestShouldFailAfterOneSecond(int input) { + slowMethod(); + } + + @Nested + class NestedClassWithoutTimeout { + @Test + void shouldFailAfterParentsDefaultTimeoutOfFiveSeconds() { + slowMethod(); + } + } + + @Nested + @Timeout(3) + class NestedClassWithTimeout { + + @Test + void shouldFailAfterNestedClassTimeoutOfThreeSeconds() { + slowMethod(); + } + + @Test + @Timeout(1) + void shouldFailAfterOneSecond() { + slowMethod(); + } + } + + private void slowMethod() { + try { +// Thread.sleep(10_000); +// just for demonstration purposes +// tests cannot fail on the pipeline, bue we need failing examples in the article + } catch (Exception e) { + throw new RuntimeException(e); + } + } +} From 302de4d5734f067084ed6af1e914112fca67d457 Mon Sep 17 00:00:00 2001 From: panos-kakos <102670093+panos-kakos@users.noreply.github.com> Date: Sun, 9 Apr 2023 05:48:38 +0300 Subject: [PATCH 047/390] [JAVA-19668] Clean up (#13767) --- .../baeldung/reflections/ReflectionsApp.java | 71 ------------------- .../reflections/ReflectionsUnitTest.java | 50 ------------- libraries-jdk8/README.md | 2 +- 3 files changed, 1 insertion(+), 122 deletions(-) delete mode 100644 libraries-6/src/main/java/com/baeldung/reflections/ReflectionsApp.java delete mode 100644 libraries-6/src/test/java/com/baeldung/reflections/ReflectionsUnitTest.java diff --git a/libraries-6/src/main/java/com/baeldung/reflections/ReflectionsApp.java b/libraries-6/src/main/java/com/baeldung/reflections/ReflectionsApp.java deleted file mode 100644 index 4f5b6dd1830c..000000000000 --- a/libraries-6/src/main/java/com/baeldung/reflections/ReflectionsApp.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.baeldung.reflections; - -import java.lang.reflect.Constructor; -import java.lang.reflect.Method; -import java.util.Date; -import java.util.Set; -import java.util.regex.Pattern; - -import org.reflections.Reflections; -import org.reflections.scanners.MethodAnnotationsScanner; -import org.reflections.scanners.MethodParameterScanner; -import org.reflections.scanners.ResourcesScanner; -import org.reflections.scanners.Scanner; -import org.reflections.scanners.SubTypesScanner; -import org.reflections.util.ClasspathHelper; -import org.reflections.util.ConfigurationBuilder; - -public class ReflectionsApp { - - public Set> getReflectionsSubTypes() { - Reflections reflections = new Reflections("org.reflections"); - Set> scannersSet = reflections.getSubTypesOf(Scanner.class); - return scannersSet; - } - - public Set> getJDKFunctinalInterfaces() { - Reflections reflections = new Reflections("java.util.function"); - Set> typesSet = reflections.getTypesAnnotatedWith(FunctionalInterface.class); - return typesSet; - } - - public Set getDateDeprecatedMethods() { - Reflections reflections = new Reflections(java.util.Date.class, new MethodAnnotationsScanner()); - Set deprecatedMethodsSet = reflections.getMethodsAnnotatedWith(Deprecated.class); - return deprecatedMethodsSet; - } - - @SuppressWarnings("rawtypes") - public Set getDateDeprecatedConstructors() { - Reflections reflections = new Reflections(java.util.Date.class, new MethodAnnotationsScanner()); - Set constructorsSet = reflections.getConstructorsAnnotatedWith(Deprecated.class); - return constructorsSet; - } - - public Set getMethodsWithDateParam() { - Reflections reflections = new Reflections(java.text.SimpleDateFormat.class, new MethodParameterScanner()); - Set methodsSet = reflections.getMethodsMatchParams(Date.class); - return methodsSet; - } - - public Set getMethodsWithVoidReturn() { - Reflections reflections = new Reflections(java.text.SimpleDateFormat.class, new MethodParameterScanner()); - Set methodsSet = reflections.getMethodsReturn(void.class); - return methodsSet; - } - - public Set getPomXmlPaths() { - Reflections reflections = new Reflections(new ResourcesScanner()); - Set resourcesSet = reflections.getResources(Pattern.compile(".*pom\\.xml")); - return resourcesSet; - } - - public Set> getReflectionsSubTypesUsingBuilder() { - Reflections reflections = new Reflections(new ConfigurationBuilder().setUrls(ClasspathHelper.forPackage("org.reflections")) - .setScanners(new SubTypesScanner())); - - Set> scannersSet = reflections.getSubTypesOf(Scanner.class); - return scannersSet; - } - -} diff --git a/libraries-6/src/test/java/com/baeldung/reflections/ReflectionsUnitTest.java b/libraries-6/src/test/java/com/baeldung/reflections/ReflectionsUnitTest.java deleted file mode 100644 index b86094b6f4a8..000000000000 --- a/libraries-6/src/test/java/com/baeldung/reflections/ReflectionsUnitTest.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.baeldung.reflections; - -import static org.junit.jupiter.api.Assertions.assertFalse; - -import org.junit.jupiter.api.Test; - -public class ReflectionsUnitTest { - - @Test - public void givenTypeThenGetAllSubTypes() { - ReflectionsApp reflectionsApp = new ReflectionsApp(); - assertFalse(reflectionsApp.getReflectionsSubTypes() - .isEmpty()); - } - - @Test - public void givenTypeAndUsingBuilderThenGetAllSubTypes() { - ReflectionsApp reflectionsApp = new ReflectionsApp(); - assertFalse(reflectionsApp.getReflectionsSubTypesUsingBuilder() - .isEmpty()); - } - - @Test - public void givenAnnotationThenGetAllAnnotatedMethods() { - ReflectionsApp reflectionsApp = new ReflectionsApp(); - assertFalse(reflectionsApp.getDateDeprecatedMethods() - .isEmpty()); - } - - @Test - public void givenAnnotationThenGetAllAnnotatedConstructors() { - ReflectionsApp reflectionsApp = new ReflectionsApp(); - assertFalse(reflectionsApp.getDateDeprecatedConstructors() - .isEmpty()); - } - - @Test - public void givenParamTypeThenGetAllMethods() { - ReflectionsApp reflectionsApp = new ReflectionsApp(); - assertFalse(reflectionsApp.getMethodsWithDateParam() - .isEmpty()); - } - - @Test - public void givenReturnTypeThenGetAllMethods() { - ReflectionsApp reflectionsApp = new ReflectionsApp(); - assertFalse(reflectionsApp.getMethodsWithVoidReturn() - .isEmpty()); - } -} diff --git a/libraries-jdk8/README.md b/libraries-jdk8/README.md index 1aefc5428983..fa2126c89a97 100644 --- a/libraries-jdk8/README.md +++ b/libraries-jdk8/README.md @@ -1,4 +1,4 @@ -## Libraries-7 +## Libraries-jdk8 This module contains articles about various Java libraries. These are small libraries that are relatively easy to use and do not require any separate module of their own. From 670c192e25a08468bf4e8310a1d914337a36b2bd Mon Sep 17 00:00:00 2001 From: panos-kakos <102670093+panos-kakos@users.noreply.github.com> Date: Sun, 9 Apr 2023 06:01:05 +0300 Subject: [PATCH 048/390] [JAVA-18185] Downgrade to groovy 3 for spock (#13783) --- spring-boot-modules/spring-boot-testing/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-boot-modules/spring-boot-testing/pom.xml b/spring-boot-modules/spring-boot-testing/pom.xml index f54a1964f928..7eadfd9b240b 100644 --- a/spring-boot-modules/spring-boot-testing/pom.xml +++ b/spring-boot-modules/spring-boot-testing/pom.xml @@ -147,7 +147,7 @@ com.baeldung.boot.Application 2.2.4 - 2.4-M1-groovy-4.0 + 2.4-M1-groovy-3.0 2.0.0 3.10.1 0.7.2 From 8e1dde8c678f6311fee695cb62e48ff1e8b8ab28 Mon Sep 17 00:00:00 2001 From: Azhwani <13301425+azhwani@users.noreply.github.com> Date: Sun, 9 Apr 2023 10:26:01 +0200 Subject: [PATCH 049/390] BAEL-6311: Applying @JsonValue on fields in Jackson (#13749) Co-authored-by: Luis Javier Peris Morillo --- .../jackson/annotation/PriorityEnum.java | 16 ++++++++++++++++ .../annotation/JacksonAnnotationUnitTest.java | 10 ++++++++-- 2 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 jackson-simple/src/main/java/com/baeldung/jackson/annotation/PriorityEnum.java diff --git a/jackson-simple/src/main/java/com/baeldung/jackson/annotation/PriorityEnum.java b/jackson-simple/src/main/java/com/baeldung/jackson/annotation/PriorityEnum.java new file mode 100644 index 000000000000..ed74052edebb --- /dev/null +++ b/jackson-simple/src/main/java/com/baeldung/jackson/annotation/PriorityEnum.java @@ -0,0 +1,16 @@ +package com.baeldung.jackson.annotation; + +import com.fasterxml.jackson.annotation.JsonValue; + +public enum PriorityEnum { + + LOW(0), MEDIUM(1), HIGH(3); + + @JsonValue + private int level; + + PriorityEnum(int level) { + this.level = level; + } + +} diff --git a/jackson-simple/src/test/java/com/baeldung/jackson/annotation/JacksonAnnotationUnitTest.java b/jackson-simple/src/test/java/com/baeldung/jackson/annotation/JacksonAnnotationUnitTest.java index 9fb982842f03..57ef2318259f 100644 --- a/jackson-simple/src/test/java/com/baeldung/jackson/annotation/JacksonAnnotationUnitTest.java +++ b/jackson-simple/src/test/java/com/baeldung/jackson/annotation/JacksonAnnotationUnitTest.java @@ -25,6 +25,7 @@ import com.baeldung.jackson.annotation.dtos.withEnum.DistanceEnumWithValue; import com.baeldung.jackson.annotation.exception.UserWithRoot; import com.baeldung.jackson.annotation.exception.UserWithRootNamespace; +import com.baeldung.jackson.annotation.ignore.MyMixInForIgnoreType; import com.baeldung.jackson.annotation.jsonview.Item; import com.baeldung.jackson.annotation.jsonview.Views; import com.fasterxml.jackson.core.JsonProcessingException; @@ -97,6 +98,13 @@ public void whenSerializingUsingJsonValue_thenCorrect() throws IOException { } + @Test + public void whenSerializingFieldUsingJsonValue_thenCorrect() throws IOException { + final String enumAsString = new ObjectMapper().writeValueAsString(PriorityEnum.HIGH); + + assertEquals("3", enumAsString); + } + @Test public void whenSerializingUsingJsonSerialize_thenCorrect() throws JsonProcessingException, ParseException { final SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy hh:mm:ss"); @@ -432,7 +440,5 @@ public void whenSerializingUsingXMLRootNameWithNameSpace_thenCorrect() throws Js */ } - - } From d65b786abbffcde103a219fbf2cc8d2236103a4e Mon Sep 17 00:00:00 2001 From: panos-kakos <102670093+panos-kakos@users.noreply.github.com> Date: Sun, 9 Apr 2023 17:48:23 +0300 Subject: [PATCH 050/390] [JAVA-18156] (#13787) * [JAVA-18156] * [JAVA-18156] Revert changes + use correct profile --- logging-modules/log4j2/pom.xml | 47 ++++--------------- .../tests/CustomLoggingIntegrationTest.java | 18 +++---- .../log4j2/src/test/resources/log4j2.xml | 4 +- 3 files changed, 21 insertions(+), 48 deletions(-) diff --git a/logging-modules/log4j2/pom.xml b/logging-modules/log4j2/pom.xml index 50c71145565b..9fa58769b2d7 100644 --- a/logging-modules/log4j2/pom.xml +++ b/logging-modules/log4j2/pom.xml @@ -68,46 +68,19 @@ none + + org.apache.maven.plugins + maven-surefire-plugin + + + json + ${java.io.tmpdir}/${maven.build.timestamp}/logfile.json + + + - - - integration-lite-first - - - - org.apache.maven.plugins - maven-surefire-plugin - - - integration-test - - test - - - - **/*ManualTest.java - **/*LiveTest.java - - - **/*IntegrationTest.java - **/*IntTest.java - - - - - - - json - ${java.io.tmpdir}/${maven.build.timestamp}/logfile.json - - - - - - - 2.9.0 diff --git a/logging-modules/log4j2/src/test/java/com/baeldung/logging/log4j2/tests/CustomLoggingIntegrationTest.java b/logging-modules/log4j2/src/test/java/com/baeldung/logging/log4j2/tests/CustomLoggingIntegrationTest.java index 3e94e4e43061..06fbb33b9d53 100644 --- a/logging-modules/log4j2/src/test/java/com/baeldung/logging/log4j2/tests/CustomLoggingIntegrationTest.java +++ b/logging-modules/log4j2/src/test/java/com/baeldung/logging/log4j2/tests/CustomLoggingIntegrationTest.java @@ -21,7 +21,7 @@ @RunWith(JUnit4.class) public class CustomLoggingIntegrationTest { - + private static String logFilePath = System.getProperty("logging.folder.path"); @BeforeClass @@ -34,7 +34,7 @@ public static void setup() throws Exception { } @Test - public void givenLoggerWithDefaultConfig_whenLogToConsole_thanOK() throws Exception { + public void givenLoggerWithDefaultConfig_whenLogToConsole_thenOK() throws Exception { Logger logger = LogManager.getLogger(getClass()); Exception e = new RuntimeException("This is only a test!"); @@ -43,7 +43,7 @@ public void givenLoggerWithDefaultConfig_whenLogToConsole_thanOK() throws Except } @Test - public void givenLoggerWithConsoleConfig_whenLogToConsoleInColors_thanOK() throws Exception { + public void givenLoggerWithConsoleConfig_whenLogToConsoleInColors_thenOK() throws Exception { Logger logger = LogManager.getLogger("CONSOLE_PATTERN_APPENDER_MARKER"); Exception e = new RuntimeException("This is only a test!"); @@ -56,7 +56,7 @@ public void givenLoggerWithConsoleConfig_whenLogToConsoleInColors_thanOK() throw } @Test - public void givenLoggerWithConsoleConfig_whenFilterByMarker_thanOK() throws Exception { + public void givenLoggerWithConsoleConfig_whenFilterByMarker_thenOK() throws Exception { Logger logger = LogManager.getLogger("CONSOLE_PATTERN_APPENDER_MARKER"); Marker appError = MarkerManager.getMarker("APP_ERROR"); Marker connectionTrace = MarkerManager.getMarker("CONN_TRACE"); @@ -66,7 +66,7 @@ public void givenLoggerWithConsoleConfig_whenFilterByMarker_thanOK() throws Exce } @Test - public void givenLoggerWithConsoleConfig_whenFilterByThreadContext_thanOK() throws Exception { + public void givenLoggerWithConsoleConfig_whenFilterByThreadContext_thenOK() throws Exception { Logger logger = LogManager.getLogger("CONSOLE_PATTERN_APPENDER_THREAD_CONTEXT"); ThreadContext.put("userId", "1000"); logger.info("This is a log-visible user login. Maybe from an admin account?"); @@ -75,7 +75,7 @@ public void givenLoggerWithConsoleConfig_whenFilterByThreadContext_thanOK() thro } @Test - public void givenLoggerWithAsyncConfig_whenLogToJsonFile_thanOK() throws Exception { + public void givenLoggerWithAsyncConfig_whenLogToJsonFile_thenOK() throws Exception { Logger logger = LogManager.getLogger("ASYNC_JSON_FILE_APPENDER"); final int count = 88; @@ -90,7 +90,7 @@ public void givenLoggerWithAsyncConfig_whenLogToJsonFile_thanOK() throws Excepti } @Test - public void givenLoggerWithFailoverConfig_whenLog_thanOK() throws Exception { + public void givenLoggerWithFailoverConfig_whenLog_thenOK() throws Exception { Logger logger = LogManager.getLogger("FAIL_OVER_SYSLOG_APPENDER"); Exception e = new RuntimeException("This is only a test!"); @@ -103,7 +103,7 @@ public void givenLoggerWithFailoverConfig_whenLog_thanOK() throws Exception { } @Test - public void givenLoggerWithJdbcConfig_whenLogToDataSource_thanOK() throws Exception { + public void givenLoggerWithJdbcConfig_whenLogToDataSource_thenOK() throws Exception { Logger logger = LogManager.getLogger("JDBC_APPENDER"); final int count = 88; @@ -122,7 +122,7 @@ public void givenLoggerWithJdbcConfig_whenLogToDataSource_thanOK() throws Except } @Test - public void givenLoggerWithRollingFileConfig_whenLogToXMLFile_thanOK() throws Exception { + public void givenLoggerWithRollingFileConfig_whenLogToXMLFile_thenOK() throws Exception { Logger logger = LogManager.getLogger("XML_ROLLING_FILE_APPENDER"); final int count = 88; diff --git a/logging-modules/log4j2/src/test/resources/log4j2.xml b/logging-modules/log4j2/src/test/resources/log4j2.xml index 050e0aa705c0..6516d9884ce3 100644 --- a/logging-modules/log4j2/src/test/resources/log4j2.xml +++ b/logging-modules/log4j2/src/test/resources/log4j2.xml @@ -1,5 +1,5 @@ - - + From 6f3afad74fd05366550b9c8534c88f5eb2b60b45 Mon Sep 17 00:00:00 2001 From: Deboshree Date: Mon, 10 Apr 2023 08:30:15 +0530 Subject: [PATCH 051/390] https://jira.baeldung.com/browse/BAEL-5837 pass default value as method param --- .../java/com/baeldung/stringtoint/StringToIntConverter.java | 4 ++-- .../baeldung/stringtoint/StringToIntConverterUnitTest.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/core-java-modules/core-java-string-conversions-3/src/main/java/com/baeldung/stringtoint/StringToIntConverter.java b/core-java-modules/core-java-string-conversions-3/src/main/java/com/baeldung/stringtoint/StringToIntConverter.java index fd19ca61d61f..52d227c379a9 100644 --- a/core-java-modules/core-java-string-conversions-3/src/main/java/com/baeldung/stringtoint/StringToIntConverter.java +++ b/core-java-modules/core-java-string-conversions-3/src/main/java/com/baeldung/stringtoint/StringToIntConverter.java @@ -46,8 +46,8 @@ public static Integer convertStringToIntUsingOptional(String input){ return parsedInt.orElse(Integer.MIN_VALUE); } - public static int convertStringToIntUsingNumberUtils(String input){ - return NumberUtils.toInt(input, Integer.MIN_VALUE); + public static int convertStringToIntUsingNumberUtils(String input, Integer defaultValue){ + return NumberUtils.toInt(input, defaultValue); } } diff --git a/core-java-modules/core-java-string-conversions-3/src/test/java/com/baeldung/stringtoint/StringToIntConverterUnitTest.java b/core-java-modules/core-java-string-conversions-3/src/test/java/com/baeldung/stringtoint/StringToIntConverterUnitTest.java index a1d365b3615c..1bd74509142d 100644 --- a/core-java-modules/core-java-string-conversions-3/src/test/java/com/baeldung/stringtoint/StringToIntConverterUnitTest.java +++ b/core-java-modules/core-java-string-conversions-3/src/test/java/com/baeldung/stringtoint/StringToIntConverterUnitTest.java @@ -22,7 +22,7 @@ void whenConvertingIntToString_thenInvalidCasesReturnIntegerMinValue() { Assertions.assertEquals(data.expectedOutput, StringToIntConverter.convertStringToIntUsingIntegerValueOf(data.input)); Assertions.assertEquals(data.expectedOutput, StringToIntConverter.convertStringToIntUsingOptional(data.input)); Assertions.assertEquals(data.expectedOutput, StringToIntConverter.convertStringToIntUsingIntegerDecode(data.input)); - Assertions.assertEquals(data.expectedOutput, StringToIntConverter.convertStringToIntUsingNumberUtils(data.input)); + Assertions.assertEquals(data.expectedOutput, StringToIntConverter.convertStringToIntUsingNumberUtils(data.input,Integer.MIN_VALUE )); }); } @@ -36,7 +36,7 @@ void whenConvertingIntToString_thenValidCasesReturnUnboxedInt() { Assertions.assertEquals(data.expectedOutput, StringToIntConverter.convertStringToIntUsingIntegerParseInt(data.input)); Assertions.assertEquals(data.expectedOutput, StringToIntConverter.convertStringToIntUsingIntegerValueOf(data.input)); Assertions.assertEquals(data.expectedOutput, StringToIntConverter.convertStringToIntUsingOptional(data.input)); - Assertions.assertEquals(data.expectedOutput, StringToIntConverter.convertStringToIntUsingNumberUtils(data.input)); + Assertions.assertEquals(data.expectedOutput, StringToIntConverter.convertStringToIntUsingNumberUtils(data.input, Integer.MIN_VALUE)); Assertions.assertEquals(data.expectedOutput, StringToIntConverter.convertStringToIntUsingIntegerDecode(data.input)); }); } From 64e12db5b777fd11c2f53271ec048520d4064510 Mon Sep 17 00:00:00 2001 From: mdabrowski-eu <57441874+mdabrowski-eu@users.noreply.github.com> Date: Mon, 10 Apr 2023 07:59:12 +0200 Subject: [PATCH 052/390] BAEL-6216 Use Mapper in Another Mapper with Mapstruct and Java (#13802) --- .../java/com/baeldung/dto/ArticleDTO.java | 12 +++++ .../java/com/baeldung/entity/Article.java | 12 +++++ .../com/baeldung/mapper/ArticleMapper.java | 20 ++++++++ .../mapper/ArticleUsingPersonMapper.java | 16 ++++++ .../mapper/ArticleMapperUnitTest.java | 49 +++++++++++++++++++ 5 files changed, 109 insertions(+) create mode 100644 mapstruct/src/main/java/com/baeldung/dto/ArticleDTO.java create mode 100644 mapstruct/src/main/java/com/baeldung/entity/Article.java create mode 100644 mapstruct/src/main/java/com/baeldung/mapper/ArticleMapper.java create mode 100644 mapstruct/src/main/java/com/baeldung/mapper/ArticleUsingPersonMapper.java create mode 100644 mapstruct/src/test/java/com/baeldung/mapper/ArticleMapperUnitTest.java diff --git a/mapstruct/src/main/java/com/baeldung/dto/ArticleDTO.java b/mapstruct/src/main/java/com/baeldung/dto/ArticleDTO.java new file mode 100644 index 000000000000..708167de949a --- /dev/null +++ b/mapstruct/src/main/java/com/baeldung/dto/ArticleDTO.java @@ -0,0 +1,12 @@ +package com.baeldung.dto; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class ArticleDTO { + private int id; + private String name; + private PersonDTO author; +} diff --git a/mapstruct/src/main/java/com/baeldung/entity/Article.java b/mapstruct/src/main/java/com/baeldung/entity/Article.java new file mode 100644 index 000000000000..4aff8f416673 --- /dev/null +++ b/mapstruct/src/main/java/com/baeldung/entity/Article.java @@ -0,0 +1,12 @@ +package com.baeldung.entity; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class Article { + private int id; + private String name; + private Person author; +} diff --git a/mapstruct/src/main/java/com/baeldung/mapper/ArticleMapper.java b/mapstruct/src/main/java/com/baeldung/mapper/ArticleMapper.java new file mode 100644 index 000000000000..b5b47f6b3b51 --- /dev/null +++ b/mapstruct/src/main/java/com/baeldung/mapper/ArticleMapper.java @@ -0,0 +1,20 @@ +package com.baeldung.mapper; + +import com.baeldung.dto.ArticleDTO; +import com.baeldung.dto.PersonDTO; +import com.baeldung.entity.Article; +import com.baeldung.entity.Person; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +@Mapper +public interface ArticleMapper { + + ArticleMapper INSTANCE = Mappers.getMapper(ArticleMapper.class); + + ArticleDTO articleToArticleDto(Article article); + + default PersonDTO personToPersonDto(Person person) { + return Mappers.getMapper(PersonMapper.class).personToPersonDTO(person); + } +} diff --git a/mapstruct/src/main/java/com/baeldung/mapper/ArticleUsingPersonMapper.java b/mapstruct/src/main/java/com/baeldung/mapper/ArticleUsingPersonMapper.java new file mode 100644 index 000000000000..c1ea0797ed0f --- /dev/null +++ b/mapstruct/src/main/java/com/baeldung/mapper/ArticleUsingPersonMapper.java @@ -0,0 +1,16 @@ +package com.baeldung.mapper; + +import com.baeldung.dto.ArticleDTO; +import com.baeldung.dto.PersonDTO; +import com.baeldung.entity.Article; +import com.baeldung.entity.Person; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +@Mapper(uses = PersonMapper.class) +public interface ArticleUsingPersonMapper { + + ArticleUsingPersonMapper INSTANCE = Mappers.getMapper(ArticleUsingPersonMapper.class); + + ArticleDTO articleToArticleDto(Article article); +} diff --git a/mapstruct/src/test/java/com/baeldung/mapper/ArticleMapperUnitTest.java b/mapstruct/src/test/java/com/baeldung/mapper/ArticleMapperUnitTest.java new file mode 100644 index 000000000000..2470915a0190 --- /dev/null +++ b/mapstruct/src/test/java/com/baeldung/mapper/ArticleMapperUnitTest.java @@ -0,0 +1,49 @@ +package com.baeldung.mapper; + +import com.baeldung.dto.ArticleDTO; +import com.baeldung.dto.CarDTO; +import com.baeldung.entity.Article; +import com.baeldung.entity.Car; +import com.baeldung.entity.Person; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class ArticleMapperUnitTest { + + @Test + public void givenArticle_whenMaps_thenProducesCorrectDto() { + + Article entity = new Article(); + entity.setId(1); + entity.setName("Mapstruct Mapping"); + Person author = new Person(); + author.setId("1"); + author.setName("John"); + entity.setAuthor(author); + + ArticleDTO articleDTO = ArticleMapper.INSTANCE.articleToArticleDto(entity); + + assertEquals(articleDTO.getId(), entity.getId()); + assertEquals(articleDTO.getName(), entity.getName()); + assertEquals(articleDTO.getAuthor().getName(), entity.getAuthor().getName()); + } + + @Test + public void givenArticle_whenMapsWithUses_thenProducesCorrectDto() { + + Article entity = new Article(); + entity.setId(1); + entity.setName("Mapstruct Mapping"); + Person author = new Person(); + author.setId("1"); + author.setName("John"); + entity.setAuthor(author); + + ArticleDTO articleDTO = ArticleUsingPersonMapper.INSTANCE.articleToArticleDto(entity); + + assertEquals(articleDTO.getId(), entity.getId()); + assertEquals(articleDTO.getName(), entity.getName()); + assertEquals(articleDTO.getAuthor().getName(), entity.getAuthor().getName()); + } +} From 5cabae4de27826fb6c00600a6a4e490abde603a2 Mon Sep 17 00:00:00 2001 From: anuragkumawat Date: Mon, 10 Apr 2023 15:07:29 +0530 Subject: [PATCH 053/390] JAVA-19118 Create new core-java-locale sub module under core-java-modules (#13612) * JAVA-19118 Create new core-java-locale sub module under core-java-modules --- core-java-modules/core-java-locale/README.md | 6 ++++++ core-java-modules/core-java-locale/pom.xml | 20 +++++++++++++++++++ .../resourcebundle/ExampleControl.java | 0 .../resourcebundle/ExampleResource.java | 0 .../resourcebundle/ExampleResource_pl.java | 0 .../resourcebundle/ExampleResource_pl_PL.java | 0 .../resourcebundle/resource.properties | 0 .../resourcebundle/resource_en.properties | 0 .../resourcebundle/resource_pl_PL.properties | 0 .../ExampleResourceUnitTest.java | 0 .../PropertyResourceUnitTest.java | 0 core-java-modules/core-java/README.md | 1 - core-java-modules/pom.xml | 1 + 13 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 core-java-modules/core-java-locale/README.md create mode 100644 core-java-modules/core-java-locale/pom.xml rename core-java-modules/{core-java => core-java-locale}/src/main/java/com/baeldung/resourcebundle/ExampleControl.java (100%) rename core-java-modules/{core-java => core-java-locale}/src/main/java/com/baeldung/resourcebundle/ExampleResource.java (100%) rename core-java-modules/{core-java => core-java-locale}/src/main/java/com/baeldung/resourcebundle/ExampleResource_pl.java (100%) rename core-java-modules/{core-java => core-java-locale}/src/main/java/com/baeldung/resourcebundle/ExampleResource_pl_PL.java (100%) rename core-java-modules/{core-java => core-java-locale}/src/main/resources/resourcebundle/resource.properties (100%) rename core-java-modules/{core-java => core-java-locale}/src/main/resources/resourcebundle/resource_en.properties (100%) rename core-java-modules/{core-java => core-java-locale}/src/main/resources/resourcebundle/resource_pl_PL.properties (100%) rename core-java-modules/{core-java => core-java-locale}/src/test/java/com/baeldung/resourcebundle/ExampleResourceUnitTest.java (100%) rename core-java-modules/{core-java => core-java-locale}/src/test/java/com/baeldung/resourcebundle/PropertyResourceUnitTest.java (100%) diff --git a/core-java-modules/core-java-locale/README.md b/core-java-modules/core-java-locale/README.md new file mode 100644 index 000000000000..744b5e760f3c --- /dev/null +++ b/core-java-modules/core-java-locale/README.md @@ -0,0 +1,6 @@ + Core Java Locale + +### Relevant Articles: + +- [A Guide to the ResourceBundle](http://www.baeldung.com/java-resourcebundle) + diff --git a/core-java-modules/core-java-locale/pom.xml b/core-java-modules/core-java-locale/pom.xml new file mode 100644 index 000000000000..f493d572a131 --- /dev/null +++ b/core-java-modules/core-java-locale/pom.xml @@ -0,0 +1,20 @@ + + + 4.0.0 + core-java-locale + 0.1.0-SNAPSHOT + core-java-locale + jar + + + com.baeldung.core-java-modules + core-java-modules + 0.0.1-SNAPSHOT + + + + + + \ No newline at end of file diff --git a/core-java-modules/core-java/src/main/java/com/baeldung/resourcebundle/ExampleControl.java b/core-java-modules/core-java-locale/src/main/java/com/baeldung/resourcebundle/ExampleControl.java similarity index 100% rename from core-java-modules/core-java/src/main/java/com/baeldung/resourcebundle/ExampleControl.java rename to core-java-modules/core-java-locale/src/main/java/com/baeldung/resourcebundle/ExampleControl.java diff --git a/core-java-modules/core-java/src/main/java/com/baeldung/resourcebundle/ExampleResource.java b/core-java-modules/core-java-locale/src/main/java/com/baeldung/resourcebundle/ExampleResource.java similarity index 100% rename from core-java-modules/core-java/src/main/java/com/baeldung/resourcebundle/ExampleResource.java rename to core-java-modules/core-java-locale/src/main/java/com/baeldung/resourcebundle/ExampleResource.java diff --git a/core-java-modules/core-java/src/main/java/com/baeldung/resourcebundle/ExampleResource_pl.java b/core-java-modules/core-java-locale/src/main/java/com/baeldung/resourcebundle/ExampleResource_pl.java similarity index 100% rename from core-java-modules/core-java/src/main/java/com/baeldung/resourcebundle/ExampleResource_pl.java rename to core-java-modules/core-java-locale/src/main/java/com/baeldung/resourcebundle/ExampleResource_pl.java diff --git a/core-java-modules/core-java/src/main/java/com/baeldung/resourcebundle/ExampleResource_pl_PL.java b/core-java-modules/core-java-locale/src/main/java/com/baeldung/resourcebundle/ExampleResource_pl_PL.java similarity index 100% rename from core-java-modules/core-java/src/main/java/com/baeldung/resourcebundle/ExampleResource_pl_PL.java rename to core-java-modules/core-java-locale/src/main/java/com/baeldung/resourcebundle/ExampleResource_pl_PL.java diff --git a/core-java-modules/core-java/src/main/resources/resourcebundle/resource.properties b/core-java-modules/core-java-locale/src/main/resources/resourcebundle/resource.properties similarity index 100% rename from core-java-modules/core-java/src/main/resources/resourcebundle/resource.properties rename to core-java-modules/core-java-locale/src/main/resources/resourcebundle/resource.properties diff --git a/core-java-modules/core-java/src/main/resources/resourcebundle/resource_en.properties b/core-java-modules/core-java-locale/src/main/resources/resourcebundle/resource_en.properties similarity index 100% rename from core-java-modules/core-java/src/main/resources/resourcebundle/resource_en.properties rename to core-java-modules/core-java-locale/src/main/resources/resourcebundle/resource_en.properties diff --git a/core-java-modules/core-java/src/main/resources/resourcebundle/resource_pl_PL.properties b/core-java-modules/core-java-locale/src/main/resources/resourcebundle/resource_pl_PL.properties similarity index 100% rename from core-java-modules/core-java/src/main/resources/resourcebundle/resource_pl_PL.properties rename to core-java-modules/core-java-locale/src/main/resources/resourcebundle/resource_pl_PL.properties diff --git a/core-java-modules/core-java/src/test/java/com/baeldung/resourcebundle/ExampleResourceUnitTest.java b/core-java-modules/core-java-locale/src/test/java/com/baeldung/resourcebundle/ExampleResourceUnitTest.java similarity index 100% rename from core-java-modules/core-java/src/test/java/com/baeldung/resourcebundle/ExampleResourceUnitTest.java rename to core-java-modules/core-java-locale/src/test/java/com/baeldung/resourcebundle/ExampleResourceUnitTest.java diff --git a/core-java-modules/core-java/src/test/java/com/baeldung/resourcebundle/PropertyResourceUnitTest.java b/core-java-modules/core-java-locale/src/test/java/com/baeldung/resourcebundle/PropertyResourceUnitTest.java similarity index 100% rename from core-java-modules/core-java/src/test/java/com/baeldung/resourcebundle/PropertyResourceUnitTest.java rename to core-java-modules/core-java-locale/src/test/java/com/baeldung/resourcebundle/PropertyResourceUnitTest.java diff --git a/core-java-modules/core-java/README.md b/core-java-modules/core-java/README.md index 087c5d356ee8..f29d6abd7c2c 100644 --- a/core-java-modules/core-java/README.md +++ b/core-java-modules/core-java/README.md @@ -6,6 +6,5 @@ - [Java Money and the Currency API](http://www.baeldung.com/java-money-and-currency) - [Compiling Java *.class Files with javac](http://www.baeldung.com/javac) - [Introduction to Javadoc](http://www.baeldung.com/javadoc) -- [A Guide to the ResourceBundle](http://www.baeldung.com/java-resourcebundle) - [Merging java.util.Properties Objects](https://www.baeldung.com/java-merging-properties) - [Illegal Character Compilation Error](https://www.baeldung.com/java-illegal-character-error) diff --git a/core-java-modules/pom.xml b/core-java-modules/pom.xml index 1292cdc6c8a0..c5dbdca29966 100644 --- a/core-java-modules/pom.xml +++ b/core-java-modules/pom.xml @@ -106,6 +106,7 @@ core-java-lang-operators-2 core-java-lang-syntax core-java-lang-syntax-2 + core-java-locale core-java-networking core-java-networking-2 core-java-networking-4 From 3d28406534318f653701c8e1d8295a2f782f011e Mon Sep 17 00:00:00 2001 From: jsgrah-spring Date: Mon, 10 Apr 2023 13:35:40 +0200 Subject: [PATCH 054/390] JAVA-18116 Review log statements for projects - Week 7 - 2023 (#13583) JAVA-18116 Review log statements for projects - Week 7 - 2023 (#13583) --------- Co-authored-by: jogra --- .../concurrent/countdownlatch/Worker.java | 7 ++++++- .../concurrent/phaser/LongRunningAction.java | 15 ++++++++++----- .../concurrent/phaser/PhaserUnitTest.java | 15 ++++++++++----- .../src/test/resources/logback-test.xml | 19 +++++++++++++++++++ libraries-apache-commons-io/pom.xml | 5 +++++ .../commons/io/CommonsIOUnitTest.java | 9 ++++++--- .../src/test/resources/logback-test.xml | 12 ++++++++++++ .../model/HighEndComputerBuilder.java | 5 ++++- .../model/StandardComputerBuilder.java | 7 +++++-- .../src/test/resources/logback-test.xml | 12 ++++++++++++ .../service/TaxiFareCalculatorService.java | 6 +++++- .../VertxWithRxJavaIntegrationTest.java | 10 +++++----- 12 files changed, 99 insertions(+), 23 deletions(-) create mode 100644 core-java-modules/core-java-concurrency-advanced/src/test/resources/logback-test.xml create mode 100644 libraries-apache-commons-io/src/test/resources/logback-test.xml create mode 100644 patterns-modules/design-patterns-behavioral/src/test/resources/logback-test.xml diff --git a/core-java-modules/core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/countdownlatch/Worker.java b/core-java-modules/core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/countdownlatch/Worker.java index 389e25719bdb..d23f1faa691d 100644 --- a/core-java-modules/core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/countdownlatch/Worker.java +++ b/core-java-modules/core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/countdownlatch/Worker.java @@ -1,9 +1,14 @@ package com.baeldung.concurrent.countdownlatch; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import java.util.List; import java.util.concurrent.CountDownLatch; public class Worker implements Runnable { + + private static Logger log = LoggerFactory.getLogger(Worker.class); private final List outputScraper; private final CountDownLatch countDownLatch; @@ -15,7 +20,7 @@ public class Worker implements Runnable { @Override public void run() { // Do some work - System.out.println("Doing some logic"); + log.debug("Doing some logic"); outputScraper.add("Counted down"); countDownLatch.countDown(); } diff --git a/core-java-modules/core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/phaser/LongRunningAction.java b/core-java-modules/core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/phaser/LongRunningAction.java index c022c0208579..44f84ad77c3c 100644 --- a/core-java-modules/core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/phaser/LongRunningAction.java +++ b/core-java-modules/core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/phaser/LongRunningAction.java @@ -1,8 +1,13 @@ package com.baeldung.concurrent.phaser; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import java.util.concurrent.Phaser; class LongRunningAction implements Runnable { + + private static Logger log = LoggerFactory.getLogger(LongRunningAction.class); private String threadName; private Phaser ph; @@ -14,18 +19,18 @@ class LongRunningAction implements Runnable { @Override public void run() { - System.out.println("This is phase " + ph.getPhase()); - System.out.println("Thread " + threadName + " before long running action"); + log.info("This is phase {}", ph.getPhase()); + log.info("Thread {} before long running action", threadName); try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } - - System.out.println("Thread " + threadName + " action completed and waiting for others"); + + log.debug("Thread {} action completed and waiting for others", threadName); ph.arriveAndAwaitAdvance(); - System.out.println("Thread " + threadName + " proceeding in phase " + ph.getPhase()); + log.debug("Thread {} proceeding in phase {}", threadName, ph.getPhase()); ph.arriveAndDeregister(); } diff --git a/core-java-modules/core-java-concurrency-advanced/src/test/java/com/baeldung/concurrent/phaser/PhaserUnitTest.java b/core-java-modules/core-java-concurrency-advanced/src/test/java/com/baeldung/concurrent/phaser/PhaserUnitTest.java index 88c18b51490a..384a1837c133 100644 --- a/core-java-modules/core-java-concurrency-advanced/src/test/java/com/baeldung/concurrent/phaser/PhaserUnitTest.java +++ b/core-java-modules/core-java-concurrency-advanced/src/test/java/com/baeldung/concurrent/phaser/PhaserUnitTest.java @@ -4,6 +4,9 @@ import org.junit.Test; import org.junit.runners.MethodSorters; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Phaser; @@ -13,6 +16,8 @@ @FixMethodOrder(MethodSorters.NAME_ASCENDING) public class PhaserUnitTest { + private static Logger log = LoggerFactory.getLogger(PhaserUnitTest.class); + @Test public void givenPhaser_whenCoordinateWorksBetweenThreads_thenShouldCoordinateBetweenMultiplePhases() { //given @@ -26,19 +31,19 @@ public void givenPhaser_whenCoordinateWorksBetweenThreads_thenShouldCoordinateBe executorService.submit(new LongRunningAction("thread-3", ph)); //then - System.out.println("Thread " + Thread.currentThread().getName() + " waiting for others"); + log.debug("Thread {} waiting for others", Thread.currentThread().getName()); ph.arriveAndAwaitAdvance(); - System.out.println("Thread " + Thread.currentThread().getName() + " proceeding in phase " + ph.getPhase()); + log.debug("Thread {} proceeding in phase {}", Thread.currentThread().getName(), ph.getPhase()); assertEquals(1, ph.getPhase()); //and executorService.submit(new LongRunningAction("thread-4", ph)); executorService.submit(new LongRunningAction("thread-5", ph)); - - System.out.println("Thread " + Thread.currentThread().getName() + " waiting for others"); + + log.debug("Thread {} waiting for others", Thread.currentThread().getName()); ph.arriveAndAwaitAdvance(); - System.out.println("Thread " + Thread.currentThread().getName() + " proceeding in phase " + ph.getPhase()); + log.debug("Thread {} proceeding in phase {}", Thread.currentThread().getName(), ph.getPhase()); assertEquals(2, ph.getPhase()); diff --git a/core-java-modules/core-java-concurrency-advanced/src/test/resources/logback-test.xml b/core-java-modules/core-java-concurrency-advanced/src/test/resources/logback-test.xml new file mode 100644 index 000000000000..56af2d397e63 --- /dev/null +++ b/core-java-modules/core-java-concurrency-advanced/src/test/resources/logback-test.xml @@ -0,0 +1,19 @@ + + + + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + + + + + + + + + + + + \ No newline at end of file diff --git a/libraries-apache-commons-io/pom.xml b/libraries-apache-commons-io/pom.xml index 7cac50a8e2d0..ca5cc4574d84 100644 --- a/libraries-apache-commons-io/pom.xml +++ b/libraries-apache-commons-io/pom.xml @@ -23,6 +23,11 @@ commons-io ${commons-io.version} + + org.projectlombok + lombok + ${lombok.version} + diff --git a/libraries-apache-commons-io/src/test/java/com/baeldung/commons/io/CommonsIOUnitTest.java b/libraries-apache-commons-io/src/test/java/com/baeldung/commons/io/CommonsIOUnitTest.java index 7481e5a1a30d..ce98e8026eaa 100644 --- a/libraries-apache-commons-io/src/test/java/com/baeldung/commons/io/CommonsIOUnitTest.java +++ b/libraries-apache-commons-io/src/test/java/com/baeldung/commons/io/CommonsIOUnitTest.java @@ -22,6 +22,9 @@ import java.io.IOException; import java.nio.charset.Charset; +import lombok.extern.slf4j.Slf4j; + +@Slf4j public class CommonsIOUnitTest { @Test @@ -47,9 +50,9 @@ public void whenUsingFileNameUtils_thenshowdifferentFileOperations() throws IOEx String extension = FilenameUtils.getExtension(path); String baseName = FilenameUtils.getBaseName(path); - System.out.println("full path" + fullPath); - System.out.println("Extension" + extension); - System.out.println("Base name" + baseName); + log.debug("full path: " + fullPath); + log.debug("Extension: " + extension); + log.debug("Base name: " + baseName); } @Test diff --git a/libraries-apache-commons-io/src/test/resources/logback-test.xml b/libraries-apache-commons-io/src/test/resources/logback-test.xml new file mode 100644 index 000000000000..499cc828a2e3 --- /dev/null +++ b/libraries-apache-commons-io/src/test/resources/logback-test.xml @@ -0,0 +1,12 @@ + + + + + %d{yyyy-MM-dd HH:mm:ss} | %-5p | [%thread] %logger{5}:%L - %msg%n + + + + + + + \ No newline at end of file diff --git a/patterns-modules/design-patterns-behavioral/src/main/java/com/baeldung/templatemethod/model/HighEndComputerBuilder.java b/patterns-modules/design-patterns-behavioral/src/main/java/com/baeldung/templatemethod/model/HighEndComputerBuilder.java index 2ee6f93f9b94..e06f1291a66e 100644 --- a/patterns-modules/design-patterns-behavioral/src/main/java/com/baeldung/templatemethod/model/HighEndComputerBuilder.java +++ b/patterns-modules/design-patterns-behavioral/src/main/java/com/baeldung/templatemethod/model/HighEndComputerBuilder.java @@ -1,5 +1,8 @@ package com.baeldung.templatemethod.model; +import lombok.extern.slf4j.Slf4j; + +@Slf4j public class HighEndComputerBuilder extends ComputerBuilder { @Override @@ -11,7 +14,7 @@ public void addMotherboard() { public void setupMotherboard() { motherboardSetupStatus.add("Screwing the high-end motherboard to the case."); motherboardSetupStatus.add("Pluging in the power supply connectors."); - motherboardSetupStatus.forEach(step -> System.out.println(step)); + motherboardSetupStatus.forEach(step -> log.debug(step)); } @Override diff --git a/patterns-modules/design-patterns-behavioral/src/main/java/com/baeldung/templatemethod/model/StandardComputerBuilder.java b/patterns-modules/design-patterns-behavioral/src/main/java/com/baeldung/templatemethod/model/StandardComputerBuilder.java index da2c2e9b2d30..f5b953c83062 100644 --- a/patterns-modules/design-patterns-behavioral/src/main/java/com/baeldung/templatemethod/model/StandardComputerBuilder.java +++ b/patterns-modules/design-patterns-behavioral/src/main/java/com/baeldung/templatemethod/model/StandardComputerBuilder.java @@ -1,5 +1,8 @@ package com.baeldung.templatemethod.model; - + +import lombok.extern.slf4j.Slf4j; + +@Slf4j public class StandardComputerBuilder extends ComputerBuilder { @Override @@ -11,7 +14,7 @@ public void addMotherboard() { public void setupMotherboard() { motherboardSetupStatus.add("Screwing the standard motherboard to the case."); motherboardSetupStatus.add("Pluging in the power supply connectors."); - motherboardSetupStatus.forEach(step -> System.out.println(step)); + motherboardSetupStatus.forEach(step -> log.debug(step)); } @Override diff --git a/patterns-modules/design-patterns-behavioral/src/test/resources/logback-test.xml b/patterns-modules/design-patterns-behavioral/src/test/resources/logback-test.xml new file mode 100644 index 000000000000..499cc828a2e3 --- /dev/null +++ b/patterns-modules/design-patterns-behavioral/src/test/resources/logback-test.xml @@ -0,0 +1,12 @@ + + + + + %d{yyyy-MM-dd HH:mm:ss} | %-5p | [%thread] %logger{5}:%L - %msg%n + + + + + + + \ No newline at end of file diff --git a/spring-drools/src/main/java/com/baeldung/spring/drools/service/TaxiFareCalculatorService.java b/spring-drools/src/main/java/com/baeldung/spring/drools/service/TaxiFareCalculatorService.java index c2c5b399df1d..8f6f49c29b92 100644 --- a/spring-drools/src/main/java/com/baeldung/spring/drools/service/TaxiFareCalculatorService.java +++ b/spring-drools/src/main/java/com/baeldung/spring/drools/service/TaxiFareCalculatorService.java @@ -2,6 +2,8 @@ import org.kie.api.runtime.KieContainer; import org.kie.api.runtime.KieSession; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -11,6 +13,8 @@ @Service public class TaxiFareCalculatorService { + private static final Logger LOGGER = LoggerFactory.getLogger(TaxiFareCalculatorService.class); + @Autowired private KieContainer kContainer; @@ -20,7 +24,7 @@ public Long calculateFare(TaxiRide taxiRide, Fare rideFare) { kieSession.insert(taxiRide); kieSession.fireAllRules(); kieSession.dispose(); - System.out.println("!! RIDE FARE !! " + rideFare.getTotalFare()); + LOGGER.debug("!! RIDE FARE !! " + rideFare.getTotalFare()); return rideFare.getTotalFare(); } } diff --git a/vertx-modules/vertx-and-rxjava/src/test/java/com/baeldung/weather/VertxWithRxJavaIntegrationTest.java b/vertx-modules/vertx-and-rxjava/src/test/java/com/baeldung/weather/VertxWithRxJavaIntegrationTest.java index a2ddbe500782..d5d58438e297 100644 --- a/vertx-modules/vertx-and-rxjava/src/test/java/com/baeldung/weather/VertxWithRxJavaIntegrationTest.java +++ b/vertx-modules/vertx-and-rxjava/src/test/java/com/baeldung/weather/VertxWithRxJavaIntegrationTest.java @@ -45,18 +45,18 @@ public void shouldDisplayLightLenghts() throws InterruptedException { // read the file that contains one city name per line fileSystem .rxReadFile("cities.txt").toFlowable() - .doOnNext(buffer -> log.info("File buffer ---\n{}\n---", buffer)) + .doOnNext(buffer -> log.debug("File buffer ---\n{}\n---", buffer)) .flatMap(buffer -> Flowable.fromArray(buffer.toString().split("\\r?\\n"))) - .doOnNext(city -> log.info("City from file: '{}'", city)) + .doOnNext(city -> log.debug("City from file: '{}'", city)) .filter(city -> !city.startsWith("#")) - .doOnNext(city -> log.info("City that survived filtering: '{}'", city)) + .doOnNext(city -> log.debug("City that survived filtering: '{}'", city)) .flatMap(city -> searchByCityName(httpClient, city)) .flatMap(HttpClientResponse::toFlowable) - .doOnNext(buffer -> log.info("JSON of city detail: '{}'", buffer)) + .doOnNext(buffer -> log.debug("JSON of city detail: '{}'", buffer)) .map(extractingWoeid()) .flatMap(cityId -> getDataByPlaceId(httpClient, cityId)) .flatMap(toBufferFlowable()) - .doOnNext(buffer -> log.info("JSON of place detail: '{}'", buffer)) + .doOnNext(buffer -> log.debug("JSON of place detail: '{}'", buffer)) .map(Buffer::toJsonObject) .map(toCityAndDayLength()) .subscribe(System.out::println, Throwable::printStackTrace); From acedc7f2160968dbeddf1c0230eb1071db5007a9 Mon Sep 17 00:00:00 2001 From: Anastasios Ioannidis <121166333+anastasiosioannidis@users.noreply.github.com> Date: Mon, 10 Apr 2023 19:37:34 +0300 Subject: [PATCH 055/390] JAVA-18142 New JHipster-6 module for JDK 11 (#13489) * JAVA-18142 New JHipster-6 module for JDK 11 * JAVA-18142 Add jhipster-6 to jdk9-and-above * JAVA-18142 Re-enabled enforcer plugin * JAVA-18142 Fixed enforcer setup, upgraded spring boot * JAVA-18142 Try commiting package-lock.json * JAVA-18142 Removed package-lock.json * JAVA-18142 Added logs direectory to Git * JAVA-18142 Tried node npm version and legacy-peer-devs config * JAVA-18142 Added v for node.version * JAVA-18142 Corrected a config argument typo * JAVA-18142 Removed pre-jdk9 profiles * JAVA-18142 Verify Node/NPM upgrades are needed * JAVA-18142 Refactored remaining jhipster-5 references to jhipster-6 * JAVA-18142 Fixed more to jhipster6 namespace --- jhipster-6/README.md | 3 + jhipster-6/bookstore-monolith/.editorconfig | 24 + jhipster-6/bookstore-monolith/.gitattributes | 148 + jhipster-6/bookstore-monolith/.gitignore | 146 + jhipster-6/bookstore-monolith/.huskyrc | 5 + .../bookstore-monolith/.jhipster/Book.json | 54 + .../.mvn/wrapper/MavenWrapperDownloader.java | 110 + .../.mvn/wrapper/maven-wrapper.jar | Bin 0 -> 48337 bytes .../.mvn/wrapper/maven-wrapper.properties | 1 + jhipster-6/bookstore-monolith/.prettierignore | 3 + jhipster-6/bookstore-monolith/.prettierrc | 12 + jhipster-6/bookstore-monolith/.yo-rc.json | 36 + jhipster-6/bookstore-monolith/README.md | 5 + jhipster-6/bookstore-monolith/angular.json | 39 + jhipster-6/bookstore-monolith/mvnw | 286 + jhipster-6/bookstore-monolith/mvnw.cmd | 161 + jhipster-6/bookstore-monolith/package.json | 128 + jhipster-6/bookstore-monolith/pom.xml | 1144 ++ .../bookstore-monolith/postcss.config.js | 5 + jhipster-6/bookstore-monolith/proxy.conf.json | 7 + .../src/main/docker/.dockerignore | 14 + .../src/main/docker/Dockerfile | 20 + .../src/main/docker/app.yml | 15 + .../src/main/docker/entrypoint.sh | 4 + .../grafana/provisioning/dashboards/JVM.json | 3778 +++++++ .../provisioning/dashboards/dashboard.yml | 11 + .../provisioning/datasources/datasource.yml | 50 + .../src/main/docker/monitoring.yml | 26 + .../src/main/docker/mysql.yml | 13 + .../src/main/docker/prometheus/prometheus.yml | 26 + .../src/main/docker/sonar.yml | 7 + .../baeldung/jhipster6/ApplicationWebXml.java | 21 + .../com/baeldung/jhipster6/BookstoreApp.java | 98 + .../jhipster6/aop/logging/LoggingAspect.java | 98 + .../config/ApplicationProperties.java | 14 + .../jhipster6/config/AsyncConfiguration.java | 59 + .../config/CloudDatabaseConfiguration.java | 28 + .../baeldung/jhipster6/config/Constants.java | 17 + .../config/DatabaseConfiguration.java | 59 + .../config/DateTimeFormatConfiguration.java | 20 + .../jhipster6/config/DefaultProfileUtil.java | 51 + .../config/JacksonConfiguration.java | 63 + .../config/LiquibaseConfiguration.java | 50 + .../jhipster6/config/LocaleConfiguration.java | 27 + .../config/LoggingAspectConfiguration.java | 19 + .../config/LoggingConfiguration.java | 154 + .../config/SecurityConfiguration.java | 125 + .../jhipster6/config/WebConfigurer.java | 142 + .../config/audit/AuditEventConverter.java | 86 + .../jhipster6/config/audit/package-info.java | 4 + .../jhipster6/config/package-info.java | 4 + .../domain/AbstractAuditingEntity.java | 79 + .../baeldung/jhipster6/domain/Authority.java | 59 + .../com/baeldung/jhipster6/domain/Book.java | 153 + .../domain/PersistentAuditEvent.java | 109 + .../com/baeldung/jhipster6/domain/User.java | 231 + .../jhipster6/domain/package-info.java | 4 + .../repository/AuthorityRepository.java | 11 + .../jhipster6/repository/BookRepository.java | 15 + .../CustomAuditEventRepository.java | 89 + .../PersistenceAuditEventRepository.java | 25 + .../jhipster6/repository/UserRepository.java | 40 + .../jhipster6/repository/package-info.java | 4 + .../security/AuthoritiesConstants.java | 16 + .../security/CustomAuthenticationManager.java | 126 + .../security/DomainUserDetailsService.java | 63 + .../jhipster6/security/SecurityUtils.java | 76 + .../security/SpringSecurityAuditorAware.java | 20 + .../security/UserNotActivatedException.java | 19 + .../jhipster6/security/dto/LoginRequest.java | 30 + .../jhipster6/security/dto/LoginResponse.java | 50 + .../jhipster6/security/jwt/JWTConfigurer.java | 21 + .../jhipster6/security/jwt/JWTFilter.java | 48 + .../jhipster6/security/jwt/TokenProvider.java | 119 + .../jhipster6/security/package-info.java | 4 + .../jhipster6/service/AuditEventService.java | 52 + .../jhipster6/service/BookService.java | 50 + .../jhipster6/service/MailService.java | 105 + .../jhipster6/service/UserService.java | 276 + .../jhipster6/service/dto/BookDTO.java | 112 + .../service/dto/PasswordChangeDTO.java | 35 + .../jhipster6/service/dto/UserDTO.java | 199 + .../jhipster6/service/dto/package-info.java | 4 + .../service/impl/BookServiceImpl.java | 110 + .../jhipster6/service/mapper/BookMapper.java | 25 + .../service/mapper/EntityMapper.java | 21 + .../jhipster6/service/mapper/UserMapper.java | 81 + .../service/mapper/package-info.java | 4 + .../jhipster6/service/package-info.java | 4 + .../jhipster6/service/util/RandomUtil.java | 41 + .../jhipster6/web/rest/AccountResource.java | 184 + .../jhipster6/web/rest/AuditResource.java | 77 + .../jhipster6/web/rest/BookResource.java | 118 + .../web/rest/ClientForwardController.java | 17 + .../jhipster6/web/rest/LogsResource.java | 36 + .../jhipster6/web/rest/UserJWTController.java | 71 + .../jhipster6/web/rest/UserResource.java | 183 + .../rest/errors/BadRequestAlertException.java | 42 + .../errors/CustomParameterizedException.java | 54 + .../errors/EmailAlreadyUsedException.java | 10 + .../rest/errors/EmailNotFoundException.java | 13 + .../web/rest/errors/ErrorConstants.java | 21 + .../web/rest/errors/ExceptionTranslator.java | 112 + .../web/rest/errors/FieldErrorVM.java | 33 + .../errors/InternalServerErrorException.java | 16 + .../rest/errors/InvalidPasswordException.java | 13 + .../errors/LoginAlreadyUsedException.java | 10 + .../web/rest/errors/package-info.java | 6 + .../jhipster6/web/rest/package-info.java | 4 + .../jhipster6/web/rest/util/HeaderUtil.java | 45 + .../web/rest/util/PaginationUtil.java | 45 + .../web/rest/vm/KeyAndPasswordVM.java | 27 + .../jhipster6/web/rest/vm/LoggerVM.java | 46 + .../jhipster6/web/rest/vm/LoginVM.java | 52 + .../jhipster6/web/rest/vm/ManagedUserVM.java | 35 + .../jhipster6/web/rest/vm/package-info.java | 4 + .../src/main/jib/entrypoint.sh | 4 + .../src/main/resources/.h2.server.properties | 5 + .../src/main/resources/banner.txt | 10 + .../main/resources/config/application-dev.yml | 122 + .../resources/config/application-prod.yml | 133 + .../main/resources/config/application-tls.yml | 20 + .../src/main/resources/config/application.yml | 140 + .../config/liquibase/authorities.csv | 3 + .../00000000000000_initial_schema.xml | 152 + .../20190319124041_added_entity_Book.xml | 50 + .../config/liquibase/data/authority.csv | 3 + .../resources/config/liquibase/data/user.csv | 5 + .../config/liquibase/data/user_authority.csv | 6 + .../resources/config/liquibase/master.xml | 11 + .../main/resources/config/liquibase/users.csv | 5 + .../config/liquibase/users_authorities.csv | 6 + .../main/resources/config/tls/keystore.p12 | Bin 0 -> 2607 bytes .../main/resources/i18n/messages.properties | 21 + .../src/main/resources/logback-spring.xml | 66 + .../src/main/resources/templates/error.html | 163 + .../templates/mail/activationEmail.html | 25 + .../templates/mail/creationEmail.html | 25 + .../templates/mail/passwordResetEmail.html | 25 + .../src/main/webapp/404.html | 61 + .../src/main/webapp/WEB-INF/web.xml | 13 + .../main/webapp/app/account/account.module.ts | 30 + .../main/webapp/app/account/account.route.ts | 12 + .../account/activate/activate.component.html | 17 + .../account/activate/activate.component.ts | 37 + .../app/account/activate/activate.route.ts | 12 + .../app/account/activate/activate.service.ts | 16 + .../src/main/webapp/app/account/index.ts | 19 + .../password-reset-finish.component.html | 77 + .../finish/password-reset-finish.component.ts | 65 + .../finish/password-reset-finish.route.ts | 12 + .../finish/password-reset-finish.service.ts | 14 + .../init/password-reset-init.component.html | 46 + .../init/password-reset-init.component.ts | 43 + .../init/password-reset-init.route.ts | 12 + .../init/password-reset-init.service.ts | 14 + .../password-strength-bar.component.ts | 85 + .../password/password-strength-bar.scss | 23 + .../account/password/password.component.html | 77 + .../account/password/password.component.ts | 46 + .../app/account/password/password.route.ts | 14 + .../app/account/password/password.service.ts | 14 + .../account/register/register.component.html | 124 + .../account/register/register.component.ts | 71 + .../app/account/register/register.route.ts | 12 + .../app/account/register/register.service.ts | 14 + .../account/settings/settings.component.html | 80 + .../account/settings/settings.component.ts | 50 + .../app/account/settings/settings.route.ts | 14 + .../src/main/webapp/app/admin/admin.module.ts | 43 + .../src/main/webapp/app/admin/admin.route.ts | 18 + .../app/admin/audits/audit-data.model.ts | 3 + .../webapp/app/admin/audits/audit.model.ts | 5 + .../app/admin/audits/audits.component.html | 52 + .../app/admin/audits/audits.component.ts | 126 + .../webapp/app/admin/audits/audits.route.ts | 17 + .../webapp/app/admin/audits/audits.service.ts | 25 + .../configuration.component.html | 46 + .../configuration/configuration.component.ts | 43 + .../configuration/configuration.route.ts | 11 + .../configuration/configuration.service.ts | 67 + .../webapp/app/admin/docs/docs.component.html | 2 + .../webapp/app/admin/docs/docs.component.ts | 9 + .../main/webapp/app/admin/docs/docs.route.ts | 11 + .../admin/health/health-modal.component.html | 35 + .../admin/health/health-modal.component.ts | 41 + .../app/admin/health/health.component.html | 34 + .../app/admin/health/health.component.ts | 66 + .../webapp/app/admin/health/health.route.ts | 11 + .../webapp/app/admin/health/health.service.ts | 133 + .../src/main/webapp/app/admin/index.ts | 27 + .../main/webapp/app/admin/logs/log.model.ts | 3 + .../webapp/app/admin/logs/logs.component.html | 28 + .../webapp/app/admin/logs/logs.component.ts | 32 + .../main/webapp/app/admin/logs/logs.route.ts | 11 + .../webapp/app/admin/logs/logs.service.ts | 19 + .../app/admin/metrics/metrics.component.html | 56 + .../app/admin/metrics/metrics.component.ts | 42 + .../webapp/app/admin/metrics/metrics.route.ts | 11 + .../app/admin/metrics/metrics.service.ts | 18 + ...er-management-delete-dialog.component.html | 19 + ...user-management-delete-dialog.component.ts | 29 + .../user-management-detail.component.html | 47 + .../user-management-detail.component.ts | 20 + .../user-management-update.component.html | 118 + .../user-management-update.component.ts | 51 + .../user-management.component.html | 78 + .../user-management.component.ts | 144 + .../user-management/user-management.route.ts | 68 + .../src/main/webapp/app/app-routing.module.ts | 23 + .../src/main/webapp/app/app.constants.ts | 8 + .../src/main/webapp/app/app.main.ts | 14 + .../src/main/webapp/app/app.module.ts | 70 + .../webapp/app/blocks/config/prod.config.ts | 9 + .../blocks/config/uib-pagination.config.ts | 14 + .../interceptor/auth-expired.interceptor.ts | 25 + .../blocks/interceptor/auth.interceptor.ts | 27 + .../interceptor/errorhandler.interceptor.ts | 25 + .../interceptor/notification.interceptor.ts | 34 + .../webapp/app/core/auth/account.service.ts | 108 + .../webapp/app/core/auth/auth-jwt.service.ts | 59 + .../main/webapp/app/core/auth/csrf.service.ts | 11 + .../app/core/auth/state-storage.service.ts | 46 + .../core/auth/user-route-access-service.ts | 52 + .../src/main/webapp/app/core/core.module.ts | 24 + .../src/main/webapp/app/core/index.ts | 11 + .../app/core/login/login-modal.service.ts | 27 + .../webapp/app/core/login/login.service.ts | 38 + .../webapp/app/core/user/account.model.ts | 12 + .../main/webapp/app/core/user/user.model.ts | 47 + .../main/webapp/app/core/user/user.service.ts | 39 + .../book/book-delete-dialog.component.html | 19 + .../book/book-delete-dialog.component.ts | 65 + .../entities/book/book-detail.component.html | 49 + .../entities/book/book-detail.component.ts | 36 + .../entities/book/book-update.component.html | 100 + .../entities/book/book-update.component.ts | 53 + .../app/entities/book/book.component.html | 62 + .../app/entities/book/book.component.ts | 65 + .../webapp/app/entities/book/book.module.ts | 23 + .../webapp/app/entities/book/book.route.ts | 93 + .../webapp/app/entities/book/book.service.ts | 81 + .../main/webapp/app/entities/book/index.ts | 6 + .../main/webapp/app/entities/entity.module.ts | 19 + .../main/webapp/app/home/home.component.html | 41 + .../main/webapp/app/home/home.component.ts | 44 + .../src/main/webapp/app/home/home.module.ts | 12 + .../src/main/webapp/app/home/home.route.ts | 12 + .../src/main/webapp/app/home/home.scss | 23 + .../src/main/webapp/app/home/index.ts | 3 + .../app/layouts/error/error.component.html | 19 + .../app/layouts/error/error.component.ts | 28 + .../webapp/app/layouts/error/error.route.ts | 36 + .../app/layouts/footer/footer.component.html | 3 + .../app/layouts/footer/footer.component.ts | 7 + .../src/main/webapp/app/layouts/index.ts | 9 + .../app/layouts/main/main.component.html | 11 + .../webapp/app/layouts/main/main.component.ts | 31 + .../app/layouts/navbar/navbar.component.html | 133 + .../app/layouts/navbar/navbar.component.ts | 65 + .../webapp/app/layouts/navbar/navbar.route.ts | 9 + .../webapp/app/layouts/navbar/navbar.scss | 53 + .../layouts/profiles/page-ribbon.component.ts | 26 + .../app/layouts/profiles/page-ribbon.scss | 31 + .../layouts/profiles/profile-info.model.ts | 6 + .../app/layouts/profiles/profile.service.ts | 40 + .../src/main/webapp/app/polyfills.ts | 70 + .../app/shared/alert/alert-error.component.ts | 110 + .../app/shared/alert/alert.component.ts | 35 + .../auth/has-any-authority.directive.ts | 42 + .../app/shared/constants/error.constants.ts | 4 + .../app/shared/constants/input.constants.ts | 2 + .../shared/constants/pagination.constants.ts | 1 + .../src/main/webapp/app/shared/index.ts | 12 + .../app/shared/login/login.component.html | 35 + .../app/shared/login/login.component.ts | 87 + .../webapp/app/shared/model/book.model.ts | 21 + .../webapp/app/shared/shared-common.module.ts | 10 + .../webapp/app/shared/shared-libs.module.ts | 20 + .../main/webapp/app/shared/shared.module.ts | 21 + .../app/shared/util/datepicker-adapter.ts | 21 + .../webapp/app/shared/util/request-util.ts | 18 + .../src/main/webapp/app/vendor.ts | 81 + .../src/main/webapp/content/css/loading.css | 152 + .../images/jhipster_family_member_0.svg | 198 + .../jhipster_family_member_0_head-192.png | Bin 0 -> 13322 bytes .../jhipster_family_member_0_head-256.png | Bin 0 -> 17812 bytes .../jhipster_family_member_0_head-384.png | Bin 0 -> 27723 bytes .../jhipster_family_member_0_head-512.png | Bin 0 -> 37449 bytes .../images/jhipster_family_member_1.svg | 9387 +++++++++++++++++ .../jhipster_family_member_1_head-192.png | Bin 0 -> 19660 bytes .../jhipster_family_member_1_head-256.png | Bin 0 -> 29152 bytes .../jhipster_family_member_1_head-384.png | Bin 0 -> 48895 bytes .../jhipster_family_member_1_head-512.png | Bin 0 -> 68803 bytes .../images/jhipster_family_member_2.svg | 841 ++ .../jhipster_family_member_2_head-192.png | Bin 0 -> 11463 bytes .../jhipster_family_member_2_head-256.png | Bin 0 -> 15638 bytes .../jhipster_family_member_2_head-384.png | Bin 0 -> 23850 bytes .../jhipster_family_member_2_head-512.png | Bin 0 -> 32300 bytes .../images/jhipster_family_member_3.svg | 308 + .../jhipster_family_member_3_head-192.png | Bin 0 -> 13573 bytes .../jhipster_family_member_3_head-256.png | Bin 0 -> 19239 bytes .../jhipster_family_member_3_head-384.png | Bin 0 -> 30253 bytes .../jhipster_family_member_3_head-512.png | Bin 0 -> 41857 bytes .../webapp/content/images/logo-jhipster.png | Bin 0 -> 1085 bytes .../content/scss/_bootstrap-variables.scss | 42 + .../src/main/webapp/content/scss/global.scss | 226 + .../src/main/webapp/content/scss/vendor.scss | 12 + .../src/main/webapp/favicon.ico | Bin 0 -> 1574 bytes .../src/main/webapp/index.html | 108 + .../src/main/webapp/manifest.webapp | 31 + .../src/main/webapp/robots.txt | 11 + .../src/main/webapp/swagger-ui/index.html | 166 + .../config/WebConfigurerUnitTest.java | 164 + .../WebConfigurerUnitTestController.java | 16 + .../config/timezone/HibernateTimeZoneIT.java | 174 + .../HibernateTimeZoneIntegrationTest.java | 177 + .../CustomAuditEventRepositoryIT.java | 163 + ...omAuditEventRepositoryIntegrationTest.java | 165 + .../repository/timezone/DateTimeWrapper.java | 131 + .../timezone/DateTimeWrapperRepository.java | 12 + .../security/DomainUserDetailsServiceIT.java | 125 + ...mainUserDetailsServiceIntegrationTest.java | 127 + .../security/MockAuthenticationManager.java | 54 + .../security/SecurityUtilsUnitTest.java | 73 + .../security/jwt/JWTFilter2UnitTest.java | 116 + .../security/jwt/JWTFilterUnitTest.java | 116 + .../security/jwt/TokenProvider2UnitTest.java | 111 + .../security/jwt/TokenProviderUnitTest.java | 109 + .../jhipster6/service/MailServiceIT.java | 189 + .../service/MailServiceIntegrationTest.java | 188 + .../jhipster6/service/UserServiceIT.java | 200 + .../service/UserServiceIntegrationTest.java | 193 + .../service/mapper/UserMapperIT.java | 143 + .../mapper/UserMapperIntegrationTest.java | 151 + .../jhipster6/web/rest/AccountResourceIT.java | 815 ++ .../rest/AccountResourceIntegrationTest.java | 820 ++ .../jhipster6/web/rest/AuditResourceIT.java | 161 + .../rest/AuditResourceIntegrationTest.java | 163 + .../web/rest/BookResourceIntegrationTest.java | 414 + .../web/rest/ClientForwardControllerIT.java | 67 + .../web/rest/LogsResourceIntegrationTest.java | 67 + .../baeldung/jhipster6/web/rest/TestUtil.java | 141 + .../web/rest/UserJWTControllerIT.java | 120 + .../UserJWTControllerIntegrationTest.java | 126 + .../jhipster6/web/rest/UserResourceIT.java | 592 ++ .../web/rest/UserResourceIntegrationTest.java | 597 ++ .../rest/errors/ExceptionTranslatorIT.java | 125 + .../ExceptionTranslatorIntegrationTest.java | 150 + .../ExceptionTranslatorTestController.java | 86 + .../web/rest/util/PaginationUtilUnitTest.java | 44 + .../src/test/javascript/jest-global-mocks.ts | 15 + .../src/test/javascript/jest.conf.js | 26 + .../src/test/javascript/jest.ts | 2 + .../activate/activate.component.spec.ts | 72 + .../password-reset-finish.component.spec.ts | 119 + .../password-reset-init.component.spec.ts | 110 + .../password-strength-bar.component.spec.ts | 48 + .../password/password.component.spec.ts | 89 + .../register/register.component.spec.ts | 118 + .../settings/settings.component.spec.ts | 81 + .../app/admin/audits/audits.component.spec.ts | 133 + .../app/admin/audits/audits.service.spec.ts | 59 + .../configuration.component.spec.ts | 71 + .../configuration.service.spec.ts | 64 + .../app/admin/health/health.component.spec.ts | 321 + .../admin/metrics/metrics.component.spec.ts | 55 + .../app/admin/metrics/metrics.service.spec.ts | 57 + ...management-delete-dialog.component.spec.ts | 54 + .../user-management-detail.component.spec.ts | 65 + .../user-management-update.component.spec.ts | 99 + .../user-management.component.spec.ts | 85 + .../app/core/user/account.service.spec.ts | 102 + .../spec/app/core/user/user.service.spec.ts | 66 + .../book/book-delete-dialog.component.spec.ts | 52 + .../book/book-detail.component.spec.ts | 40 + .../book/book-update.component.spec.ts | 60 + .../app/entities/book/book.component.spec.ts | 51 + .../app/entities/book/book.service.spec.ts | 137 + .../alert/alert-error.component.spec.ts | 134 + .../app/shared/login/login.component.spec.ts | 157 + .../spec/helpers/mock-account.service.ts | 35 + .../spec/helpers/mock-active-modal.service.ts | 12 + .../spec/helpers/mock-alert.service.ts | 11 + .../helpers/mock-event-manager.service.ts | 12 + .../spec/helpers/mock-login.service.ts | 29 + .../spec/helpers/mock-route.service.ts | 29 + .../helpers/mock-state-storage.service.ts | 22 + .../test/javascript/spec/helpers/spyobject.ts | 69 + .../src/test/javascript/spec/test.module.ts | 63 + .../src/test/resources/config/application.yml | 105 + .../resources/i18n/messages_en.properties | 1 + .../src/test/resources/logback.xml | 42 + .../resources/templates/mail/testEmail.html | 1 + .../bookstore-monolith/tsconfig-aot.json | 28 + jhipster-6/bookstore-monolith/tsconfig.json | 25 + jhipster-6/bookstore-monolith/tslint.json | 76 + .../webpack/logo-jhipster.png | Bin 0 -> 4459 bytes .../bookstore-monolith/webpack/utils.js | 44 + .../webpack/webpack.common.js | 86 + .../bookstore-monolith/webpack/webpack.dev.js | 148 + .../webpack/webpack.prod.js | 144 + jhipster-6/pom.xml | 21 + pom.xml | 2 + 404 files changed, 40007 insertions(+) create mode 100644 jhipster-6/README.md create mode 100644 jhipster-6/bookstore-monolith/.editorconfig create mode 100644 jhipster-6/bookstore-monolith/.gitattributes create mode 100644 jhipster-6/bookstore-monolith/.gitignore create mode 100644 jhipster-6/bookstore-monolith/.huskyrc create mode 100644 jhipster-6/bookstore-monolith/.jhipster/Book.json create mode 100644 jhipster-6/bookstore-monolith/.mvn/wrapper/MavenWrapperDownloader.java create mode 100644 jhipster-6/bookstore-monolith/.mvn/wrapper/maven-wrapper.jar create mode 100644 jhipster-6/bookstore-monolith/.mvn/wrapper/maven-wrapper.properties create mode 100644 jhipster-6/bookstore-monolith/.prettierignore create mode 100644 jhipster-6/bookstore-monolith/.prettierrc create mode 100644 jhipster-6/bookstore-monolith/.yo-rc.json create mode 100644 jhipster-6/bookstore-monolith/README.md create mode 100644 jhipster-6/bookstore-monolith/angular.json create mode 100644 jhipster-6/bookstore-monolith/mvnw create mode 100644 jhipster-6/bookstore-monolith/mvnw.cmd create mode 100644 jhipster-6/bookstore-monolith/package.json create mode 100644 jhipster-6/bookstore-monolith/pom.xml create mode 100644 jhipster-6/bookstore-monolith/postcss.config.js create mode 100644 jhipster-6/bookstore-monolith/proxy.conf.json create mode 100644 jhipster-6/bookstore-monolith/src/main/docker/.dockerignore create mode 100644 jhipster-6/bookstore-monolith/src/main/docker/Dockerfile create mode 100644 jhipster-6/bookstore-monolith/src/main/docker/app.yml create mode 100644 jhipster-6/bookstore-monolith/src/main/docker/entrypoint.sh create mode 100644 jhipster-6/bookstore-monolith/src/main/docker/grafana/provisioning/dashboards/JVM.json create mode 100644 jhipster-6/bookstore-monolith/src/main/docker/grafana/provisioning/dashboards/dashboard.yml create mode 100644 jhipster-6/bookstore-monolith/src/main/docker/grafana/provisioning/datasources/datasource.yml create mode 100644 jhipster-6/bookstore-monolith/src/main/docker/monitoring.yml create mode 100644 jhipster-6/bookstore-monolith/src/main/docker/mysql.yml create mode 100644 jhipster-6/bookstore-monolith/src/main/docker/prometheus/prometheus.yml create mode 100644 jhipster-6/bookstore-monolith/src/main/docker/sonar.yml create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/ApplicationWebXml.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/BookstoreApp.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/aop/logging/LoggingAspect.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/ApplicationProperties.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/AsyncConfiguration.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/CloudDatabaseConfiguration.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/Constants.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/DatabaseConfiguration.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/DateTimeFormatConfiguration.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/DefaultProfileUtil.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/JacksonConfiguration.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/LiquibaseConfiguration.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/LocaleConfiguration.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/LoggingAspectConfiguration.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/LoggingConfiguration.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/SecurityConfiguration.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/WebConfigurer.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/audit/AuditEventConverter.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/audit/package-info.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/package-info.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/domain/AbstractAuditingEntity.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/domain/Authority.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/domain/Book.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/domain/PersistentAuditEvent.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/domain/User.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/domain/package-info.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/repository/AuthorityRepository.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/repository/BookRepository.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/repository/CustomAuditEventRepository.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/repository/PersistenceAuditEventRepository.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/repository/UserRepository.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/repository/package-info.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/security/AuthoritiesConstants.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/security/CustomAuthenticationManager.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/security/DomainUserDetailsService.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/security/SecurityUtils.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/security/SpringSecurityAuditorAware.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/security/UserNotActivatedException.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/security/dto/LoginRequest.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/security/dto/LoginResponse.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/security/jwt/JWTConfigurer.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/security/jwt/JWTFilter.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/security/jwt/TokenProvider.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/security/package-info.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/service/AuditEventService.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/service/BookService.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/service/MailService.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/service/UserService.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/service/dto/BookDTO.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/service/dto/PasswordChangeDTO.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/service/dto/UserDTO.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/service/dto/package-info.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/service/impl/BookServiceImpl.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/service/mapper/BookMapper.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/service/mapper/EntityMapper.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/service/mapper/UserMapper.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/service/mapper/package-info.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/service/package-info.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/service/util/RandomUtil.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/AccountResource.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/AuditResource.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/BookResource.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/ClientForwardController.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/LogsResource.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/UserJWTController.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/UserResource.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/errors/BadRequestAlertException.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/errors/CustomParameterizedException.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/errors/EmailAlreadyUsedException.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/errors/EmailNotFoundException.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/errors/ErrorConstants.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/errors/ExceptionTranslator.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/errors/FieldErrorVM.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/errors/InternalServerErrorException.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/errors/InvalidPasswordException.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/errors/LoginAlreadyUsedException.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/errors/package-info.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/package-info.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/util/HeaderUtil.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/util/PaginationUtil.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/vm/KeyAndPasswordVM.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/vm/LoggerVM.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/vm/LoginVM.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/vm/ManagedUserVM.java create mode 100644 jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/vm/package-info.java create mode 100644 jhipster-6/bookstore-monolith/src/main/jib/entrypoint.sh create mode 100644 jhipster-6/bookstore-monolith/src/main/resources/.h2.server.properties create mode 100644 jhipster-6/bookstore-monolith/src/main/resources/banner.txt create mode 100644 jhipster-6/bookstore-monolith/src/main/resources/config/application-dev.yml create mode 100644 jhipster-6/bookstore-monolith/src/main/resources/config/application-prod.yml create mode 100644 jhipster-6/bookstore-monolith/src/main/resources/config/application-tls.yml create mode 100644 jhipster-6/bookstore-monolith/src/main/resources/config/application.yml create mode 100644 jhipster-6/bookstore-monolith/src/main/resources/config/liquibase/authorities.csv create mode 100644 jhipster-6/bookstore-monolith/src/main/resources/config/liquibase/changelog/00000000000000_initial_schema.xml create mode 100644 jhipster-6/bookstore-monolith/src/main/resources/config/liquibase/changelog/20190319124041_added_entity_Book.xml create mode 100644 jhipster-6/bookstore-monolith/src/main/resources/config/liquibase/data/authority.csv create mode 100644 jhipster-6/bookstore-monolith/src/main/resources/config/liquibase/data/user.csv create mode 100644 jhipster-6/bookstore-monolith/src/main/resources/config/liquibase/data/user_authority.csv create mode 100644 jhipster-6/bookstore-monolith/src/main/resources/config/liquibase/master.xml create mode 100644 jhipster-6/bookstore-monolith/src/main/resources/config/liquibase/users.csv create mode 100644 jhipster-6/bookstore-monolith/src/main/resources/config/liquibase/users_authorities.csv create mode 100644 jhipster-6/bookstore-monolith/src/main/resources/config/tls/keystore.p12 create mode 100644 jhipster-6/bookstore-monolith/src/main/resources/i18n/messages.properties create mode 100644 jhipster-6/bookstore-monolith/src/main/resources/logback-spring.xml create mode 100644 jhipster-6/bookstore-monolith/src/main/resources/templates/error.html create mode 100644 jhipster-6/bookstore-monolith/src/main/resources/templates/mail/activationEmail.html create mode 100644 jhipster-6/bookstore-monolith/src/main/resources/templates/mail/creationEmail.html create mode 100644 jhipster-6/bookstore-monolith/src/main/resources/templates/mail/passwordResetEmail.html create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/404.html create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/WEB-INF/web.xml create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/account/account.module.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/account/account.route.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/account/activate/activate.component.html create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/account/activate/activate.component.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/account/activate/activate.route.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/account/activate/activate.service.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/account/index.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.html create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/account/password-reset/finish/password-reset-finish.route.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/account/password-reset/finish/password-reset-finish.service.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/account/password-reset/init/password-reset-init.component.html create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/account/password-reset/init/password-reset-init.component.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/account/password-reset/init/password-reset-init.route.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/account/password-reset/init/password-reset-init.service.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/account/password/password-strength-bar.component.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/account/password/password-strength-bar.scss create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/account/password/password.component.html create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/account/password/password.component.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/account/password/password.route.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/account/password/password.service.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/account/register/register.component.html create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/account/register/register.component.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/account/register/register.route.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/account/register/register.service.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/account/settings/settings.component.html create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/account/settings/settings.component.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/account/settings/settings.route.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/admin/admin.module.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/admin/admin.route.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/admin/audits/audit-data.model.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/admin/audits/audit.model.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/admin/audits/audits.component.html create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/admin/audits/audits.component.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/admin/audits/audits.route.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/admin/audits/audits.service.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/admin/configuration/configuration.component.html create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/admin/configuration/configuration.component.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/admin/configuration/configuration.route.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/admin/configuration/configuration.service.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/admin/docs/docs.component.html create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/admin/docs/docs.component.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/admin/docs/docs.route.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/admin/health/health-modal.component.html create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/admin/health/health-modal.component.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/admin/health/health.component.html create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/admin/health/health.component.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/admin/health/health.route.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/admin/health/health.service.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/admin/index.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/admin/logs/log.model.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/admin/logs/logs.component.html create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/admin/logs/logs.component.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/admin/logs/logs.route.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/admin/logs/logs.service.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/admin/metrics/metrics.component.html create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/admin/metrics/metrics.component.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/admin/metrics/metrics.route.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/admin/metrics/metrics.service.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-delete-dialog.component.html create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-delete-dialog.component.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-detail.component.html create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-detail.component.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-update.component.html create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-update.component.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management.component.html create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management.component.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management.route.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/app-routing.module.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/app.constants.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/app.main.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/app.module.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/blocks/config/prod.config.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/blocks/config/uib-pagination.config.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/blocks/interceptor/auth-expired.interceptor.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/blocks/interceptor/auth.interceptor.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/blocks/interceptor/errorhandler.interceptor.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/blocks/interceptor/notification.interceptor.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/core/auth/account.service.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/core/auth/auth-jwt.service.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/core/auth/csrf.service.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/core/auth/state-storage.service.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/core/auth/user-route-access-service.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/core/core.module.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/core/index.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/core/login/login-modal.service.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/core/login/login.service.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/core/user/account.model.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/core/user/user.model.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/core/user/user.service.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/entities/book/book-delete-dialog.component.html create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/entities/book/book-delete-dialog.component.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/entities/book/book-detail.component.html create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/entities/book/book-detail.component.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/entities/book/book-update.component.html create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/entities/book/book-update.component.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/entities/book/book.component.html create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/entities/book/book.component.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/entities/book/book.module.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/entities/book/book.route.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/entities/book/book.service.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/entities/book/index.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/entities/entity.module.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/home/home.component.html create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/home/home.component.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/home/home.module.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/home/home.route.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/home/home.scss create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/home/index.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/layouts/error/error.component.html create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/layouts/error/error.component.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/layouts/error/error.route.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/layouts/footer/footer.component.html create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/layouts/footer/footer.component.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/layouts/index.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/layouts/main/main.component.html create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/layouts/main/main.component.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/layouts/navbar/navbar.component.html create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/layouts/navbar/navbar.component.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/layouts/navbar/navbar.route.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/layouts/navbar/navbar.scss create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/layouts/profiles/page-ribbon.component.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/layouts/profiles/page-ribbon.scss create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/layouts/profiles/profile-info.model.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/layouts/profiles/profile.service.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/polyfills.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/shared/alert/alert-error.component.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/shared/alert/alert.component.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/shared/auth/has-any-authority.directive.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/shared/constants/error.constants.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/shared/constants/input.constants.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/shared/constants/pagination.constants.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/shared/index.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/shared/login/login.component.html create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/shared/login/login.component.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/shared/model/book.model.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/shared/shared-common.module.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/shared/shared-libs.module.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/shared/shared.module.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/shared/util/datepicker-adapter.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/shared/util/request-util.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/app/vendor.ts create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/content/css/loading.css create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_0.svg create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_0_head-192.png create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_0_head-256.png create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_0_head-384.png create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_0_head-512.png create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_1.svg create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_1_head-192.png create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_1_head-256.png create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_1_head-384.png create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_1_head-512.png create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_2.svg create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_2_head-192.png create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_2_head-256.png create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_2_head-384.png create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_2_head-512.png create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_3.svg create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_3_head-192.png create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_3_head-256.png create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_3_head-384.png create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_3_head-512.png create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/content/images/logo-jhipster.png create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/content/scss/_bootstrap-variables.scss create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/content/scss/global.scss create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/content/scss/vendor.scss create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/favicon.ico create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/index.html create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/manifest.webapp create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/robots.txt create mode 100644 jhipster-6/bookstore-monolith/src/main/webapp/swagger-ui/index.html create mode 100644 jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/config/WebConfigurerUnitTest.java create mode 100644 jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/config/WebConfigurerUnitTestController.java create mode 100644 jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/config/timezone/HibernateTimeZoneIT.java create mode 100644 jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/config/timezone/HibernateTimeZoneIntegrationTest.java create mode 100644 jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/repository/CustomAuditEventRepositoryIT.java create mode 100644 jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/repository/CustomAuditEventRepositoryIntegrationTest.java create mode 100644 jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/repository/timezone/DateTimeWrapper.java create mode 100644 jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/repository/timezone/DateTimeWrapperRepository.java create mode 100644 jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/security/DomainUserDetailsServiceIT.java create mode 100644 jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/security/DomainUserDetailsServiceIntegrationTest.java create mode 100644 jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/security/MockAuthenticationManager.java create mode 100644 jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/security/SecurityUtilsUnitTest.java create mode 100644 jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/security/jwt/JWTFilter2UnitTest.java create mode 100644 jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/security/jwt/JWTFilterUnitTest.java create mode 100644 jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/security/jwt/TokenProvider2UnitTest.java create mode 100644 jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/security/jwt/TokenProviderUnitTest.java create mode 100644 jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/service/MailServiceIT.java create mode 100644 jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/service/MailServiceIntegrationTest.java create mode 100644 jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/service/UserServiceIT.java create mode 100644 jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/service/UserServiceIntegrationTest.java create mode 100644 jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/service/mapper/UserMapperIT.java create mode 100644 jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/service/mapper/UserMapperIntegrationTest.java create mode 100644 jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/web/rest/AccountResourceIT.java create mode 100644 jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/web/rest/AccountResourceIntegrationTest.java create mode 100644 jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/web/rest/AuditResourceIT.java create mode 100644 jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/web/rest/AuditResourceIntegrationTest.java create mode 100644 jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/web/rest/BookResourceIntegrationTest.java create mode 100644 jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/web/rest/ClientForwardControllerIT.java create mode 100644 jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/web/rest/LogsResourceIntegrationTest.java create mode 100644 jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/web/rest/TestUtil.java create mode 100644 jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/web/rest/UserJWTControllerIT.java create mode 100644 jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/web/rest/UserJWTControllerIntegrationTest.java create mode 100644 jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/web/rest/UserResourceIT.java create mode 100644 jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/web/rest/UserResourceIntegrationTest.java create mode 100644 jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/web/rest/errors/ExceptionTranslatorIT.java create mode 100644 jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/web/rest/errors/ExceptionTranslatorIntegrationTest.java create mode 100644 jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/web/rest/errors/ExceptionTranslatorTestController.java create mode 100644 jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/web/rest/util/PaginationUtilUnitTest.java create mode 100644 jhipster-6/bookstore-monolith/src/test/javascript/jest-global-mocks.ts create mode 100644 jhipster-6/bookstore-monolith/src/test/javascript/jest.conf.js create mode 100644 jhipster-6/bookstore-monolith/src/test/javascript/jest.ts create mode 100644 jhipster-6/bookstore-monolith/src/test/javascript/spec/app/account/activate/activate.component.spec.ts create mode 100644 jhipster-6/bookstore-monolith/src/test/javascript/spec/app/account/password-reset/finish/password-reset-finish.component.spec.ts create mode 100644 jhipster-6/bookstore-monolith/src/test/javascript/spec/app/account/password-reset/init/password-reset-init.component.spec.ts create mode 100644 jhipster-6/bookstore-monolith/src/test/javascript/spec/app/account/password/password-strength-bar.component.spec.ts create mode 100644 jhipster-6/bookstore-monolith/src/test/javascript/spec/app/account/password/password.component.spec.ts create mode 100644 jhipster-6/bookstore-monolith/src/test/javascript/spec/app/account/register/register.component.spec.ts create mode 100644 jhipster-6/bookstore-monolith/src/test/javascript/spec/app/account/settings/settings.component.spec.ts create mode 100644 jhipster-6/bookstore-monolith/src/test/javascript/spec/app/admin/audits/audits.component.spec.ts create mode 100644 jhipster-6/bookstore-monolith/src/test/javascript/spec/app/admin/audits/audits.service.spec.ts create mode 100644 jhipster-6/bookstore-monolith/src/test/javascript/spec/app/admin/configuration/configuration.component.spec.ts create mode 100644 jhipster-6/bookstore-monolith/src/test/javascript/spec/app/admin/configuration/configuration.service.spec.ts create mode 100644 jhipster-6/bookstore-monolith/src/test/javascript/spec/app/admin/health/health.component.spec.ts create mode 100644 jhipster-6/bookstore-monolith/src/test/javascript/spec/app/admin/metrics/metrics.component.spec.ts create mode 100644 jhipster-6/bookstore-monolith/src/test/javascript/spec/app/admin/metrics/metrics.service.spec.ts create mode 100644 jhipster-6/bookstore-monolith/src/test/javascript/spec/app/admin/user-management/user-management-delete-dialog.component.spec.ts create mode 100644 jhipster-6/bookstore-monolith/src/test/javascript/spec/app/admin/user-management/user-management-detail.component.spec.ts create mode 100644 jhipster-6/bookstore-monolith/src/test/javascript/spec/app/admin/user-management/user-management-update.component.spec.ts create mode 100644 jhipster-6/bookstore-monolith/src/test/javascript/spec/app/admin/user-management/user-management.component.spec.ts create mode 100644 jhipster-6/bookstore-monolith/src/test/javascript/spec/app/core/user/account.service.spec.ts create mode 100644 jhipster-6/bookstore-monolith/src/test/javascript/spec/app/core/user/user.service.spec.ts create mode 100644 jhipster-6/bookstore-monolith/src/test/javascript/spec/app/entities/book/book-delete-dialog.component.spec.ts create mode 100644 jhipster-6/bookstore-monolith/src/test/javascript/spec/app/entities/book/book-detail.component.spec.ts create mode 100644 jhipster-6/bookstore-monolith/src/test/javascript/spec/app/entities/book/book-update.component.spec.ts create mode 100644 jhipster-6/bookstore-monolith/src/test/javascript/spec/app/entities/book/book.component.spec.ts create mode 100644 jhipster-6/bookstore-monolith/src/test/javascript/spec/app/entities/book/book.service.spec.ts create mode 100644 jhipster-6/bookstore-monolith/src/test/javascript/spec/app/shared/alert/alert-error.component.spec.ts create mode 100644 jhipster-6/bookstore-monolith/src/test/javascript/spec/app/shared/login/login.component.spec.ts create mode 100644 jhipster-6/bookstore-monolith/src/test/javascript/spec/helpers/mock-account.service.ts create mode 100644 jhipster-6/bookstore-monolith/src/test/javascript/spec/helpers/mock-active-modal.service.ts create mode 100644 jhipster-6/bookstore-monolith/src/test/javascript/spec/helpers/mock-alert.service.ts create mode 100644 jhipster-6/bookstore-monolith/src/test/javascript/spec/helpers/mock-event-manager.service.ts create mode 100644 jhipster-6/bookstore-monolith/src/test/javascript/spec/helpers/mock-login.service.ts create mode 100644 jhipster-6/bookstore-monolith/src/test/javascript/spec/helpers/mock-route.service.ts create mode 100644 jhipster-6/bookstore-monolith/src/test/javascript/spec/helpers/mock-state-storage.service.ts create mode 100644 jhipster-6/bookstore-monolith/src/test/javascript/spec/helpers/spyobject.ts create mode 100644 jhipster-6/bookstore-monolith/src/test/javascript/spec/test.module.ts create mode 100644 jhipster-6/bookstore-monolith/src/test/resources/config/application.yml create mode 100644 jhipster-6/bookstore-monolith/src/test/resources/i18n/messages_en.properties create mode 100644 jhipster-6/bookstore-monolith/src/test/resources/logback.xml create mode 100644 jhipster-6/bookstore-monolith/src/test/resources/templates/mail/testEmail.html create mode 100644 jhipster-6/bookstore-monolith/tsconfig-aot.json create mode 100644 jhipster-6/bookstore-monolith/tsconfig.json create mode 100644 jhipster-6/bookstore-monolith/tslint.json create mode 100644 jhipster-6/bookstore-monolith/webpack/logo-jhipster.png create mode 100644 jhipster-6/bookstore-monolith/webpack/utils.js create mode 100644 jhipster-6/bookstore-monolith/webpack/webpack.common.js create mode 100644 jhipster-6/bookstore-monolith/webpack/webpack.dev.js create mode 100644 jhipster-6/bookstore-monolith/webpack/webpack.prod.js create mode 100644 jhipster-6/pom.xml diff --git a/jhipster-6/README.md b/jhipster-6/README.md new file mode 100644 index 000000000000..9db409a03227 --- /dev/null +++ b/jhipster-6/README.md @@ -0,0 +1,3 @@ +## JHipster 6 + +This module contains articles about JHipster 5. This is an aggregator module, articles are in the relevant submodules. diff --git a/jhipster-6/bookstore-monolith/.editorconfig b/jhipster-6/bookstore-monolith/.editorconfig new file mode 100644 index 000000000000..a79c052f53d4 --- /dev/null +++ b/jhipster-6/bookstore-monolith/.editorconfig @@ -0,0 +1,24 @@ +# EditorConfig helps developers define and maintain consistent +# coding styles between different editors and IDEs +# editorconfig.org + +root = true + +[*] + +# Change these settings to your own preference +indent_style = space +indent_size = 4 + +# We recommend you to keep these unchanged +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false + +[package.json] +indent_style = space +indent_size = 2 diff --git a/jhipster-6/bookstore-monolith/.gitattributes b/jhipster-6/bookstore-monolith/.gitattributes new file mode 100644 index 000000000000..c013844d1068 --- /dev/null +++ b/jhipster-6/bookstore-monolith/.gitattributes @@ -0,0 +1,148 @@ +# This file is inspired by https://github.com/alexkaratarakis/gitattributes +# +# Auto detect text files and perform LF normalization +# http://davidlaing.com/2012/09/19/customise-your-gitattributes-to-become-a-git-ninja/ +* text=auto + +# The above will handle all files NOT found below +# These files are text and should be normalized (Convert crlf => lf) + +*.bat text eol=crlf +*.coffee text +*.css text +*.cql text +*.df text +*.ejs text +*.html text +*.java text +*.js text +*.json text +*.less text +*.properties text +*.sass text +*.scss text +*.sh text eol=lf +*.sql text +*.txt text +*.ts text +*.xml text +*.yaml text +*.yml text + +# Documents +*.doc diff=astextplain +*.DOC diff=astextplain +*.docx diff=astextplain +*.DOCX diff=astextplain +*.dot diff=astextplain +*.DOT diff=astextplain +*.pdf diff=astextplain +*.PDF diff=astextplain +*.rtf diff=astextplain +*.RTF diff=astextplain +*.markdown text +*.md text +*.adoc text +*.textile text +*.mustache text +*.csv text +*.tab text +*.tsv text +*.txt text +AUTHORS text +CHANGELOG text +CHANGES text +CONTRIBUTING text +COPYING text +copyright text +*COPYRIGHT* text +INSTALL text +license text +LICENSE text +NEWS text +readme text +*README* text +TODO text + +# Graphics +*.png binary +*.jpg binary +*.jpeg binary +*.gif binary +*.tif binary +*.tiff binary +*.ico binary +# SVG treated as an asset (binary) by default. If you want to treat it as text, +# comment-out the following line and uncomment the line after. +*.svg binary +#*.svg text +*.eps binary + +# These files are binary and should be left untouched +# (binary is a macro for -text -diff) +*.class binary +*.jar binary +*.war binary + +## LINTERS +.csslintrc text +.eslintrc text +.jscsrc text +.jshintrc text +.jshintignore text +.stylelintrc text + +## CONFIGS +*.conf text +*.config text +.editorconfig text +.gitattributes text +.gitconfig text +.gitignore text +.htaccess text +*.npmignore text + +## HEROKU +Procfile text +.slugignore text + +## AUDIO +*.kar binary +*.m4a binary +*.mid binary +*.midi binary +*.mp3 binary +*.ogg binary +*.ra binary + +## VIDEO +*.3gpp binary +*.3gp binary +*.as binary +*.asf binary +*.asx binary +*.fla binary +*.flv binary +*.m4v binary +*.mng binary +*.mov binary +*.mp4 binary +*.mpeg binary +*.mpg binary +*.swc binary +*.swf binary +*.webm binary + +## ARCHIVES +*.7z binary +*.gz binary +*.rar binary +*.tar binary +*.zip binary + +## FONTS +*.ttf binary +*.eot binary +*.otf binary +*.woff binary +*.woff2 binary diff --git a/jhipster-6/bookstore-monolith/.gitignore b/jhipster-6/bookstore-monolith/.gitignore new file mode 100644 index 000000000000..b3f7df5404ab --- /dev/null +++ b/jhipster-6/bookstore-monolith/.gitignore @@ -0,0 +1,146 @@ +###################### +# Project Specific +###################### +/src/main/webapp/content/css/main.css +/target/www/** +/src/test/javascript/coverage/ + +###################### +# Node +###################### +/node/ +node_tmp/ +node_modules/ +npm-debug.log.* +/.awcache/* +/.cache-loader/* +package-lock.json + +###################### +# SASS +###################### +.sass-cache/ + +###################### +# Eclipse +###################### +*.pydevproject +.project +.metadata +tmp/ +tmp/**/* +*.tmp +*.bak +*.swp +*~.nib +local.properties +.classpath +.settings/ +.loadpath +.factorypath +/src/main/resources/rebel.xml + +# External tool builders +.externalToolBuilders/** + +# Locally stored "Eclipse launch configurations" +*.launch + +# CDT-specific +.cproject + +# PDT-specific +.buildpath + +###################### +# Intellij +###################### +.idea/ +*.iml +*.iws +*.ipr +*.ids +*.orig +classes/ +out/ + +###################### +# Visual Studio Code +###################### +.vscode/ + +###################### +# Maven +###################### +/log/ +/target/ + +###################### +# Gradle +###################### +.gradle/ +/build/ + +###################### +# Package Files +###################### +*.jar +*.war +*.ear +*.db + +###################### +# Windows +###################### +# Windows image file caches +Thumbs.db + +# Folder config file +Desktop.ini + +###################### +# Mac OSX +###################### +.DS_Store +.svn + +# Thumbnails +._* + +# Files that might appear on external disk +.Spotlight-V100 +.Trashes + +###################### +# Directories +###################### +/bin/ +/deploy/ + +###################### +# Logs +###################### +*.log* + +###################### +# Others +###################### +*.class +*.*~ +*~ +.merge_file* + +###################### +# Gradle Wrapper +###################### +!gradle/wrapper/gradle-wrapper.jar + +###################### +# Maven Wrapper +###################### +!.mvn/wrapper/maven-wrapper.jar + +###################### +# ESLint +###################### +.eslintcache diff --git a/jhipster-6/bookstore-monolith/.huskyrc b/jhipster-6/bookstore-monolith/.huskyrc new file mode 100644 index 000000000000..9e18d87674f4 --- /dev/null +++ b/jhipster-6/bookstore-monolith/.huskyrc @@ -0,0 +1,5 @@ +{ + "hooks": { + "pre-commit": "lint-staged" + } +} diff --git a/jhipster-6/bookstore-monolith/.jhipster/Book.json b/jhipster-6/bookstore-monolith/.jhipster/Book.json new file mode 100644 index 000000000000..4c5bd1fa5238 --- /dev/null +++ b/jhipster-6/bookstore-monolith/.jhipster/Book.json @@ -0,0 +1,54 @@ +{ + "fluentMethods": true, + "clientRootFolder": "", + "relationships": [], + "fields": [ + { + "fieldName": "title", + "fieldType": "String", + "fieldValidateRules": [ + "required" + ] + }, + { + "fieldName": "author", + "fieldType": "String", + "fieldValidateRules": [ + "required" + ] + }, + { + "fieldName": "published", + "fieldType": "LocalDate", + "fieldValidateRules": [ + "required" + ] + }, + { + "fieldName": "quantity", + "fieldType": "Integer", + "fieldValidateRules": [ + "required", + "min" + ], + "fieldValidateRulesMin": 0 + }, + { + "fieldName": "price", + "fieldType": "Double", + "fieldValidateRules": [ + "required", + "min" + ], + "fieldValidateRulesMin": 0 + } + ], + "changelogDate": "20190319124041", + "dto": "mapstruct", + "searchEngine": false, + "service": "serviceImpl", + "entityTableName": "book", + "databaseType": "sql", + "jpaMetamodelFiltering": false, + "pagination": "no" +} diff --git a/jhipster-6/bookstore-monolith/.mvn/wrapper/MavenWrapperDownloader.java b/jhipster-6/bookstore-monolith/.mvn/wrapper/MavenWrapperDownloader.java new file mode 100644 index 000000000000..8fe1fab5a229 --- /dev/null +++ b/jhipster-6/bookstore-monolith/.mvn/wrapper/MavenWrapperDownloader.java @@ -0,0 +1,110 @@ +/* +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +*/ + +import java.net.*; +import java.io.*; +import java.nio.channels.*; +import java.util.Properties; + +public class MavenWrapperDownloader { + + /** + * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. + */ + private static final String DEFAULT_DOWNLOAD_URL = + "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar"; + + /** + * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to + * use instead of the default one. + */ + private static final String MAVEN_WRAPPER_PROPERTIES_PATH = + ".mvn/wrapper/maven-wrapper.properties"; + + /** + * Path where the maven-wrapper.jar will be saved to. + */ + private static final String MAVEN_WRAPPER_JAR_PATH = + ".mvn/wrapper/maven-wrapper.jar"; + + /** + * Name of the property which should be used to override the default download url for the wrapper. + */ + private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; + + public static void main(String args[]) { + System.out.println("- Downloader started"); + File baseDirectory = new File(args[0]); + System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); + + // If the maven-wrapper.properties exists, read it and check if it contains a custom + // wrapperUrl parameter. + File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); + String url = DEFAULT_DOWNLOAD_URL; + if (mavenWrapperPropertyFile.exists()) { + FileInputStream mavenWrapperPropertyFileInputStream = null; + try { + mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); + Properties mavenWrapperProperties = new Properties(); + mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); + url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); + } catch (IOException e) { + System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); + } finally { + try { + if (mavenWrapperPropertyFileInputStream != null) { + mavenWrapperPropertyFileInputStream.close(); + } + } catch (IOException e) { + // Ignore ... + } + } + } + System.out.println("- Downloading from: : " + url); + + File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); + if (!outputFile.getParentFile().exists()) { + if (!outputFile.getParentFile().mkdirs()) { + System.out.println( + "- ERROR creating output direcrory '" + outputFile.getParentFile().getAbsolutePath() + "'"); + } + } + System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); + try { + downloadFileFromURL(url, outputFile); + System.out.println("Done"); + System.exit(0); + } catch (Throwable e) { + System.out.println("- Error downloading"); + e.printStackTrace(); + System.exit(1); + } + } + + private static void downloadFileFromURL(String urlString, File destination) throws Exception { + URL website = new URL(urlString); + ReadableByteChannel rbc; + rbc = Channels.newChannel(website.openStream()); + FileOutputStream fos = new FileOutputStream(destination); + fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); + fos.close(); + rbc.close(); + } + +} diff --git a/jhipster-6/bookstore-monolith/.mvn/wrapper/maven-wrapper.jar b/jhipster-6/bookstore-monolith/.mvn/wrapper/maven-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..01e67997377a393fd672c7dcde9dccbedf0cb1e9 GIT binary patch literal 48337 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 \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi + done + + saveddir=`pwd` + + M2_HOME=`dirname "$PRG"`/.. + + # make it fully qualified + M2_HOME=`cd "$M2_HOME" && pwd` + + cd "$saveddir" + # echo Using m2 at $M2_HOME +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --unix "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +fi + +# For Mingw, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$M2_HOME" ] && + M2_HOME="`(cd "$M2_HOME"; pwd)`" + [ -n "$JAVA_HOME" ] && + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" + # TODO classpath? +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="`which javac`" + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=`which readlink` + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then + if $darwin ; then + javaHome="`dirname \"$javaExecutable\"`" + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + else + javaExecutable="`readlink -f \"$javaExecutable\"`" + fi + javaHome="`dirname \"$javaExecutable\"`" + javaHome=`expr "$javaHome" : '\(.*\)/bin'` + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="`which java`" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + + if [ -z "$1" ] + then + echo "Path not specified to find_maven_basedir" + return 1 + fi + + basedir="$1" + wdir="$1" + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + # workaround for JBEAP-8937 (on Solaris 10/Sparc) + if [ -d "${wdir}" ]; then + wdir=`cd "$wdir/.."; pwd` + fi + # end of workaround + done + echo "${basedir}" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + echo "$(tr -s '\n' ' ' < "$1")" + fi +} + +BASE_DIR=`find_maven_basedir "$(pwd)"` +if [ -z "$BASE_DIR" ]; then + exit 1; +fi + +########################################################################################## +# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +# This allows using the maven wrapper in projects that prohibit checking in binary data. +########################################################################################## +if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found .mvn/wrapper/maven-wrapper.jar" + fi +else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." + fi + jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar" + while IFS="=" read key value; do + case "$key" in (wrapperUrl) jarUrl="$value"; break ;; + esac + done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" + if [ "$MVNW_VERBOSE" = true ]; then + echo "Downloading from: $jarUrl" + fi + wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" + + if command -v wget > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found wget ... using wget" + fi + wget "$jarUrl" -O "$wrapperJarPath" + elif command -v curl > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found curl ... using curl" + fi + curl -o "$wrapperJarPath" "$jarUrl" + else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Falling back to using Java to download" + fi + javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" + if [ -e "$javaClass" ]; then + if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Compiling MavenWrapperDownloader.java ..." + fi + # Compiling the Java class + ("$JAVA_HOME/bin/javac" "$javaClass") + fi + if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + # Running the downloader + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Running MavenWrapperDownloader.java ..." + fi + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") + fi + fi + fi +fi +########################################################################################## +# End of extension +########################################################################################## + +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} +if [ "$MVNW_VERBOSE" = true ]; then + echo $MAVEN_PROJECTBASEDIR +fi +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --path --windows "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --windows "$CLASSPATH"` + [ -n "$MAVEN_PROJECTBASEDIR" ] && + MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` +fi + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +exec "$JAVACMD" \ + $MAVEN_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/jhipster-6/bookstore-monolith/mvnw.cmd b/jhipster-6/bookstore-monolith/mvnw.cmd new file mode 100644 index 000000000000..e5cfb0ae9eab --- /dev/null +++ b/jhipster-6/bookstore-monolith/mvnw.cmd @@ -0,0 +1,161 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Maven2 Start Up Batch script +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM M2_HOME - location of maven2's installed home dir +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM set title of command window +title %0 +@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" +if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar" +FOR /F "tokens=1,2 delims==" %%A IN (%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties) DO ( + IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B +) + +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. +if exist %WRAPPER_JAR% ( + echo Found %WRAPPER_JAR% +) else ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %DOWNLOAD_URL% + powershell -Command "(New-Object Net.WebClient).DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')" + echo Finished downloading %WRAPPER_JAR% +) +@REM End of extension + +%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" +if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%" == "on" pause + +if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% + +exit /B %ERROR_CODE% diff --git a/jhipster-6/bookstore-monolith/package.json b/jhipster-6/bookstore-monolith/package.json new file mode 100644 index 000000000000..76b74a431204 --- /dev/null +++ b/jhipster-6/bookstore-monolith/package.json @@ -0,0 +1,128 @@ +{ + "name": "bookstore", + "version": "0.0.0", + "description": "Description for Bookstore", + "private": true, + "license": "UNLICENSED", + "cacheDirectories": [ + "node_modules" + ], + "dependencies": { + "@angular/common": "7.2.4", + "@angular/compiler": "7.2.4", + "@angular/core": "7.2.4", + "@angular/forms": "7.2.4", + "@angular/platform-browser": "7.2.4", + "@angular/platform-browser-dynamic": "7.2.4", + "@angular/router": "7.2.4", + "@fortawesome/angular-fontawesome": "0.3.0", + "@fortawesome/fontawesome-svg-core": "1.2.14", + "@fortawesome/free-solid-svg-icons": "5.7.1", + "@ng-bootstrap/ng-bootstrap": "4.0.2", + "@ngx-translate/core": "11.0.1", + "@ngx-translate/http-loader": "4.0.0", + "bootstrap": "4.2.1", + "core-js": "2.6.4", + "moment": "2.24.0", + "ng-jhipster": "0.9.1", + "ngx-cookie": "2.0.1", + "ngx-infinite-scroll": "7.0.1", + "ngx-webstorage": "2.0.1", + "rxjs": "6.4.0", + "swagger-ui": "2.2.10", + "tslib": "1.9.3", + "zone.js": "0.8.29" + }, + "devDependencies": { + "@angular/cli": "7.3.1", + "@angular/compiler-cli": "7.2.4", + "@ngtools/webpack": "7.3.1", + "@types/jest": "24.0.0", + "@types/node": "10.12.24", + "angular-router-loader": "0.8.5", + "angular2-template-loader": "0.6.2", + "autoprefixer": "9.4.7", + "browser-sync": "2.26.3", + "browser-sync-webpack-plugin": "2.2.2", + "cache-loader": "2.0.1", + "codelyzer": "4.5.0", + "copy-webpack-plugin": "4.6.0", + "css-loader": "2.1.0", + "file-loader": "3.0.1", + "fork-ts-checker-webpack-plugin": "0.5.2", + "friendly-errors-webpack-plugin": "1.7.0", + "generator-jhipster": "6.0.0", + "html-loader": "0.5.5", + "html-webpack-plugin": "3.2.0", + "husky": "1.3.1", + "jest": "24.1.0", + "jest-junit": "6.2.1", + "jest-preset-angular": "6.0.2", + "jest-sonar-reporter": "2.0.0", + "lint-staged": "8.1.3", + "mini-css-extract-plugin": "0.5.0", + "moment-locales-webpack-plugin": "1.0.7", + "optimize-css-assets-webpack-plugin": "5.0.1", + "prettier": "1.16.4", + "reflect-metadata": "0.1.13", + "rimraf": "2.6.3", + "simple-progress-webpack-plugin": "1.1.2", + "style-loader": "0.23.1", + "terser-webpack-plugin": "1.2.2", + "thread-loader": "2.1.2", + "to-string-loader": "1.1.5", + "ts-loader": "5.3.3", + "tslint": "5.12.1", + "tslint-config-prettier": "1.18.0", + "tslint-loader": "3.6.0", + "typescript": "3.2.4", + "sass": "1.17.0", + "sass-loader": "7.1.0", + "postcss-loader": "3.0.0", + "xml2js": "0.4.19", + "webpack": "4.29.3", + "webpack-cli": "3.2.3", + "webpack-dev-server": "3.1.14", + "webpack-merge": "4.2.1", + "webpack-notifier": "1.7.0", + "webpack-visualizer-plugin": "0.1.11", + "workbox-webpack-plugin": "3.6.3", + "write-file-webpack-plugin": "4.5.0" + }, + "engines": { + "node": ">=8.9.0" + }, + "lint-staged": { + "{,src/**/}*.{md,json,ts,css,scss}": [ + "prettier --write", + "git add" + ] + }, + "scripts": { + "prettier:format": "prettier --write \"{,src/**/}*.{md,json,ts,css,scss}\"", + "lint": "tslint --project tsconfig.json -e 'node_modules/**'", + "lint:fix": "npm run lint -- --fix", + "ngc": "ngc -p tsconfig-aot.json", + "cleanup": "rimraf target/{aot,www}", + "clean-www": "rimraf target//www/app/{src,target/}", + "start": "npm run webpack:dev", + "start-tls": "npm run webpack:dev -- --env.tls", + "serve": "npm run start", + "build": "npm run webpack:prod", + "test": "npm run lint && jest --coverage --logHeapUsage -w=2 --config src/test/javascript/jest.conf.js", + "test:watch": "npm run test -- --watch", + "webpack:dev": "npm run webpack-dev-server -- --config webpack/webpack.dev.js --inline --hot --port=9060 --watch-content-base --env.stats=minimal", + "webpack:dev-verbose": "npm run webpack-dev-server -- --config webpack/webpack.dev.js --inline --hot --port=9060 --watch-content-base --profile --progress --env.stats=normal", + "webpack:build:main": "npm run webpack -- --config webpack/webpack.dev.js --env.stats=minimal", + "webpack:build": "npm run cleanup && npm run webpack:build:main", + "webpack:prod:main": "npm run webpack -- --config webpack/webpack.prod.js --profile", + "webpack:prod": "npm run cleanup && npm run webpack:prod:main && npm run clean-www", + "webpack:test": "npm run test", + "webpack-dev-server": "node --max_old_space_size=4096 node_modules/webpack-dev-server/bin/webpack-dev-server.js", + "webpack": "node --max_old_space_size=4096 node_modules/webpack/bin/webpack.js" + }, + "jestSonar": { + "reportPath": "target/test-results/jest", + "reportFile": "TESTS-results-sonar.xml" + } +} diff --git a/jhipster-6/bookstore-monolith/pom.xml b/jhipster-6/bookstore-monolith/pom.xml new file mode 100644 index 000000000000..f719baab8b5c --- /dev/null +++ b/jhipster-6/bookstore-monolith/pom.xml @@ -0,0 +1,1144 @@ + + + 4.0.0 + + com.baeldung.jhipster6 + bookstore-monolith + 0.0.1-SNAPSHOT + war + bookstore-monolith + + + jhipster-6 + com.baeldung.jhipster + 1.0.0-SNAPSHOT + + + + + + + + + + + + + + + + io.github.jhipster + jhipster-dependencies + ${jhipster-dependencies.version} + pom + import + + + + + + + + io.github.jhipster + jhipster-framework + 3.0.1 + + + + + jakarta.xml.bind + jakarta.xml.bind-api + 4.0.0 + + + + org.glassfish.jaxb + jaxb-runtime + 4.0.0 + + + + + + + com.fasterxml.jackson.datatype + jackson-datatype-hibernate5 + + + com.fasterxml.jackson.datatype + jackson-datatype-hppc + + + com.fasterxml.jackson.datatype + jackson-datatype-jsr310 + + + com.fasterxml.jackson.module + jackson-module-afterburner + + + com.h2database + h2 + test + + + com.jayway.jsonpath + json-path + test + + + + io.springfox + springfox-swagger2 + + + io.springfox + springfox-bean-validators + + + + + + + com.zaxxer + HikariCP + + + commons-io + commons-io + + + org.apache.commons + commons-lang3 + + + mysql + mysql-connector-java + + + org.assertj + assertj-core + test + + + org.hibernate + hibernate-jpamodelgen + provided + + + org.hibernate + hibernate-envers + + + org.hibernate.validator + hibernate-validator + + + org.liquibase + liquibase-core + + + net.logstash.logback + logstash-logback-encoder + + + + + + + org.mapstruct + mapstruct + + + org.mapstruct + mapstruct-processor + provided + + + org.springframework.boot + spring-boot-configuration-processor + provided + + + org.springframework.boot + spring-boot-loader-tools + + + org.springframework.boot + spring-boot-starter-actuator + + + org.springframework.boot + spring-boot-starter-aop + + + org.springframework.boot + spring-boot-starter-data-jpa + + + org.springframework.boot + spring-boot-starter-logging + + + org.springframework.boot + spring-boot-starter-mail + + + org.springframework.boot + spring-boot-starter-security + + + org.springframework.boot + spring-boot-starter-thymeleaf + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-test + test + + + org.springframework.boot + spring-boot-test + test + + + org.springframework.security + spring-security-test + test + + + org.zalando + problem-spring-web + + + io.jsonwebtoken + jjwt-api + + + io.jsonwebtoken + jjwt-impl + runtime + + + io.jsonwebtoken + jjwt-jackson + runtime + + + + org.springframework.boot + spring-boot-starter-cloud-connectors + + + + org.springframework.security + spring-security-data + + + io.micrometer + micrometer-registry-prometheus + + + io.dropwizard.metrics + metrics-core + + + net.bytebuddy + byte-buddy + ${byte-buddy.version} + test + + + + + + spring-boot:run + + + org.codehaus.mojo + properties-maven-plugin + 1.0.0 + + + + set-system-properties + + + + + org.slf4j.simpleLogger.log.com.github.eirslett + error + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + + org.mapstruct + mapstruct-processor + ${mapstruct.version} + + + + org.hibernate + hibernate-jpamodelgen + ${hibernate.version} + + + org.glassfish.jaxb + jaxb-runtime + ${jaxb-runtime.version} + + + + + + + org.apache.maven.plugins + maven-eclipse-plugin + + + org.apache.maven.plugins + maven-enforcer-plugin + + + org.apache.maven.plugins + maven-idea-plugin + + + org.apache.maven.plugins + maven-resources-plugin + + + org.apache.maven.plugins + maven-surefire-plugin + + + org.jacoco + jacoco-maven-plugin + + + org.sonarsource.scanner.maven + sonar-maven-plugin + + + org.liquibase + liquibase-maven-plugin + + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + + + ${start-class} + true + true + + + + + com.google.cloud.tools + jib-maven-plugin + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + + com.github.eirslett + frontend-maven-plugin + ${frontend-maven-plugin.version} + + + pl.project13.maven + git-commit-id-plugin + ${git-commit-id-plugin.version} + + + + revision + + + + + false + true + + ^git.commit.id.abbrev$ + ^git.commit.id.describe$ + ^git.branch$ + + + + + org.jacoco + jacoco-maven-plugin + ${jacoco-maven-plugin.version} + + + pre-unit-tests + + prepare-agent + + + + ${project.testresult.directory}/coverage/jacoco/jacoco.exec + + + + + post-unit-test + test + + report + + + ${project.testresult.directory}/coverage/jacoco/jacoco.exec + ${project.testresult.directory}/coverage/jacoco + + + + + + com.google.cloud.tools + jib-maven-plugin + ${jib-maven-plugin.version} + + + openjdk:8-jre-alpine + + + bookstore:latest + + + + sh + + chmod +x /entrypoint.sh && sync && /entrypoint.sh + + + 8080 + + + ALWAYS + 0 + + true + + + + + org.liquibase + liquibase-maven-plugin + ${liquibase.version} + + ${project.basedir}/src/main/resources/config/liquibase/master.xml + ${project.basedir}/src/main/resources/config/liquibase/changelog/${maven.build.timestamp}_changelog.xml + + + + Bookstore + + hibernate:spring:com.baeldung.jhipster5.domain?dialect=&hibernate.physical_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy&hibernate.implicit_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy + true + debug + + + + org.javassist + javassist + ${javassist.version} + + + org.liquibase.ext + liquibase-hibernate5 + ${liquibase-hibernate5.version} + + + org.springframework.boot + spring-boot-starter-data-jpa + ${spring-boot.version} + + + javax.validation + validation-api + ${validation-api.version} + + + + + maven-clean-plugin + ${maven-clean-plugin.version} + + + org.apache.maven.plugins + maven-eclipse-plugin + ${maven-eclipse-plugin.version} + + true + true + + + + org.apache.maven.plugins + maven-enforcer-plugin + ${maven-enforcer-plugin.version} + + + enforce-versions + + enforce + + + + + + + You are running an older version of Maven. JHipster requires at least Maven ${maven.version} + [${maven.version},) + + + You are running an incompatible version of Java. JHipster supports JDK 11. + [${java.version},) + + + + + + org.apache.maven.plugins + maven-idea-plugin + ${maven-idea-plugin.version} + + node_modules + + + + org.apache.maven.plugins + maven-resources-plugin + ${maven-resources-plugin.version} + + + default-resources + validate + + copy-resources + + + ${project.build.directory}/classes + false + + # + + + + src/main/resources/ + true + + config/*.yml + + + + src/main/resources/ + false + + config/*.yml + + + + + + + jib-www-resources + verify + + copy-resources + + + ${project.build.directory}/classes/static/ + + + ${project.build.directory}/www + false + + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} + + + alphabetical + + + false + ${sonar.junit.reportsPath} + + + + org.apache.maven.plugins + maven-war-plugin + ${maven-war-plugin.version} + + + net.alchim31.maven + scala-maven-plugin + ${scala-maven-plugin.version} + + + compile + compile + + add-source + compile + + + + test-compile + test-compile + + add-source + testCompile + + + + + incremental + true + ${scala.version} + + + + org.sonarsource.scanner.maven + sonar-maven-plugin + ${sonar-maven-plugin.version} + + + org.springframework.boot + spring-boot-maven-plugin + ${spring-boot.version} + + + + + + + no-liquibase + + ,no-liquibase + + + + swagger + + ,swagger + + + + tls + + ,tls + + + + webpack + + + ${basedir}/target/www/app/main.bundle.js + + + + + org.springframework.boot + spring-boot-starter-undertow + + + org.springframework.boot + spring-boot-devtools + true + + + com.h2database + h2 + + + + + + com.github.eirslett + frontend-maven-plugin + + + install node and npm + + install-node-and-npm + + + ${node.version} + ${npm.version} + + + + npm install + + npm + + + install --legacy-peer-deps + + + + webpack build dev + + npm + + generate-resources + + run webpack:build + false + + + + + + org.apache.maven.plugins + maven-war-plugin + + false + target/www/ + + + src/main/webapp + + WEB-INF/** + + + + + + + + + + dev${profile.no-liquibase} + + + + dev + + true + + + + org.springframework.boot + spring-boot-starter-undertow + + + org.springframework.boot + spring-boot-devtools + true + + + com.h2database + h2 + + + + + + org.apache.maven.plugins + maven-war-plugin + + false + target/www/ + + + src/main/webapp + + WEB-INF/** + + + + + + + + + + dev${profile.tls}${profile.no-liquibase} + + + + prod + + + org.springframework.boot + spring-boot-starter-undertow + + + + + + maven-clean-plugin + + + + target/www/ + + + + + + org.apache.maven.plugins + maven-war-plugin + + false + target/www/ + + + src/main/webapp + + WEB-INF/** + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + ${start-class} + true + + + + + build-info + + + + + + com.github.eirslett + frontend-maven-plugin + + + install node and npm + + install-node-and-npm + + + ${node.version} + ${npm.version} + + + + npm install + + npm + + + install + + + + webpack build test + + npm + + test + + run webpack:test + false + + + + webpack build prod + + npm + + generate-resources + + run webpack:prod + false + + + + + + pl.project13.maven + git-commit-id-plugin + + + + + + prod${profile.swagger}${profile.no-liquibase} + + + + + cc + + + org.springframework.boot + spring-boot-starter-undertow + + + org.springframework.boot + spring-boot-devtools + true + + + + + + org.apache.maven.plugins + maven-war-plugin + + false + src/main/webapp/ + + + + org.springframework.boot + spring-boot-maven-plugin + + ${start-class} + true + true + true + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + default-compile + none + + + default-testCompile + none + + + + + net.alchim31.maven + scala-maven-plugin + + + + + + dev,swagger + + + + + IDE + + + org.mapstruct + mapstruct-processor + + + org.hibernate + hibernate-jpamodelgen + + + + + + eclipse + + + m2e.version + + + + + + + + org.eclipse.m2e + lifecycle-mapping + ${lifecycle-mapping.version} + + + + + + org.jacoco + + jacoco-maven-plugin + + + ${jacoco-maven-plugin.version} + + + prepare-agent + + + + + + + + + com.github.eirslett + frontend-maven-plugin + ${frontend-maven-plugin.version} + + install-node-and-npm + npm + + + + + + + + + + + + + + + + + + + 3.0.0 + 11 + 2.12.6 + v10.15.0 + 6.4.1 + ${project.build.directory}/test-results + yyyyMMddHHmmss + ${java.version} + ${java.version} + -Djava.security.egd=file:/dev/./urandom -Xmx256m + jdt_apt + false + + + + + + + 3.0.1 + + 2.7.5 + + 5.3.9.Final + + 3.23.1-GA + + 3.6.3 + 3.6 + 5.1.5.RELEASE + 2.0.1.Final + 2.3.2 + 1.3.0.Final + + + 3.1.0 + 3.8.0 + 2.10 + 3.0.0-M1 + 2.2.1 + 3.1.0 + 3.0.0-M3 + 3.2.2 + 0.9.11 + 1.7.6 + 0.8.2 + 1.0.0 + 3.4.2 + 3.5.0.1254 + 2.2.5 + + + http://localhost:9001 + src/main/webapp/content/**/*.*, src/main/webapp/i18n/*.js, target/www/**/*.* + S3437,S4502,S4684,UndocumentedApi,BoldAndItalicTagsCheck + + src/main/webapp/app/**/*.* + Web:BoldAndItalicTagsCheck + + src/main/java/**/* + squid:S3437 + + src/main/java/**/* + squid:UndocumentedApi + + src/main/java/**/* + squid:S4502 + + src/main/java/**/* + squid:S4684 + ${project.testresult.directory}/coverage/jacoco/jacoco.exec + jacoco + ${project.testresult.directory}/lcov.info + ${project.basedir}/src/main/ + ${project.testresult.directory} + ${project.basedir}/src/test/ + + + + diff --git a/jhipster-6/bookstore-monolith/postcss.config.js b/jhipster-6/bookstore-monolith/postcss.config.js new file mode 100644 index 000000000000..a26de7e9f1a3 --- /dev/null +++ b/jhipster-6/bookstore-monolith/postcss.config.js @@ -0,0 +1,5 @@ +module.exports = { + plugins: [ + require('autoprefixer') + ] +} diff --git a/jhipster-6/bookstore-monolith/proxy.conf.json b/jhipster-6/bookstore-monolith/proxy.conf.json new file mode 100644 index 000000000000..8b41fdf7fae8 --- /dev/null +++ b/jhipster-6/bookstore-monolith/proxy.conf.json @@ -0,0 +1,7 @@ +{ + "*": { + "target": "http://localhost:8080", + "secure": false, + "loglevel": "debug" + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/docker/.dockerignore b/jhipster-6/bookstore-monolith/src/main/docker/.dockerignore new file mode 100644 index 000000000000..b03bdc71eeee --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/docker/.dockerignore @@ -0,0 +1,14 @@ +# https://docs.docker.com/engine/reference/builder/#dockerignore-file +classes/ +generated-sources/ +generated-test-sources/ +h2db/ +maven-archiver/ +maven-status/ +reports/ +surefire-reports/ +test-classes/ +test-results/ +www/ +!*.jar +!*.war diff --git a/jhipster-6/bookstore-monolith/src/main/docker/Dockerfile b/jhipster-6/bookstore-monolith/src/main/docker/Dockerfile new file mode 100644 index 000000000000..43fadcb6f8f0 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/docker/Dockerfile @@ -0,0 +1,20 @@ +FROM openjdk:8-jre-alpine + +ENV SPRING_OUTPUT_ANSI_ENABLED=ALWAYS \ + JHIPSTER_SLEEP=0 \ + JAVA_OPTS="" + +# Add a jhipster user to run our application so that it doesn't need to run as root +RUN adduser -D -s /bin/sh jhipster +WORKDIR /home/jhipster + +ADD entrypoint.sh entrypoint.sh +RUN chmod 755 entrypoint.sh && chown jhipster:jhipster entrypoint.sh +USER jhipster + +ENTRYPOINT ["./entrypoint.sh"] + +EXPOSE 8080 + +ADD *.war app.war + diff --git a/jhipster-6/bookstore-monolith/src/main/docker/app.yml b/jhipster-6/bookstore-monolith/src/main/docker/app.yml new file mode 100644 index 000000000000..f60f0f503870 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/docker/app.yml @@ -0,0 +1,15 @@ +version: '2' +services: + bookstore-app: + image: bookstore + environment: + - _JAVA_OPTIONS=-Xmx512m -Xms256m + - SPRING_PROFILES_ACTIVE=prod,swagger + - SPRING_DATASOURCE_URL=jdbc:mysql://bookstore-mysql:3306/bookstore?useUnicode=true&characterEncoding=utf8&useSSL=false + - JHIPSTER_SLEEP=10 # gives time for the database to boot before the application + ports: + - 8080:8080 + bookstore-mysql: + extends: + file: mysql.yml + service: bookstore-mysql diff --git a/jhipster-6/bookstore-monolith/src/main/docker/entrypoint.sh b/jhipster-6/bookstore-monolith/src/main/docker/entrypoint.sh new file mode 100644 index 000000000000..ccffafb5a499 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/docker/entrypoint.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +echo "The application will start in ${JHIPSTER_SLEEP}s..." && sleep ${JHIPSTER_SLEEP} +exec java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar "${HOME}/app.war" "$@" diff --git a/jhipster-6/bookstore-monolith/src/main/docker/grafana/provisioning/dashboards/JVM.json b/jhipster-6/bookstore-monolith/src/main/docker/grafana/provisioning/dashboards/JVM.json new file mode 100644 index 000000000000..b299032c99e3 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/docker/grafana/provisioning/dashboards/JVM.json @@ -0,0 +1,3778 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": "-- Grafana --", + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "limit": 100, + "name": "Annotations & Alerts", + "showIn": 0, + "type": "dashboard" + }, + { + "datasource": "Prometheus", + "enable": true, + "expr": "resets(process_uptime_seconds{application=\"$application\", instance=\"$instance\"}[1m]) > 0", + "iconColor": "rgba(255, 96, 96, 1)", + "name": "Restart Detection", + "showIn": 0, + "step": "1m", + "tagKeys": "restart-tag", + "textFormat": "uptime reset", + "titleFormat": "Restart" + } + ] + }, + "description": "Dashboard for Micrometer instrumented applications (Java, Spring Boot, Micronaut)", + "editable": true, + "gnetId": 4701, + "graphTooltip": 1, + "iteration": 1553765841423, + "links": [], + "panels": [ + { + "content": "\n# Acknowledgments\n\nThank you to [Michael Weirauch](https://twitter.com/emwexx) for creating this dashboard: see original JVM (Micrometer) dashboard at [https://grafana.com/dashboards/4701](https://grafana.com/dashboards/4701)\n\n\n\n", + "gridPos": { + "h": 3, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 141, + "links": [], + "mode": "markdown", + "timeFrom": null, + "timeShift": null, + "title": "Acknowledgments", + "type": "text" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 3 + }, + "id": 125, + "panels": [], + "repeat": null, + "title": "Quick Facts", + "type": "row" + }, + { + "cacheTimeout": null, + "colorBackground": false, + "colorValue": true, + "colors": ["rgba(245, 54, 54, 0.9)", "rgba(237, 129, 40, 0.89)", "rgba(50, 172, 45, 0.97)"], + "datasource": "Prometheus", + "decimals": 1, + "editable": true, + "error": false, + "format": "s", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": false, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 0, + "y": 4 + }, + "height": "", + "id": 63, + "interval": null, + "links": [], + "mappingType": 1, + "mappingTypes": [ + { + "name": "value to text", + "value": 1 + }, + { + "name": "range to text", + "value": 2 + } + ], + "maxDataPoints": 100, + "nullPointMode": "connected", + "nullText": null, + "postfix": "", + "postfixFontSize": "50%", + "prefix": "", + "prefixFontSize": "70%", + "rangeMaps": [ + { + "from": "null", + "text": "N/A", + "to": "null" + } + ], + "sparkline": { + "fillColor": "rgba(31, 118, 189, 0.18)", + "full": false, + "lineColor": "rgb(31, 120, 193)", + "show": false + }, + "tableColumn": "", + "targets": [ + { + "expr": "process_uptime_seconds{application=\"$application\", instance=\"$instance\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "", + "metric": "", + "refId": "A", + "step": 14400 + } + ], + "thresholds": "", + "title": "Uptime", + "type": "singlestat", + "valueFontSize": "80%", + "valueMaps": [ + { + "op": "=", + "text": "N/A", + "value": "null" + } + ], + "valueName": "current" + }, + { + "cacheTimeout": null, + "colorBackground": false, + "colorValue": true, + "colors": ["rgba(245, 54, 54, 0.9)", "rgba(237, 129, 40, 0.89)", "rgba(50, 172, 45, 0.97)"], + "datasource": "Prometheus", + "decimals": null, + "editable": true, + "error": false, + "format": "dateTimeAsIso", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": false, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 6, + "y": 4 + }, + "height": "", + "id": 92, + "interval": null, + "links": [], + "mappingType": 1, + "mappingTypes": [ + { + "name": "value to text", + "value": 1 + }, + { + "name": "range to text", + "value": 2 + } + ], + "maxDataPoints": 100, + "nullPointMode": "connected", + "nullText": null, + "postfix": "", + "postfixFontSize": "50%", + "prefix": "", + "prefixFontSize": "70%", + "rangeMaps": [ + { + "from": "null", + "text": "N/A", + "to": "null" + } + ], + "sparkline": { + "fillColor": "rgba(31, 118, 189, 0.18)", + "full": false, + "lineColor": "rgb(31, 120, 193)", + "show": false + }, + "tableColumn": "", + "targets": [ + { + "expr": "process_start_time_seconds{application=\"$application\", instance=\"$instance\"}*1000", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "", + "metric": "", + "refId": "A", + "step": 14400 + } + ], + "thresholds": "", + "title": "Start time", + "type": "singlestat", + "valueFontSize": "70%", + "valueMaps": [ + { + "op": "=", + "text": "N/A", + "value": "null" + } + ], + "valueName": "current" + }, + { + "cacheTimeout": null, + "colorBackground": false, + "colorValue": true, + "colors": ["rgba(50, 172, 45, 0.97)", "rgba(237, 129, 40, 0.89)", "rgba(245, 54, 54, 0.9)"], + "datasource": "Prometheus", + "decimals": 2, + "editable": true, + "error": false, + "format": "percent", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": false, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 12, + "y": 4 + }, + "id": 65, + "interval": null, + "links": [], + "mappingType": 1, + "mappingTypes": [ + { + "name": "value to text", + "value": 1 + }, + { + "name": "range to text", + "value": 2 + } + ], + "maxDataPoints": 100, + "nullPointMode": "connected", + "nullText": null, + "postfix": "", + "postfixFontSize": "50%", + "prefix": "", + "prefixFontSize": "70%", + "rangeMaps": [ + { + "from": "null", + "text": "N/A", + "to": "null" + } + ], + "sparkline": { + "fillColor": "rgba(31, 118, 189, 0.18)", + "full": false, + "lineColor": "rgb(31, 120, 193)", + "show": false + }, + "tableColumn": "", + "targets": [ + { + "expr": "sum(jvm_memory_used_bytes{application=\"$application\", instance=\"$instance\", area=\"heap\"})*100/sum(jvm_memory_max_bytes{application=\"$application\",instance=\"$instance\", area=\"heap\"})", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "", + "refId": "A", + "step": 14400 + } + ], + "thresholds": "70,90", + "title": "Heap used", + "type": "singlestat", + "valueFontSize": "80%", + "valueMaps": [ + { + "op": "=", + "text": "N/A", + "value": "null" + } + ], + "valueName": "current" + }, + { + "cacheTimeout": null, + "colorBackground": false, + "colorValue": true, + "colors": ["rgba(50, 172, 45, 0.97)", "rgba(237, 129, 40, 0.89)", "rgba(245, 54, 54, 0.9)"], + "datasource": "Prometheus", + "decimals": 2, + "editable": true, + "error": false, + "format": "percent", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": false, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 18, + "y": 4 + }, + "id": 75, + "interval": null, + "links": [], + "mappingType": 2, + "mappingTypes": [ + { + "name": "value to text", + "value": 1 + }, + { + "name": "range to text", + "value": 2 + } + ], + "maxDataPoints": 100, + "nullPointMode": "connected", + "nullText": null, + "postfix": "", + "postfixFontSize": "50%", + "prefix": "", + "prefixFontSize": "70%", + "rangeMaps": [ + { + "from": "null", + "text": "N/A", + "to": "null" + }, + { + "from": "-99999999999999999999999999999999", + "text": "N/A", + "to": "0" + } + ], + "sparkline": { + "fillColor": "rgba(31, 118, 189, 0.18)", + "full": false, + "lineColor": "rgb(31, 120, 193)", + "show": false + }, + "tableColumn": "", + "targets": [ + { + "expr": "sum(jvm_memory_used_bytes{application=\"$application\", instance=\"$instance\", area=\"nonheap\"})*100/sum(jvm_memory_max_bytes{application=\"$application\",instance=\"$instance\", area=\"nonheap\"})", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "", + "refId": "A", + "step": 14400 + } + ], + "thresholds": "70,90", + "title": "Non-Heap used", + "type": "singlestat", + "valueFontSize": "80%", + "valueMaps": [ + { + "op": "=", + "text": "N/A", + "value": "null" + }, + { + "op": "=", + "text": "x", + "value": "" + } + ], + "valueName": "current" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 7 + }, + "id": 126, + "panels": [], + "repeat": null, + "title": "I/O Overview", + "type": "row" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 1, + "gridPos": { + "h": 7, + "w": 8, + "x": 0, + "y": 8 + }, + "id": 111, + "legend": { + "avg": false, + "current": true, + "max": false, + "min": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "sum(rate(http_server_requests_seconds_count{application=\"$application\", instance=\"$instance\"}[1m]))", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "HTTP", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Rate", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "decimals": null, + "format": "ops", + "label": null, + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": { + "HTTP": "#890f02", + "HTTP - 5xx": "#bf1b00" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 1, + "gridPos": { + "h": 7, + "w": 8, + "x": 8, + "y": 8 + }, + "id": 112, + "legend": { + "avg": false, + "current": true, + "max": false, + "min": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "sum(rate(http_server_requests_seconds_count{application=\"$application\", instance=\"$instance\", status=~\"5..\"}[1m]))", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "HTTP - 5xx", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Errors", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "decimals": null, + "format": "ops", + "label": null, + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 1, + "gridPos": { + "h": 7, + "w": 8, + "x": 16, + "y": 8 + }, + "id": 113, + "legend": { + "avg": false, + "current": true, + "max": false, + "min": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "sum(rate(http_server_requests_seconds_sum{application=\"$application\", instance=\"$instance\", status!~\"5..\"}[1m]))/sum(rate(http_server_requests_seconds_count{application=\"$application\", instance=\"$instance\", status!~\"5..\"}[1m]))", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "HTTP - AVG", + "refId": "A" + }, + { + "expr": "max(http_server_requests_seconds_max{application=\"$application\", instance=\"$instance\", status!~\"5..\"})", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "HTTP - MAX", + "refId": "B" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Duration", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "s", + "label": null, + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 15 + }, + "id": 127, + "panels": [], + "repeat": null, + "title": "JVM Memory", + "type": "row" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "editable": true, + "error": false, + "fill": 1, + "grid": { + "leftLogBase": 1, + "leftMax": null, + "leftMin": null, + "rightLogBase": 1, + "rightMax": null, + "rightMin": null + }, + "gridPos": { + "h": 7, + "w": 8, + "x": 0, + "y": 16 + }, + "id": 24, + "legend": { + "avg": false, + "current": true, + "max": true, + "min": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "sum(jvm_memory_used_bytes{application=\"$application\", instance=\"$instance\", area=\"heap\"})", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "used", + "metric": "", + "refId": "A", + "step": 2400 + }, + { + "expr": "sum(jvm_memory_committed_bytes{application=\"$application\", instance=\"$instance\", area=\"heap\"})", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "committed", + "refId": "B", + "step": 2400 + }, + { + "expr": "sum(jvm_memory_max_bytes{application=\"$application\", instance=\"$instance\", area=\"heap\"})", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "max", + "refId": "C", + "step": 2400 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "JVM Heap", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "x-axis": true, + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "y-axis": true, + "y_formats": ["mbytes", "short"], + "yaxes": [ + { + "format": "bytes", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "editable": true, + "error": false, + "fill": 1, + "grid": { + "leftLogBase": 1, + "leftMax": null, + "leftMin": null, + "rightLogBase": 1, + "rightMax": null, + "rightMin": null + }, + "gridPos": { + "h": 7, + "w": 8, + "x": 8, + "y": 16 + }, + "id": 25, + "legend": { + "avg": false, + "current": true, + "max": true, + "min": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "sum(jvm_memory_used_bytes{application=\"$application\", instance=\"$instance\", area=\"nonheap\"})", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "used", + "metric": "", + "refId": "A", + "step": 2400 + }, + { + "expr": "sum(jvm_memory_committed_bytes{application=\"$application\", instance=\"$instance\", area=\"nonheap\"})", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "committed", + "refId": "B", + "step": 2400 + }, + { + "expr": "sum(jvm_memory_max_bytes{application=\"$application\", instance=\"$instance\", area=\"nonheap\"})", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "max", + "refId": "C", + "step": 2400 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "JVM Non-Heap", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "x-axis": true, + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "y-axis": true, + "y_formats": ["mbytes", "short"], + "yaxes": [ + { + "format": "bytes", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "editable": true, + "error": false, + "fill": 1, + "grid": { + "leftLogBase": 1, + "leftMax": null, + "leftMin": null, + "rightLogBase": 1, + "rightMax": null, + "rightMin": null + }, + "gridPos": { + "h": 7, + "w": 8, + "x": 16, + "y": 16 + }, + "id": 26, + "legend": { + "alignAsTable": false, + "avg": false, + "current": true, + "max": true, + "min": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "sum(jvm_memory_used_bytes{application=\"$application\", instance=\"$instance\"})", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "used", + "metric": "", + "refId": "A", + "step": 2400 + }, + { + "expr": "sum(jvm_memory_committed_bytes{application=\"$application\", instance=\"$instance\"})", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "committed", + "refId": "B", + "step": 2400 + }, + { + "expr": "sum(jvm_memory_max_bytes{application=\"$application\", instance=\"$instance\"})", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "max", + "refId": "C", + "step": 2400 + }, + { + "expr": "process_memory_vss_bytes{application=\"$application\", instance=\"$instance\"}", + "format": "time_series", + "hide": true, + "intervalFactor": 2, + "legendFormat": "vss", + "metric": "", + "refId": "D", + "step": 2400 + }, + { + "expr": "process_memory_rss_bytes{application=\"$application\", instance=\"$instance\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "rss", + "refId": "E", + "step": 2400 + }, + { + "expr": "process_memory_pss_bytes{application=\"$application\", instance=\"$instance\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "pss", + "refId": "F", + "step": 2400 + }, + { + "expr": "process_memory_swap_bytes{application=\"$application\", instance=\"$instance\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "swap", + "refId": "G", + "step": 2400 + }, + { + "expr": "process_memory_swappss_bytes{application=\"$application\", instance=\"$instance\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "swappss", + "refId": "H", + "step": 2400 + }, + { + "expr": "process_memory_pss_bytes{application=\"$application\", instance=\"$instance\"} + process_memory_swap_bytes{application=\"$application\", instance=\"$instance\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "phys (pss+swap)", + "refId": "I", + "step": 2400 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "JVM Total", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "x-axis": true, + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "y-axis": true, + "y_formats": ["mbytes", "short"], + "yaxes": [ + { + "format": "bytes", + "label": "", + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 23 + }, + "id": 128, + "panels": [], + "repeat": null, + "title": "JVM Misc", + "type": "row" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "editable": true, + "error": false, + "fill": 1, + "grid": { + "leftLogBase": 1, + "leftMax": null, + "leftMin": null, + "rightLogBase": 1, + "rightMax": null, + "rightMin": null + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 0, + "y": 24 + }, + "id": 106, + "legend": { + "avg": false, + "current": true, + "max": true, + "min": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "system_cpu_usage{application=\"$application\", instance=\"$instance\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "system", + "metric": "", + "refId": "A", + "step": 2400 + }, + { + "expr": "process_cpu_usage{application=\"$application\", instance=\"$instance\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "process", + "refId": "B" + }, + { + "expr": "avg_over_time(process_cpu_usage{application=\"$application\", instance=\"$instance\"}[1h])", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "process-1h", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "CPU", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "x-axis": true, + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "y-axis": true, + "y_formats": ["short", "short"], + "yaxes": [ + { + "decimals": 1, + "format": "percentunit", + "label": "", + "logBase": 1, + "max": "1", + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "editable": true, + "error": false, + "fill": 1, + "grid": { + "leftLogBase": 1, + "leftMax": null, + "leftMin": null, + "rightLogBase": 1, + "rightMax": null, + "rightMin": null + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 6, + "y": 24 + }, + "id": 93, + "legend": { + "avg": false, + "current": true, + "max": true, + "min": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "system_load_average_1m{application=\"$application\", instance=\"$instance\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "system-1m", + "metric": "", + "refId": "A", + "step": 2400 + }, + { + "expr": "", + "format": "time_series", + "intervalFactor": 2, + "refId": "B" + }, + { + "expr": "system_cpu_count{application=\"$application\", instance=\"$instance\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "cpu", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Load", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "x-axis": true, + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "y-axis": true, + "y_formats": ["short", "short"], + "yaxes": [ + { + "decimals": 1, + "format": "short", + "label": "", + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "editable": true, + "error": false, + "fill": 1, + "grid": { + "leftLogBase": 1, + "leftMax": null, + "leftMin": null, + "rightLogBase": 1, + "rightMax": null, + "rightMin": null + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 12, + "y": 24 + }, + "id": 32, + "legend": { + "avg": false, + "current": true, + "max": true, + "min": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "jvm_threads_live{application=\"$application\", instance=\"$instance\"} or jvm_threads_live_threads{application=\"$application\", instance=\"$instance\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "live", + "metric": "", + "refId": "A", + "step": 2400 + }, + { + "expr": "jvm_threads_daemon{application=\"$application\", instance=\"$instance\"} or jvm_threads_daemon_threads{application=\"$application\", instance=\"$instance\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "daemon", + "metric": "", + "refId": "B", + "step": 2400 + }, + { + "expr": "jvm_threads_peak{application=\"$application\", instance=\"$instance\"} or jvm_threads_peak_threads{application=\"$application\", instance=\"$instance\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "peak", + "refId": "C", + "step": 2400 + }, + { + "expr": "process_threads{application=\"$application\", instance=\"$instance\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "process", + "refId": "D", + "step": 2400 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Threads", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "x-axis": true, + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "y-axis": true, + "y_formats": ["short", "short"], + "yaxes": [ + { + "decimals": 0, + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": { + "blocked": "#bf1b00", + "new": "#fce2de", + "runnable": "#7eb26d", + "terminated": "#511749", + "timed-waiting": "#c15c17", + "waiting": "#eab839" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 1, + "gridPos": { + "h": 7, + "w": 6, + "x": 18, + "y": 24 + }, + "id": 124, + "legend": { + "alignAsTable": false, + "avg": false, + "current": true, + "max": true, + "min": false, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "jvm_threads_states_threads{application=\"$application\", instance=\"$instance\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{state}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Thread States", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": { + "debug": "#1F78C1", + "error": "#BF1B00", + "info": "#508642", + "trace": "#6ED0E0", + "warn": "#EAB839" + }, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "editable": true, + "error": false, + "fill": 1, + "grid": { + "leftLogBase": 1, + "leftMax": null, + "leftMin": null, + "rightLogBase": 1, + "rightMax": null, + "rightMin": null + }, + "gridPos": { + "h": 7, + "w": 18, + "x": 0, + "y": 31 + }, + "height": "", + "id": 91, + "legend": { + "alignAsTable": false, + "avg": false, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": false, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "paceLength": 10, + "percentage": true, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "error", + "yaxis": 1 + }, + { + "alias": "warn", + "yaxis": 1 + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "increase(logback_events_total{application=\"$application\", instance=\"$instance\"}[1m])", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "{{level}}", + "metric": "", + "refId": "A", + "step": 1200 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Log Events (1m)", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "x-axis": true, + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "y-axis": true, + "y_formats": ["short", "short"], + "yaxes": [ + { + "decimals": 0, + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "editable": true, + "error": false, + "fill": 1, + "grid": { + "leftLogBase": 1, + "leftMax": null, + "leftMin": null, + "rightLogBase": 1, + "rightMax": null, + "rightMin": null + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 18, + "y": 31 + }, + "id": 61, + "legend": { + "avg": false, + "current": true, + "max": true, + "min": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "process_open_fds{application=\"$application\", instance=\"$instance\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "open", + "metric": "", + "refId": "A", + "step": 2400 + }, + { + "expr": "process_max_fds{application=\"$application\", instance=\"$instance\"}", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "max", + "metric": "", + "refId": "B", + "step": 2400 + }, + { + "expr": "process_files_open{application=\"$application\", instance=\"$instance\"} or process_files_open_files{application=\"$application\", instance=\"$instance\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "open", + "refId": "C" + }, + { + "expr": "process_files_max{application=\"$application\", instance=\"$instance\"} or process_files_max_files{application=\"$application\", instance=\"$instance\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "max", + "refId": "D" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "File Descriptors", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "x-axis": true, + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "y-axis": true, + "y_formats": ["short", "short"], + "yaxes": [ + { + "decimals": 0, + "format": "short", + "label": null, + "logBase": 10, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 38 + }, + "id": 129, + "panels": [], + "repeat": "persistence_counts", + "title": "JVM Memory Pools (Heap)", + "type": "row" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "editable": true, + "error": false, + "fill": 1, + "grid": { + "leftLogBase": 1, + "leftMax": null, + "leftMin": null, + "rightLogBase": 1, + "rightMax": null, + "rightMin": null + }, + "gridPos": { + "h": 7, + "w": 8, + "x": 0, + "y": 39 + }, + "id": 3, + "legend": { + "alignAsTable": false, + "avg": false, + "current": true, + "max": true, + "min": false, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 3, + "nullPointMode": "null", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": "jvm_memory_pool_heap", + "scopedVars": { + "jvm_memory_pool_heap": { + "selected": false, + "text": "PS Eden Space", + "value": "PS Eden Space" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "jvm_memory_used_bytes{application=\"$application\", instance=\"$instance\", id=\"$jvm_memory_pool_heap\"}", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 2, + "legendFormat": "used", + "metric": "", + "refId": "A", + "step": 1800 + }, + { + "expr": "jvm_memory_committed_bytes{application=\"$application\", instance=\"$instance\", id=\"$jvm_memory_pool_heap\"}", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 2, + "legendFormat": "commited", + "metric": "", + "refId": "B", + "step": 1800 + }, + { + "expr": "jvm_memory_max_bytes{application=\"$application\", instance=\"$instance\", id=\"$jvm_memory_pool_heap\"}", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 2, + "legendFormat": "max", + "metric": "", + "refId": "C", + "step": 1800 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "$jvm_memory_pool_heap", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "x-axis": true, + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "y-axis": true, + "y_formats": ["mbytes", "short"], + "yaxes": [ + { + "format": "bytes", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "editable": true, + "error": false, + "fill": 1, + "grid": { + "leftLogBase": 1, + "leftMax": null, + "leftMin": null, + "rightLogBase": 1, + "rightMax": null, + "rightMin": null + }, + "gridPos": { + "h": 7, + "w": 8, + "x": 8, + "y": 39 + }, + "id": 134, + "legend": { + "alignAsTable": false, + "avg": false, + "current": true, + "max": true, + "min": false, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 3, + "nullPointMode": "null", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatIteration": 1553765841423, + "repeatPanelId": 3, + "scopedVars": { + "jvm_memory_pool_heap": { + "selected": false, + "text": "PS Old Gen", + "value": "PS Old Gen" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "jvm_memory_used_bytes{application=\"$application\", instance=\"$instance\", id=\"$jvm_memory_pool_heap\"}", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 2, + "legendFormat": "used", + "metric": "", + "refId": "A", + "step": 1800 + }, + { + "expr": "jvm_memory_committed_bytes{application=\"$application\", instance=\"$instance\", id=\"$jvm_memory_pool_heap\"}", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 2, + "legendFormat": "commited", + "metric": "", + "refId": "B", + "step": 1800 + }, + { + "expr": "jvm_memory_max_bytes{application=\"$application\", instance=\"$instance\", id=\"$jvm_memory_pool_heap\"}", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 2, + "legendFormat": "max", + "metric": "", + "refId": "C", + "step": 1800 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "$jvm_memory_pool_heap", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "x-axis": true, + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "y-axis": true, + "y_formats": ["mbytes", "short"], + "yaxes": [ + { + "format": "bytes", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "editable": true, + "error": false, + "fill": 1, + "grid": { + "leftLogBase": 1, + "leftMax": null, + "leftMin": null, + "rightLogBase": 1, + "rightMax": null, + "rightMin": null + }, + "gridPos": { + "h": 7, + "w": 8, + "x": 16, + "y": 39 + }, + "id": 135, + "legend": { + "alignAsTable": false, + "avg": false, + "current": true, + "max": true, + "min": false, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 3, + "nullPointMode": "null", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatIteration": 1553765841423, + "repeatPanelId": 3, + "scopedVars": { + "jvm_memory_pool_heap": { + "selected": false, + "text": "PS Survivor Space", + "value": "PS Survivor Space" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "jvm_memory_used_bytes{application=\"$application\", instance=\"$instance\", id=\"$jvm_memory_pool_heap\"}", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 2, + "legendFormat": "used", + "metric": "", + "refId": "A", + "step": 1800 + }, + { + "expr": "jvm_memory_committed_bytes{application=\"$application\", instance=\"$instance\", id=\"$jvm_memory_pool_heap\"}", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 2, + "legendFormat": "commited", + "metric": "", + "refId": "B", + "step": 1800 + }, + { + "expr": "jvm_memory_max_bytes{application=\"$application\", instance=\"$instance\", id=\"$jvm_memory_pool_heap\"}", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 2, + "legendFormat": "max", + "metric": "", + "refId": "C", + "step": 1800 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "$jvm_memory_pool_heap", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "x-axis": true, + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "y-axis": true, + "y_formats": ["mbytes", "short"], + "yaxes": [ + { + "format": "bytes", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 46 + }, + "id": 130, + "panels": [], + "repeat": null, + "title": "JVM Memory Pools (Non-Heap)", + "type": "row" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "editable": true, + "error": false, + "fill": 1, + "grid": { + "leftLogBase": 1, + "leftMax": null, + "leftMin": null, + "rightLogBase": 1, + "rightMax": null, + "rightMin": null + }, + "gridPos": { + "h": 7, + "w": 8, + "x": 0, + "y": 47 + }, + "id": 78, + "legend": { + "alignAsTable": false, + "avg": false, + "current": true, + "max": true, + "min": false, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 3, + "nullPointMode": "null", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": "jvm_memory_pool_nonheap", + "scopedVars": { + "jvm_memory_pool_nonheap": { + "selected": false, + "text": "Metaspace", + "value": "Metaspace" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "jvm_memory_used_bytes{application=\"$application\", instance=\"$instance\", id=\"$jvm_memory_pool_nonheap\"}", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 2, + "legendFormat": "used", + "metric": "", + "refId": "A", + "step": 1800 + }, + { + "expr": "jvm_memory_committed_bytes{application=\"$application\", instance=\"$instance\", id=\"$jvm_memory_pool_nonheap\"}", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 2, + "legendFormat": "commited", + "metric": "", + "refId": "B", + "step": 1800 + }, + { + "expr": "jvm_memory_max_bytes{application=\"$application\", instance=\"$instance\", id=\"$jvm_memory_pool_nonheap\"}", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 2, + "legendFormat": "max", + "metric": "", + "refId": "C", + "step": 1800 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "$jvm_memory_pool_nonheap", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "x-axis": true, + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "y-axis": true, + "y_formats": ["mbytes", "short"], + "yaxes": [ + { + "format": "bytes", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "editable": true, + "error": false, + "fill": 1, + "grid": { + "leftLogBase": 1, + "leftMax": null, + "leftMin": null, + "rightLogBase": 1, + "rightMax": null, + "rightMin": null + }, + "gridPos": { + "h": 7, + "w": 8, + "x": 8, + "y": 47 + }, + "id": 136, + "legend": { + "alignAsTable": false, + "avg": false, + "current": true, + "max": true, + "min": false, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 3, + "nullPointMode": "null", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatIteration": 1553765841423, + "repeatPanelId": 78, + "scopedVars": { + "jvm_memory_pool_nonheap": { + "selected": false, + "text": "Compressed Class Space", + "value": "Compressed Class Space" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "jvm_memory_used_bytes{application=\"$application\", instance=\"$instance\", id=\"$jvm_memory_pool_nonheap\"}", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 2, + "legendFormat": "used", + "metric": "", + "refId": "A", + "step": 1800 + }, + { + "expr": "jvm_memory_committed_bytes{application=\"$application\", instance=\"$instance\", id=\"$jvm_memory_pool_nonheap\"}", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 2, + "legendFormat": "commited", + "metric": "", + "refId": "B", + "step": 1800 + }, + { + "expr": "jvm_memory_max_bytes{application=\"$application\", instance=\"$instance\", id=\"$jvm_memory_pool_nonheap\"}", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 2, + "legendFormat": "max", + "metric": "", + "refId": "C", + "step": 1800 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "$jvm_memory_pool_nonheap", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "x-axis": true, + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "y-axis": true, + "y_formats": ["mbytes", "short"], + "yaxes": [ + { + "format": "bytes", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "editable": true, + "error": false, + "fill": 1, + "grid": { + "leftLogBase": 1, + "leftMax": null, + "leftMin": null, + "rightLogBase": 1, + "rightMax": null, + "rightMin": null + }, + "gridPos": { + "h": 7, + "w": 8, + "x": 16, + "y": 47 + }, + "id": 137, + "legend": { + "alignAsTable": false, + "avg": false, + "current": true, + "max": true, + "min": false, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxPerRow": 3, + "nullPointMode": "null", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "repeat": null, + "repeatIteration": 1553765841423, + "repeatPanelId": 78, + "scopedVars": { + "jvm_memory_pool_nonheap": { + "selected": false, + "text": "Code Cache", + "value": "Code Cache" + } + }, + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "jvm_memory_used_bytes{application=\"$application\", instance=\"$instance\", id=\"$jvm_memory_pool_nonheap\"}", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 2, + "legendFormat": "used", + "metric": "", + "refId": "A", + "step": 1800 + }, + { + "expr": "jvm_memory_committed_bytes{application=\"$application\", instance=\"$instance\", id=\"$jvm_memory_pool_nonheap\"}", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 2, + "legendFormat": "commited", + "metric": "", + "refId": "B", + "step": 1800 + }, + { + "expr": "jvm_memory_max_bytes{application=\"$application\", instance=\"$instance\", id=\"$jvm_memory_pool_nonheap\"}", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 2, + "legendFormat": "max", + "metric": "", + "refId": "C", + "step": 1800 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "$jvm_memory_pool_nonheap", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "x-axis": true, + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "y-axis": true, + "y_formats": ["mbytes", "short"], + "yaxes": [ + { + "format": "bytes", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 54 + }, + "id": 131, + "panels": [], + "repeat": null, + "title": "Garbage Collection", + "type": "row" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 1, + "gridPos": { + "h": 7, + "w": 8, + "x": 0, + "y": 55 + }, + "id": 98, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "rate(jvm_gc_pause_seconds_count{application=\"$application\", instance=\"$instance\"}[1m])", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "{{action}} ({{cause}})", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Collections", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "ops", + "label": null, + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 1, + "gridPos": { + "h": 7, + "w": 8, + "x": 8, + "y": 55 + }, + "id": 101, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "rate(jvm_gc_pause_seconds_sum{application=\"$application\", instance=\"$instance\"}[1m])/rate(jvm_gc_pause_seconds_count{application=\"$application\", instance=\"$instance\"}[1m])", + "format": "time_series", + "hide": false, + "instant": false, + "intervalFactor": 1, + "legendFormat": "avg {{action}} ({{cause}})", + "refId": "A" + }, + { + "expr": "jvm_gc_pause_seconds_max{application=\"$application\", instance=\"$instance\"}", + "format": "time_series", + "hide": false, + "instant": false, + "intervalFactor": 1, + "legendFormat": "max {{action}} ({{cause}})", + "refId": "B" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Pause Durations", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "s", + "label": null, + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 1, + "gridPos": { + "h": 7, + "w": 8, + "x": 16, + "y": 55 + }, + "id": 99, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "rate(jvm_gc_memory_allocated_bytes_total{application=\"$application\", instance=\"$instance\"}[1m])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "allocated", + "refId": "A" + }, + { + "expr": "rate(jvm_gc_memory_promoted_bytes_total{application=\"$application\", instance=\"$instance\"}[1m])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "promoted", + "refId": "B" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Allocated/Promoted", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "bytes", + "label": null, + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 62 + }, + "id": 132, + "panels": [], + "repeat": null, + "title": "Classloading", + "type": "row" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "editable": true, + "error": false, + "fill": 1, + "grid": { + "leftLogBase": 1, + "leftMax": null, + "leftMin": null, + "rightLogBase": 1, + "rightMax": null, + "rightMin": null + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 0, + "y": 63 + }, + "id": 37, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "jvm_classes_loaded{application=\"$application\", instance=\"$instance\"} or jvm_classes_loaded_classes{application=\"$application\", instance=\"$instance\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "loaded", + "metric": "", + "refId": "A", + "step": 1200 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Classes loaded", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "x-axis": true, + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "y-axis": true, + "y_formats": ["short", "short"], + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "editable": true, + "error": false, + "fill": 1, + "grid": { + "leftLogBase": 1, + "leftMax": null, + "leftMin": null, + "rightLogBase": 1, + "rightMax": null, + "rightMin": null + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 12, + "y": 63 + }, + "id": 38, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "delta(jvm_classes_loaded{application=\"$application\",instance=\"$instance\"}[5m]) or delta(jvm_classes_loaded_classes{application=\"$application\",instance=\"$instance\"}[5m])", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 2, + "legendFormat": "delta", + "metric": "", + "refId": "A", + "step": 1200 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Class delta (5m)", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "x-axis": true, + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "y-axis": true, + "y_formats": ["ops", "short"], + "yaxes": [ + { + "decimals": null, + "format": "short", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 70 + }, + "id": 133, + "panels": [], + "repeat": null, + "title": "Buffer Pools", + "type": "row" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "editable": true, + "error": false, + "fill": 1, + "grid": { + "leftLogBase": 1, + "leftMax": null, + "leftMin": null, + "rightLogBase": 1, + "rightMax": null, + "rightMin": null + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 0, + "y": 71 + }, + "id": 33, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "jvm_buffer_memory_used_bytes{application=\"$application\", instance=\"$instance\", id=\"direct\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "used", + "metric": "", + "refId": "A", + "step": 2400 + }, + { + "expr": "jvm_buffer_total_capacity_bytes{application=\"$application\", instance=\"$instance\", id=\"direct\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "capacity", + "metric": "", + "refId": "B", + "step": 2400 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Direct Buffers", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "x-axis": true, + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "y-axis": true, + "y_formats": ["short", "short"], + "yaxes": [ + { + "format": "bytes", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "editable": true, + "error": false, + "fill": 1, + "grid": { + "leftLogBase": 1, + "leftMax": null, + "leftMin": null, + "rightLogBase": 1, + "rightMax": null, + "rightMin": null + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 6, + "y": 71 + }, + "id": 83, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "jvm_buffer_count{application=\"$application\", instance=\"$instance\", id=\"direct\"} or jvm_buffer_count_buffers{application=\"$application\", instance=\"$instance\", id=\"direct\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "count", + "metric": "", + "refId": "A", + "step": 2400 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Direct Buffers", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "x-axis": true, + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "y-axis": true, + "y_formats": ["short", "short"], + "yaxes": [ + { + "decimals": 0, + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "editable": true, + "error": false, + "fill": 1, + "grid": { + "leftLogBase": 1, + "leftMax": null, + "leftMin": null, + "rightLogBase": 1, + "rightMax": null, + "rightMin": null + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 12, + "y": 71 + }, + "id": 85, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "jvm_buffer_memory_used_bytes{application=\"$application\", instance=\"$instance\", id=\"mapped\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "used", + "metric": "", + "refId": "A", + "step": 2400 + }, + { + "expr": "jvm_buffer_total_capacity_bytes{application=\"$application\", instance=\"$instance\", id=\"mapped\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "capacity", + "metric": "", + "refId": "B", + "step": 2400 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Mapped Buffers", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "x-axis": true, + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "y-axis": true, + "y_formats": ["short", "short"], + "yaxes": [ + { + "format": "bytes", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "editable": true, + "error": false, + "fill": 1, + "grid": { + "leftLogBase": 1, + "leftMax": null, + "leftMin": null, + "rightLogBase": 1, + "rightMax": null, + "rightMin": null + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 18, + "y": 71 + }, + "id": 84, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "paceLength": 10, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "jvm_buffer_count{application=\"$application\", instance=\"$instance\", id=\"mapped\"} or jvm_buffer_count_buffers{application=\"$application\", instance=\"$instance\", id=\"mapped\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "count", + "metric": "", + "refId": "A", + "step": 2400 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Mapped Buffers", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "x-axis": true, + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "y-axis": true, + "y_formats": ["short", "short"], + "yaxes": [ + { + "decimals": 0, + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + } + ], + "refresh": "10s", + "schemaVersion": 18, + "style": "dark", + "tags": [], + "templating": { + "list": [ + { + "allValue": null, + "current": { + "text": "test", + "value": "test" + }, + "datasource": "Prometheus", + "definition": "", + "hide": 0, + "includeAll": false, + "label": "Application", + "multi": false, + "name": "application", + "options": [], + "query": "label_values(application)", + "refresh": 2, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "tagValuesQuery": "", + "tags": [], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allFormat": "glob", + "allValue": null, + "current": { + "text": "localhost:8080", + "value": "localhost:8080" + }, + "datasource": "Prometheus", + "definition": "", + "hide": 0, + "includeAll": false, + "label": "Instance", + "multi": false, + "multiFormat": "glob", + "name": "instance", + "options": [], + "query": "label_values(jvm_memory_used_bytes{application=\"$application\"}, instance)", + "refresh": 2, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "tagValuesQuery": "", + "tags": [], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allFormat": "glob", + "allValue": null, + "current": { + "text": "All", + "value": "$__all" + }, + "datasource": "Prometheus", + "definition": "", + "hide": 0, + "includeAll": true, + "label": "JVM Memory Pools Heap", + "multi": false, + "multiFormat": "glob", + "name": "jvm_memory_pool_heap", + "options": [], + "query": "label_values(jvm_memory_used_bytes{application=\"$application\", instance=\"$instance\", area=\"heap\"},id)", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 1, + "tagValuesQuery": "", + "tags": [], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allFormat": "glob", + "allValue": null, + "current": { + "text": "All", + "value": "$__all" + }, + "datasource": "Prometheus", + "definition": "", + "hide": 0, + "includeAll": true, + "label": "JVM Memory Pools Non-Heap", + "multi": false, + "multiFormat": "glob", + "name": "jvm_memory_pool_nonheap", + "options": [], + "query": "label_values(jvm_memory_used_bytes{application=\"$application\", instance=\"$instance\", area=\"nonheap\"},id)", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 2, + "tagValuesQuery": "", + "tags": [], + "tagsQuery": "", + "type": "query", + "useTags": false + } + ] + }, + "time": { + "from": "now-30m", + "to": "now" + }, + "timepicker": { + "now": true, + "refresh_intervals": ["5s", "10s", "30s", "1m", "5m", "15m", "30m", "1h", "2h", "1d"], + "time_options": ["5m", "15m", "1h", "6h", "12h", "24h", "2d", "7d", "30d"] + }, + "timezone": "browser", + "title": "JVM (Micrometer)", + "uid": "Ud1CFe3iz", + "version": 1 +} diff --git a/jhipster-6/bookstore-monolith/src/main/docker/grafana/provisioning/dashboards/dashboard.yml b/jhipster-6/bookstore-monolith/src/main/docker/grafana/provisioning/dashboards/dashboard.yml new file mode 100644 index 000000000000..5b46e1f4ca81 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/docker/grafana/provisioning/dashboards/dashboard.yml @@ -0,0 +1,11 @@ +apiVersion: 1 + +providers: + - name: 'Prometheus' + orgId: 1 + folder: '' + type: file + disableDeletion: false + editable: true + options: + path: /etc/grafana/provisioning/dashboards diff --git a/jhipster-6/bookstore-monolith/src/main/docker/grafana/provisioning/datasources/datasource.yml b/jhipster-6/bookstore-monolith/src/main/docker/grafana/provisioning/datasources/datasource.yml new file mode 100644 index 000000000000..20506dab30f3 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/docker/grafana/provisioning/datasources/datasource.yml @@ -0,0 +1,50 @@ +apiVersion: 1 + +# list of datasources that should be deleted from the database +deleteDatasources: + - name: Prometheus + orgId: 1 + +# list of datasources to insert/update depending +# whats available in the database +datasources: + # name of the datasource. Required + - name: Prometheus + # datasource type. Required + type: prometheus + # access mode. direct or proxy. Required + access: proxy + # org id. will default to orgId 1 if not specified + orgId: 1 + # url + # On MacOS, replace localhost by host.docker.internal + url: http://localhost:9090 + # database password, if used + password: + # database user, if used + user: + # database name, if used + database: + # enable/disable basic auth + basicAuth: false + # basic auth username + basicAuthUser: admin + # basic auth password + basicAuthPassword: admin + # enable/disable with credentials headers + withCredentials: + # mark as default datasource. Max one per org + isDefault: true + # fields that will be converted to json and stored in json_data + jsonData: + graphiteVersion: '1.1' + tlsAuth: false + tlsAuthWithCACert: false + # json object of data that will be encrypted. + secureJsonData: + tlsCACert: '...' + tlsClientCert: '...' + tlsClientKey: '...' + version: 1 + # allow users to edit datasources from the UI. + editable: true diff --git a/jhipster-6/bookstore-monolith/src/main/docker/monitoring.yml b/jhipster-6/bookstore-monolith/src/main/docker/monitoring.yml new file mode 100644 index 000000000000..fa75668445de --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/docker/monitoring.yml @@ -0,0 +1,26 @@ +version: '3' +services: + bookstore-prometheus: + image: prom/prometheus:v2.9.2 + volumes: + - ./prometheus/:/etc/prometheus/ + command: + - '--config.file=/etc/prometheus/prometheus.yml' + ports: + - 9090:9090 + # On MacOS, remove next line and replace localhost by host.docker.internal in prometheus/prometheus.yml and + # grafana/provisioning/datasources/datasource.yml + network_mode: 'host' # to test locally running service + bookstore-grafana: + image: grafana/grafana:6.1.4 + volumes: + - ./grafana/provisioning/:/etc/grafana/provisioning/ + environment: + - GF_SECURITY_ADMIN_PASSWORD=admin + - GF_USERS_ALLOW_SIGN_UP=false + - GF_INSTALL_PLUGINS=grafana-piechart-panel + ports: + - 3000:3000 + # On MacOS, remove next line and replace localhost by host.docker.internal in prometheus/prometheus.yml and + # grafana/provisioning/datasources/datasource.yml + network_mode: 'host' # to test locally running service diff --git a/jhipster-6/bookstore-monolith/src/main/docker/mysql.yml b/jhipster-6/bookstore-monolith/src/main/docker/mysql.yml new file mode 100644 index 000000000000..13faba0457ae --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/docker/mysql.yml @@ -0,0 +1,13 @@ +version: '2' +services: + bookstore-mysql: + image: mysql:5.7.20 + # volumes: + # - ~/volumes/jhipster/Bookstore/mysql/:/var/lib/mysql/ + environment: + - MYSQL_USER=root + - MYSQL_ALLOW_EMPTY_PASSWORD=yes + - MYSQL_DATABASE=bookstore + ports: + - 3306:3306 + command: mysqld --lower_case_table_names=1 --skip-ssl --character_set_server=utf8mb4 --explicit_defaults_for_timestamp diff --git a/jhipster-6/bookstore-monolith/src/main/docker/prometheus/prometheus.yml b/jhipster-6/bookstore-monolith/src/main/docker/prometheus/prometheus.yml new file mode 100644 index 000000000000..73f4c959da7b --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/docker/prometheus/prometheus.yml @@ -0,0 +1,26 @@ +# Sample global config for monitoring JHipster applications +global: + scrape_interval: 15s # By default, scrape targets every 15 seconds. + evaluation_interval: 15s # By default, scrape targets every 15 seconds. + # scrape_timeout is set to the global default (10s). + + # Attach these labels to any time series or alerts when communicating with + # external systems (federation, remote storage, Alertmanager). + external_labels: + monitor: 'jhipster' + +# A scrape configuration containing exactly one endpoint to scrape: +# Here it's Prometheus itself. +scrape_configs: + # The job name is added as a label `job=` to any timeseries scraped from this config. + - job_name: 'prometheus' + + # Override the global default and scrape targets from this job every 5 seconds. + scrape_interval: 5s + + # scheme defaults to 'http'. + metrics_path: /management/prometheus + static_configs: + - targets: + # On MacOS, replace localhost by host.docker.internal + - localhost:8080 diff --git a/jhipster-6/bookstore-monolith/src/main/docker/sonar.yml b/jhipster-6/bookstore-monolith/src/main/docker/sonar.yml new file mode 100644 index 000000000000..756175b7d072 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/docker/sonar.yml @@ -0,0 +1,7 @@ +version: '2' +services: + bookstore-sonar: + image: sonarqube:7.1 + ports: + - 9001:9000 + - 9092:9092 diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/ApplicationWebXml.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/ApplicationWebXml.java new file mode 100644 index 000000000000..32f28a8e9e41 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/ApplicationWebXml.java @@ -0,0 +1,21 @@ +package com.baeldung.jhipster6; + +import com.baeldung.jhipster6.config.DefaultProfileUtil; +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; + +/** + * This is a helper Java class that provides an alternative to creating a web.xml. + * This will be invoked only when the application is deployed to a Servlet container like Tomcat, JBoss etc. + */ +public class ApplicationWebXml extends SpringBootServletInitializer { + + @Override + protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { + /** + * set a default to use when no profile is configured. + */ + DefaultProfileUtil.addDefaultProfile(application.application()); + return application.sources(BookstoreApp.class); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/BookstoreApp.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/BookstoreApp.java new file mode 100644 index 000000000000..278efb9270ac --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/BookstoreApp.java @@ -0,0 +1,98 @@ +package com.baeldung.jhipster6; + +import com.baeldung.jhipster6.config.ApplicationProperties; +import com.baeldung.jhipster6.config.DefaultProfileUtil; + +import io.github.jhipster.config.JHipsterConstants; + +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.liquibase.LiquibaseProperties; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.core.env.Environment; + +import javax.annotation.PostConstruct; +import java.net.InetAddress; +import java.net.UnknownHostException; +import java.util.Arrays; +import java.util.Collection; + +@SpringBootApplication +@EnableConfigurationProperties({LiquibaseProperties.class, ApplicationProperties.class}) +public class BookstoreApp { + + private static final Logger log = LoggerFactory.getLogger(BookstoreApp.class); + + private final Environment env; + + public BookstoreApp(Environment env) { + this.env = env; + } + + /** + * Initializes Bookstore. + *

+ * Spring profiles can be configured with a program argument --spring.profiles.active=your-active-profile + *

+ * You can find more information on how profiles work with JHipster on https://www.jhipster.tech/profiles/. + */ + @PostConstruct + public void initApplication() { + Collection activeProfiles = Arrays.asList(env.getActiveProfiles()); + if (activeProfiles.contains(JHipsterConstants.SPRING_PROFILE_DEVELOPMENT) && activeProfiles.contains(JHipsterConstants.SPRING_PROFILE_PRODUCTION)) { + log.error("You have misconfigured your application! It should not run " + + "with both the 'dev' and 'prod' profiles at the same time."); + } + if (activeProfiles.contains(JHipsterConstants.SPRING_PROFILE_DEVELOPMENT) && activeProfiles.contains(JHipsterConstants.SPRING_PROFILE_CLOUD)) { + log.error("You have misconfigured your application! It should not " + + "run with both the 'dev' and 'cloud' profiles at the same time."); + } + } + + /** + * Main method, used to run the application. + * + * @param args the command line arguments + */ + public static void main(String[] args) { + SpringApplication app = new SpringApplication(BookstoreApp.class); + DefaultProfileUtil.addDefaultProfile(app); + Environment env = app.run(args).getEnvironment(); + logApplicationStartup(env); + } + + private static void logApplicationStartup(Environment env) { + String protocol = "http"; + if (env.getProperty("server.ssl.key-store") != null) { + protocol = "https"; + } + String serverPort = env.getProperty("server.port"); + String contextPath = env.getProperty("server.servlet.context-path"); + if (StringUtils.isBlank(contextPath)) { + contextPath = "/"; + } + String hostAddress = "localhost"; + try { + hostAddress = InetAddress.getLocalHost().getHostAddress(); + } catch (UnknownHostException e) { + log.warn("The host name could not be determined, using `localhost` as fallback"); + } + log.info("\n----------------------------------------------------------\n\t" + + "Application '{}' is running! Access URLs:\n\t" + + "Local: \t\t{}://localhost:{}{}\n\t" + + "External: \t{}://{}:{}{}\n\t" + + "Profile(s): \t{}\n----------------------------------------------------------", + env.getProperty("spring.application.name"), + protocol, + serverPort, + contextPath, + protocol, + hostAddress, + serverPort, + contextPath, + env.getActiveProfiles()); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/aop/logging/LoggingAspect.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/aop/logging/LoggingAspect.java new file mode 100644 index 000000000000..1e5a47c12aba --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/aop/logging/LoggingAspect.java @@ -0,0 +1,98 @@ +package com.baeldung.jhipster6.aop.logging; + +import io.github.jhipster.config.JHipsterConstants; + +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.AfterThrowing; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.core.env.Environment; + +import java.util.Arrays; + +/** + * Aspect for logging execution of service and repository Spring components. + * + * By default, it only runs with the "dev" profile. + */ +@Aspect +public class LoggingAspect { + + private final Logger log = LoggerFactory.getLogger(this.getClass()); + + private final Environment env; + + public LoggingAspect(Environment env) { + this.env = env; + } + + /** + * Pointcut that matches all repositories, services and Web REST endpoints. + */ + @Pointcut("within(@org.springframework.stereotype.Repository *)" + + " || within(@org.springframework.stereotype.Service *)" + + " || within(@org.springframework.web.bind.annotation.RestController *)") + public void springBeanPointcut() { + // Method is empty as this is just a Pointcut, the implementations are in the advices. + } + + /** + * Pointcut that matches all Spring beans in the application's main packages. + */ + @Pointcut("within(com.baeldung.jhipster5.repository..*)"+ + " || within(com.baeldung.jhipster5.service..*)"+ + " || within(com.baeldung.jhipster5.web.rest..*)") + public void applicationPackagePointcut() { + // Method is empty as this is just a Pointcut, the implementations are in the advices. + } + + /** + * Advice that logs methods throwing exceptions. + * + * @param joinPoint join point for advice + * @param e exception + */ + @AfterThrowing(pointcut = "applicationPackagePointcut() && springBeanPointcut()", throwing = "e") + public void logAfterThrowing(JoinPoint joinPoint, Throwable e) { + if (env.acceptsProfiles(JHipsterConstants.SPRING_PROFILE_DEVELOPMENT)) { + log.error("Exception in {}.{}() with cause = \'{}\' and exception = \'{}\'", joinPoint.getSignature().getDeclaringTypeName(), + joinPoint.getSignature().getName(), e.getCause() != null? e.getCause() : "NULL", e.getMessage(), e); + + } else { + log.error("Exception in {}.{}() with cause = {}", joinPoint.getSignature().getDeclaringTypeName(), + joinPoint.getSignature().getName(), e.getCause() != null? e.getCause() : "NULL"); + } + } + + /** + * Advice that logs when a method is entered and exited. + * + * @param joinPoint join point for advice + * @return result + * @throws Throwable throws IllegalArgumentException + */ + @Around("applicationPackagePointcut() && springBeanPointcut()") + public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable { + if (log.isDebugEnabled()) { + log.debug("Enter: {}.{}() with argument[s] = {}", joinPoint.getSignature().getDeclaringTypeName(), + joinPoint.getSignature().getName(), Arrays.toString(joinPoint.getArgs())); + } + try { + Object result = joinPoint.proceed(); + if (log.isDebugEnabled()) { + log.debug("Exit: {}.{}() with result = {}", joinPoint.getSignature().getDeclaringTypeName(), + joinPoint.getSignature().getName(), result); + } + return result; + } catch (IllegalArgumentException e) { + log.error("Illegal argument: {} in {}.{}()", Arrays.toString(joinPoint.getArgs()), + joinPoint.getSignature().getDeclaringTypeName(), joinPoint.getSignature().getName()); + + throw e; + } + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/ApplicationProperties.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/ApplicationProperties.java new file mode 100644 index 000000000000..e9bf8bd1a8ec --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/ApplicationProperties.java @@ -0,0 +1,14 @@ +package com.baeldung.jhipster6.config; + +import org.springframework.boot.context.properties.ConfigurationProperties; + +/** + * Properties specific to Bookstore. + *

+ * Properties are configured in the application.yml file. + * See {@link io.github.jhipster.config.JHipsterProperties} for a good example. + */ +@ConfigurationProperties(prefix = "application", ignoreUnknownFields = false) +public class ApplicationProperties { + +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/AsyncConfiguration.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/AsyncConfiguration.java new file mode 100644 index 000000000000..a24540217562 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/AsyncConfiguration.java @@ -0,0 +1,59 @@ +package com.baeldung.jhipster6.config; + +import io.github.jhipster.async.ExceptionHandlingAsyncTaskExecutor; +import io.github.jhipster.config.JHipsterProperties; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler; +import org.springframework.aop.interceptor.SimpleAsyncUncaughtExceptionHandler; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.annotation.*; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; +import org.springframework.scheduling.annotation.SchedulingConfigurer; +import org.springframework.scheduling.config.ScheduledTaskRegistrar; + +import java.util.concurrent.Executor; +import java.util.concurrent.Executors; + +@Configuration +@EnableAsync +@EnableScheduling +public class AsyncConfiguration implements AsyncConfigurer, SchedulingConfigurer { + + private final Logger log = LoggerFactory.getLogger(AsyncConfiguration.class); + + private final JHipsterProperties jHipsterProperties; + + public AsyncConfiguration(JHipsterProperties jHipsterProperties) { + this.jHipsterProperties = jHipsterProperties; + } + + @Override + @Bean(name = "taskExecutor") + public Executor getAsyncExecutor() { + log.debug("Creating Async Task Executor"); + ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); + executor.setCorePoolSize(jHipsterProperties.getAsync().getCorePoolSize()); + executor.setMaxPoolSize(jHipsterProperties.getAsync().getMaxPoolSize()); + executor.setQueueCapacity(jHipsterProperties.getAsync().getQueueCapacity()); + executor.setThreadNamePrefix("bookstore-Executor-"); + return new ExceptionHandlingAsyncTaskExecutor(executor); + } + + @Override + public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() { + return new SimpleAsyncUncaughtExceptionHandler(); + } + + @Override + public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { + taskRegistrar.setScheduler(scheduledTaskExecutor()); + } + + @Bean + public Executor scheduledTaskExecutor() { + return Executors.newScheduledThreadPool(jHipsterProperties.getAsync().getCorePoolSize()); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/CloudDatabaseConfiguration.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/CloudDatabaseConfiguration.java new file mode 100644 index 000000000000..3d57db655931 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/CloudDatabaseConfiguration.java @@ -0,0 +1,28 @@ +package com.baeldung.jhipster6.config; + +import io.github.jhipster.config.JHipsterConstants; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.cloud.config.java.AbstractCloudConfig; +import org.springframework.context.annotation.*; + +import javax.sql.DataSource; +import org.springframework.boot.context.properties.ConfigurationProperties; + + +@Configuration +@Profile(JHipsterConstants.SPRING_PROFILE_CLOUD) +public class CloudDatabaseConfiguration extends AbstractCloudConfig { + + private final Logger log = LoggerFactory.getLogger(CloudDatabaseConfiguration.class); + + private static final String CLOUD_CONFIGURATION_HIKARI_PREFIX = "spring.datasource.hikari"; + + @Bean + @ConfigurationProperties(CLOUD_CONFIGURATION_HIKARI_PREFIX) + public DataSource dataSource() { + log.info("Configuring JDBC datasource from a cloud provider"); + return connectionFactory().dataSource(); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/Constants.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/Constants.java new file mode 100644 index 000000000000..b5d6eba051c8 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/Constants.java @@ -0,0 +1,17 @@ +package com.baeldung.jhipster6.config; + +/** + * Application constants. + */ +public final class Constants { + + // Regex for acceptable logins + public static final String LOGIN_REGEX = "^[_.@A-Za-z0-9-]*$"; + + public static final String SYSTEM_ACCOUNT = "system"; + public static final String ANONYMOUS_USER = "anonymoususer"; + public static final String DEFAULT_LANGUAGE = "en"; + + private Constants() { + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/DatabaseConfiguration.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/DatabaseConfiguration.java new file mode 100644 index 000000000000..2aa8ae2e82db --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/DatabaseConfiguration.java @@ -0,0 +1,59 @@ +package com.baeldung.jhipster6.config; + +import io.github.jhipster.config.JHipsterConstants; +import io.github.jhipster.config.h2.H2ConfigurationHelper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Profile; + +import org.springframework.core.env.Environment; +import org.springframework.data.jpa.repository.config.EnableJpaAuditing; +import org.springframework.data.jpa.repository.config.EnableJpaRepositories; +import org.springframework.transaction.annotation.EnableTransactionManagement; + +import java.sql.SQLException; + +@Configuration +@EnableJpaRepositories("com.baeldung.jhipster5.repository") +@EnableJpaAuditing(auditorAwareRef = "springSecurityAuditorAware") +@EnableTransactionManagement +public class DatabaseConfiguration { + + private final Logger log = LoggerFactory.getLogger(DatabaseConfiguration.class); + + private final Environment env; + + public DatabaseConfiguration(Environment env) { + this.env = env; + } + + /** + * Open the TCP port for the H2 database, so it is available remotely. + * + * @return the H2 database TCP server + * @throws SQLException if the server failed to start + */ + @Bean(initMethod = "start", destroyMethod = "stop") + @Profile(JHipsterConstants.SPRING_PROFILE_DEVELOPMENT) + public Object h2TCPServer() throws SQLException { + String port = getValidPortForH2(); + log.debug("H2 database is available on port {}", port); + return H2ConfigurationHelper.createServer(port); + } + + private String getValidPortForH2() { + int port = Integer.parseInt(env.getProperty("server.port")); + if (port < 10000) { + port = 10000 + port; + } else { + if (port < 63536) { + port = port + 2000; + } else { + port = port - 2000; + } + } + return String.valueOf(port); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/DateTimeFormatConfiguration.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/DateTimeFormatConfiguration.java new file mode 100644 index 000000000000..eeb4b55491b2 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/DateTimeFormatConfiguration.java @@ -0,0 +1,20 @@ +package com.baeldung.jhipster6.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.format.FormatterRegistry; +import org.springframework.format.datetime.standard.DateTimeFormatterRegistrar; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +/** + * Configure the converters to use the ISO format for dates by default. + */ +@Configuration +public class DateTimeFormatConfiguration implements WebMvcConfigurer { + + @Override + public void addFormatters(FormatterRegistry registry) { + DateTimeFormatterRegistrar registrar = new DateTimeFormatterRegistrar(); + registrar.setUseIsoFormat(true); + registrar.registerFormatters(registry); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/DefaultProfileUtil.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/DefaultProfileUtil.java new file mode 100644 index 000000000000..02b3ce9db0aa --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/DefaultProfileUtil.java @@ -0,0 +1,51 @@ +package com.baeldung.jhipster6.config; + +import io.github.jhipster.config.JHipsterConstants; + +import org.springframework.boot.SpringApplication; +import org.springframework.core.env.Environment; + +import java.util.*; + +/** + * Utility class to load a Spring profile to be used as default + * when there is no spring.profiles.active set in the environment or as command line argument. + * If the value is not available in application.yml then dev profile will be used as default. + */ +public final class DefaultProfileUtil { + + private static final String SPRING_PROFILE_DEFAULT = "spring.profiles.default"; + + private DefaultProfileUtil() { + } + + /** + * Set a default to use when no profile is configured. + * + * @param app the Spring application + */ + public static void addDefaultProfile(SpringApplication app) { + Map defProperties = new HashMap<>(); + /* + * The default profile to use when no other profiles are defined + * This cannot be set in the application.yml file. + * See https://github.com/spring-projects/spring-boot/issues/1219 + */ + defProperties.put(SPRING_PROFILE_DEFAULT, JHipsterConstants.SPRING_PROFILE_DEVELOPMENT); + app.setDefaultProperties(defProperties); + } + + /** + * Get the profiles that are applied else get default profiles. + * + * @param env spring environment + * @return profiles + */ + public static String[] getActiveProfiles(Environment env) { + String[] profiles = env.getActiveProfiles(); + if (profiles.length == 0) { + return env.getDefaultProfiles(); + } + return profiles; + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/JacksonConfiguration.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/JacksonConfiguration.java new file mode 100644 index 000000000000..68fb92ef2e59 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/JacksonConfiguration.java @@ -0,0 +1,63 @@ +package com.baeldung.jhipster6.config; + +import com.fasterxml.jackson.datatype.hibernate5.Hibernate5Module; +import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import com.fasterxml.jackson.module.afterburner.AfterburnerModule; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.zalando.problem.ProblemModule; +import org.zalando.problem.violations.ConstraintViolationProblemModule; + +@Configuration +public class JacksonConfiguration { + + /** + * Support for Java date and time API. + * @return the corresponding Jackson module. + */ + @Bean + public JavaTimeModule javaTimeModule() { + return new JavaTimeModule(); + } + + @Bean + public Jdk8Module jdk8TimeModule() { + return new Jdk8Module(); + } + + + /* + * Support for Hibernate types in Jackson. + */ + @Bean + public Hibernate5Module hibernate5Module() { + return new Hibernate5Module(); + } + + /* + * Jackson Afterburner module to speed up serialization/deserialization. + */ + @Bean + public AfterburnerModule afterburnerModule() { + return new AfterburnerModule(); + } + + /* + * Module for serialization/deserialization of RFC7807 Problem. + */ + @Bean + ProblemModule problemModule() { + return new ProblemModule(); + } + + /* + * Module for serialization/deserialization of ConstraintViolationProblem. + */ + @Bean + ConstraintViolationProblemModule constraintViolationProblemModule() { + return new ConstraintViolationProblemModule(); + } + +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/LiquibaseConfiguration.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/LiquibaseConfiguration.java new file mode 100644 index 000000000000..2f82a1f447ab --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/LiquibaseConfiguration.java @@ -0,0 +1,50 @@ +package com.baeldung.jhipster6.config; + +import javax.sql.DataSource; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.autoconfigure.liquibase.LiquibaseProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.env.Environment; +import org.springframework.core.task.TaskExecutor; + +import io.github.jhipster.config.JHipsterConstants; +import io.github.jhipster.config.liquibase.AsyncSpringLiquibase; +import liquibase.integration.spring.SpringLiquibase; + +@Configuration +public class LiquibaseConfiguration { + + private final Logger log = LoggerFactory.getLogger(LiquibaseConfiguration.class); + + private final Environment env; + + + public LiquibaseConfiguration(Environment env) { + this.env = env; + } + + @Bean + public SpringLiquibase liquibase(@Qualifier("taskExecutor") TaskExecutor taskExecutor, + DataSource dataSource, LiquibaseProperties liquibaseProperties) { + + // Use liquibase.integration.spring.SpringLiquibase if you don't want Liquibase to start asynchronously + SpringLiquibase liquibase = new AsyncSpringLiquibase(taskExecutor, env); + liquibase.setDataSource(dataSource); + liquibase.setChangeLog("classpath:config/liquibase/master.xml"); + liquibase.setContexts(liquibaseProperties.getContexts()); + liquibase.setDefaultSchema(liquibaseProperties.getDefaultSchema()); + liquibase.setDropFirst(liquibaseProperties.isDropFirst()); + liquibase.setChangeLogParameters(liquibaseProperties.getParameters()); + if (env.acceptsProfiles(JHipsterConstants.SPRING_PROFILE_NO_LIQUIBASE)) { + liquibase.setShouldRun(false); + } else { + liquibase.setShouldRun(liquibaseProperties.isEnabled()); + log.debug("Configuring Liquibase"); + } + return liquibase; + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/LocaleConfiguration.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/LocaleConfiguration.java new file mode 100644 index 000000000000..d73198e5bb2f --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/LocaleConfiguration.java @@ -0,0 +1,27 @@ +package com.baeldung.jhipster6.config; + +import io.github.jhipster.config.locale.AngularCookieLocaleResolver; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.LocaleResolver; +import org.springframework.web.servlet.config.annotation.*; +import org.springframework.web.servlet.i18n.LocaleChangeInterceptor; + +@Configuration +public class LocaleConfiguration implements WebMvcConfigurer { + + @Bean(name = "localeResolver") + public LocaleResolver localeResolver() { + AngularCookieLocaleResolver cookieLocaleResolver = new AngularCookieLocaleResolver(); + cookieLocaleResolver.setCookieName("NG_TRANSLATE_LANG_KEY"); + return cookieLocaleResolver; + } + + @Override + public void addInterceptors(InterceptorRegistry registry) { + LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor(); + localeChangeInterceptor.setParamName("language"); + registry.addInterceptor(localeChangeInterceptor); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/LoggingAspectConfiguration.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/LoggingAspectConfiguration.java new file mode 100644 index 000000000000..1638234a8975 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/LoggingAspectConfiguration.java @@ -0,0 +1,19 @@ +package com.baeldung.jhipster6.config; + +import com.baeldung.jhipster6.aop.logging.LoggingAspect; + +import io.github.jhipster.config.JHipsterConstants; + +import org.springframework.context.annotation.*; +import org.springframework.core.env.Environment; + +@Configuration +@EnableAspectJAutoProxy +public class LoggingAspectConfiguration { + + @Bean + @Profile(JHipsterConstants.SPRING_PROFILE_DEVELOPMENT) + public LoggingAspect loggingAspect(Environment env) { + return new LoggingAspect(env); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/LoggingConfiguration.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/LoggingConfiguration.java new file mode 100644 index 000000000000..893a16876f41 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/LoggingConfiguration.java @@ -0,0 +1,154 @@ +package com.baeldung.jhipster6.config; + +import java.net.InetSocketAddress; +import java.util.Iterator; + +import io.github.jhipster.config.JHipsterProperties; + +import ch.qos.logback.classic.AsyncAppender; +import ch.qos.logback.classic.Level; +import ch.qos.logback.classic.LoggerContext; +import ch.qos.logback.classic.boolex.OnMarkerEvaluator; +import ch.qos.logback.classic.spi.ILoggingEvent; +import ch.qos.logback.classic.spi.LoggerContextListener; +import ch.qos.logback.core.Appender; +import ch.qos.logback.core.filter.EvaluatorFilter; +import ch.qos.logback.core.spi.ContextAwareBase; +import ch.qos.logback.core.spi.FilterReply; +import net.logstash.logback.appender.LogstashTcpSocketAppender; +import net.logstash.logback.encoder.LogstashEncoder; +import net.logstash.logback.stacktrace.ShortenedThrowableConverter; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class LoggingConfiguration { + + private static final String LOGSTASH_APPENDER_NAME = "LOGSTASH"; + + private static final String ASYNC_LOGSTASH_APPENDER_NAME = "ASYNC_LOGSTASH"; + + private final Logger log = LoggerFactory.getLogger(LoggingConfiguration.class); + + private LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); + + private final String appName; + + private final String serverPort; + + private final JHipsterProperties jHipsterProperties; + + public LoggingConfiguration(@Value("${spring.application.name}") String appName, @Value("${server.port}") String serverPort, + JHipsterProperties jHipsterProperties) { + this.appName = appName; + this.serverPort = serverPort; + this.jHipsterProperties = jHipsterProperties; + if (jHipsterProperties.getLogging().getLogstash().isEnabled()) { + addLogstashAppender(context); + addContextListener(context); + } + if (jHipsterProperties.getMetrics().getLogs().isEnabled()) { + setMetricsMarkerLogbackFilter(context); + } + } + + private void addContextListener(LoggerContext context) { + LogbackLoggerContextListener loggerContextListener = new LogbackLoggerContextListener(); + loggerContextListener.setContext(context); + context.addListener(loggerContextListener); + } + + private void addLogstashAppender(LoggerContext context) { + log.info("Initializing Logstash logging"); + + LogstashTcpSocketAppender logstashAppender = new LogstashTcpSocketAppender(); + logstashAppender.setName(LOGSTASH_APPENDER_NAME); + logstashAppender.setContext(context); + String customFields = "{\"app_name\":\"" + appName + "\",\"app_port\":\"" + serverPort + "\"}"; + + // More documentation is available at: https://github.com/logstash/logstash-logback-encoder + LogstashEncoder logstashEncoder = new LogstashEncoder(); + // Set the Logstash appender config from JHipster properties + logstashAppender.addDestinations(new InetSocketAddress(jHipsterProperties.getLogging().getLogstash().getHost(), jHipsterProperties.getLogging().getLogstash().getPort())); + + ShortenedThrowableConverter throwableConverter = new ShortenedThrowableConverter(); + throwableConverter.setRootCauseFirst(true); + logstashEncoder.setThrowableConverter(throwableConverter); + logstashEncoder.setCustomFields(customFields); + + logstashAppender.setEncoder(logstashEncoder); + logstashAppender.start(); + + // Wrap the appender in an Async appender for performance + AsyncAppender asyncLogstashAppender = new AsyncAppender(); + asyncLogstashAppender.setContext(context); + asyncLogstashAppender.setName(ASYNC_LOGSTASH_APPENDER_NAME); + asyncLogstashAppender.setQueueSize(jHipsterProperties.getLogging().getLogstash().getQueueSize()); + asyncLogstashAppender.addAppender(logstashAppender); + asyncLogstashAppender.start(); + + context.getLogger("ROOT").addAppender(asyncLogstashAppender); + } + + // Configure a log filter to remove "metrics" logs from all appenders except the "LOGSTASH" appender + private void setMetricsMarkerLogbackFilter(LoggerContext context) { + log.info("Filtering metrics logs from all appenders except the {} appender", LOGSTASH_APPENDER_NAME); + OnMarkerEvaluator onMarkerMetricsEvaluator = new OnMarkerEvaluator(); + onMarkerMetricsEvaluator.setContext(context); + onMarkerMetricsEvaluator.addMarker("metrics"); + onMarkerMetricsEvaluator.start(); + EvaluatorFilter metricsFilter = new EvaluatorFilter<>(); + metricsFilter.setContext(context); + metricsFilter.setEvaluator(onMarkerMetricsEvaluator); + metricsFilter.setOnMatch(FilterReply.DENY); + metricsFilter.start(); + + for (ch.qos.logback.classic.Logger logger : context.getLoggerList()) { + for (Iterator> it = logger.iteratorForAppenders(); it.hasNext();) { + Appender appender = it.next(); + if (!appender.getName().equals(ASYNC_LOGSTASH_APPENDER_NAME)) { + log.debug("Filter metrics logs from the {} appender", appender.getName()); + appender.setContext(context); + appender.addFilter(metricsFilter); + appender.start(); + } + } + } + } + + /** + * Logback configuration is achieved by configuration file and API. + * When configuration file change is detected, the configuration is reset. + * This listener ensures that the programmatic configuration is also re-applied after reset. + */ + class LogbackLoggerContextListener extends ContextAwareBase implements LoggerContextListener { + + @Override + public boolean isResetResistant() { + return true; + } + + @Override + public void onStart(LoggerContext context) { + addLogstashAppender(context); + } + + @Override + public void onReset(LoggerContext context) { + addLogstashAppender(context); + } + + @Override + public void onStop(LoggerContext context) { + // Nothing to do. + } + + @Override + public void onLevelChange(ch.qos.logback.classic.Logger logger, Level level) { + // Nothing to do. + } + } + +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/SecurityConfiguration.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/SecurityConfiguration.java new file mode 100644 index 000000000000..f42ba55c206f --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/SecurityConfiguration.java @@ -0,0 +1,125 @@ +package com.baeldung.jhipster6.config; + +import com.baeldung.jhipster6.security.*; +import com.baeldung.jhipster6.security.jwt.*; +import com.baeldung.jhipster6.security.AuthoritiesConstants; +import com.baeldung.jhipster6.security.jwt.JWTConfigurer; +import com.baeldung.jhipster6.security.jwt.TokenProvider; + +import org.springframework.beans.factory.BeanInitializationException; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; +import org.springframework.http.HttpMethod; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; +import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.builders.WebSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; +import org.springframework.security.config.http.SessionCreationPolicy; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; +import org.springframework.web.filter.CorsFilter; +import org.zalando.problem.spring.web.advice.security.SecurityProblemSupport; + +import javax.annotation.PostConstruct; + +@Configuration +@EnableWebSecurity +@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true) +@Import(SecurityProblemSupport.class) +public class SecurityConfiguration extends WebSecurityConfigurerAdapter { + + private final AuthenticationManagerBuilder authenticationManagerBuilder; + + private final UserDetailsService userDetailsService; + + private final TokenProvider tokenProvider; + + private final CorsFilter corsFilter; + + private final SecurityProblemSupport problemSupport; + + public SecurityConfiguration(AuthenticationManagerBuilder authenticationManagerBuilder, UserDetailsService userDetailsService, TokenProvider tokenProvider, CorsFilter corsFilter, SecurityProblemSupport problemSupport) { + this.authenticationManagerBuilder = authenticationManagerBuilder; + this.userDetailsService = userDetailsService; + this.tokenProvider = tokenProvider; + this.corsFilter = corsFilter; + this.problemSupport = problemSupport; + } + + @PostConstruct + public void init() { + try { + authenticationManagerBuilder + .userDetailsService(userDetailsService) + .passwordEncoder(passwordEncoder()); + } catch (Exception e) { + throw new BeanInitializationException("Security configuration failed", e); + } + } + + @Override + @Bean + public AuthenticationManager authenticationManagerBean() throws Exception { + return super.authenticationManagerBean(); + } + + @Bean + public PasswordEncoder passwordEncoder() { + return new BCryptPasswordEncoder(); + } + + @Override + public void configure(WebSecurity web) throws Exception { + web.ignoring() + .antMatchers(HttpMethod.OPTIONS, "/**") + .antMatchers("/app/**/*.{js,html}") + .antMatchers("/i18n/**") + .antMatchers("/content/**") + .antMatchers("/h2-console/**") + .antMatchers("/swagger-ui/index.html") + .antMatchers("/test/**"); + } + + @Override + public void configure(HttpSecurity http) throws Exception { + http + .csrf() + .disable() + .addFilterBefore(corsFilter, UsernamePasswordAuthenticationFilter.class) + .exceptionHandling() + .authenticationEntryPoint(problemSupport) + .accessDeniedHandler(problemSupport) + .and() + .headers() + .frameOptions() + .disable() + .and() + .sessionManagement() + .sessionCreationPolicy(SessionCreationPolicy.STATELESS) + .and() + .authorizeRequests() + .antMatchers("/api/books/purchase/**").authenticated() + .antMatchers("/api/register").permitAll() + .antMatchers("/api/activate").permitAll() + .antMatchers("/api/authenticate").permitAll() + .antMatchers("/api/account/reset-password/init").permitAll() + .antMatchers("/api/account/reset-password/finish").permitAll() + .antMatchers("/api/**").authenticated() + .antMatchers("/management/health").permitAll() + .antMatchers("/management/info").permitAll() + .antMatchers("/management/**").hasAuthority(AuthoritiesConstants.ADMIN) + .and() + .apply(securityConfigurerAdapter()); + + } + + private JWTConfigurer securityConfigurerAdapter() { + return new JWTConfigurer(tokenProvider); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/WebConfigurer.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/WebConfigurer.java new file mode 100644 index 000000000000..8bed192c9f27 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/WebConfigurer.java @@ -0,0 +1,142 @@ +package com.baeldung.jhipster6.config; + +import io.github.jhipster.config.JHipsterConstants; +import io.github.jhipster.config.JHipsterProperties; +import io.github.jhipster.web.filter.CachingHttpHeadersFilter; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.boot.web.server.*; +import org.springframework.boot.web.servlet.ServletContextInitializer; +import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.env.Environment; +import org.springframework.core.env.Profiles; +import org.springframework.http.MediaType; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.filter.CorsFilter; + +import javax.servlet.*; +import java.io.File; +import java.io.UnsupportedEncodingException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Paths; +import java.util.*; + +import static java.net.URLDecoder.decode; + +/** + * Configuration of web application with Servlet 3.0 APIs. + */ +@Configuration +public class WebConfigurer implements ServletContextInitializer, WebServerFactoryCustomizer { + + private final Logger log = LoggerFactory.getLogger(WebConfigurer.class); + + private final Environment env; + + private final JHipsterProperties jHipsterProperties; + + public WebConfigurer(Environment env, JHipsterProperties jHipsterProperties) { + this.env = env; + this.jHipsterProperties = jHipsterProperties; + } + + @Override + public void onStartup(ServletContext servletContext) throws ServletException { + if (env.getActiveProfiles().length != 0) { + log.info("Web application configuration, using profiles: {}", (Object[]) env.getActiveProfiles()); + } + EnumSet disps = EnumSet.of(DispatcherType.REQUEST, DispatcherType.FORWARD, DispatcherType.ASYNC); + if (env.acceptsProfiles(Profiles.of(JHipsterConstants.SPRING_PROFILE_PRODUCTION))) { + initCachingHttpHeadersFilter(servletContext, disps); + } + log.info("Web application fully configured"); + } + + /** + * Customize the Servlet engine: Mime types, the document root, the cache. + */ + @Override + public void customize(WebServerFactory server) { + setMimeMappings(server); + // When running in an IDE or with ./mvnw spring-boot:run, set location of the static web assets. + setLocationForStaticAssets(server); + } + + private void setMimeMappings(WebServerFactory server) { + if (server instanceof ConfigurableServletWebServerFactory) { + MimeMappings mappings = new MimeMappings(MimeMappings.DEFAULT); + // IE issue, see https://github.com/jhipster/generator-jhipster/pull/711 + mappings.add("html", MediaType.TEXT_HTML_VALUE + ";charset=" + StandardCharsets.UTF_8.name().toLowerCase()); + // CloudFoundry issue, see https://github.com/cloudfoundry/gorouter/issues/64 + mappings.add("json", MediaType.TEXT_HTML_VALUE + ";charset=" + StandardCharsets.UTF_8.name().toLowerCase()); + ConfigurableServletWebServerFactory servletWebServer = (ConfigurableServletWebServerFactory) server; + servletWebServer.setMimeMappings(mappings); + } + } + + private void setLocationForStaticAssets(WebServerFactory server) { + if (server instanceof ConfigurableServletWebServerFactory) { + ConfigurableServletWebServerFactory servletWebServer = (ConfigurableServletWebServerFactory) server; + File root; + String prefixPath = resolvePathPrefix(); + root = new File(prefixPath + "target/classes/static/"); + if (root.exists() && root.isDirectory()) { + servletWebServer.setDocumentRoot(root); + } + } + } + + /** + * Resolve path prefix to static resources. + */ + private String resolvePathPrefix() { + String fullExecutablePath; + try { + fullExecutablePath = decode(this.getClass().getResource("").getPath(), StandardCharsets.UTF_8.name()); + } catch (UnsupportedEncodingException e) { + /* try without decoding if this ever happens */ + fullExecutablePath = this.getClass().getResource("").getPath(); + } + String rootPath = Paths.get(".").toUri().normalize().getPath(); + String extractedPath = fullExecutablePath.replace(rootPath, ""); + int extractionEndIndex = extractedPath.indexOf("target/"); + if (extractionEndIndex <= 0) { + return ""; + } + return extractedPath.substring(0, extractionEndIndex); + } + + /** + * Initializes the caching HTTP Headers Filter. + */ + private void initCachingHttpHeadersFilter(ServletContext servletContext, + EnumSet disps) { + log.debug("Registering Caching HTTP Headers Filter"); + FilterRegistration.Dynamic cachingHttpHeadersFilter = + servletContext.addFilter("cachingHttpHeadersFilter", + new CachingHttpHeadersFilter(jHipsterProperties)); + + cachingHttpHeadersFilter.addMappingForUrlPatterns(disps, true, "/i18n/*"); + cachingHttpHeadersFilter.addMappingForUrlPatterns(disps, true, "/content/*"); + cachingHttpHeadersFilter.addMappingForUrlPatterns(disps, true, "/app/*"); + cachingHttpHeadersFilter.setAsyncSupported(true); + } + + @Bean + public CorsFilter corsFilter() { + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + CorsConfiguration config = jHipsterProperties.getCors(); + if (config.getAllowedOrigins() != null && !config.getAllowedOrigins().isEmpty()) { + log.debug("Registering CORS filter"); + source.registerCorsConfiguration("/api/**", config); + source.registerCorsConfiguration("/management/**", config); + source.registerCorsConfiguration("/v2/api-docs", config); + } + return new CorsFilter(source); + } + +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/audit/AuditEventConverter.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/audit/AuditEventConverter.java new file mode 100644 index 000000000000..fee87ffb96ec --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/audit/AuditEventConverter.java @@ -0,0 +1,86 @@ +package com.baeldung.jhipster6.config.audit; + +import com.baeldung.jhipster6.domain.PersistentAuditEvent; + +import org.springframework.boot.actuate.audit.AuditEvent; +import org.springframework.security.web.authentication.WebAuthenticationDetails; +import org.springframework.stereotype.Component; + +import java.util.*; + +@Component +public class AuditEventConverter { + + /** + * Convert a list of PersistentAuditEvent to a list of AuditEvent + * + * @param persistentAuditEvents the list to convert + * @return the converted list. + */ + public List convertToAuditEvent(Iterable persistentAuditEvents) { + if (persistentAuditEvents == null) { + return Collections.emptyList(); + } + List auditEvents = new ArrayList<>(); + for (PersistentAuditEvent persistentAuditEvent : persistentAuditEvents) { + auditEvents.add(convertToAuditEvent(persistentAuditEvent)); + } + return auditEvents; + } + + /** + * Convert a PersistentAuditEvent to an AuditEvent + * + * @param persistentAuditEvent the event to convert + * @return the converted list. + */ + public AuditEvent convertToAuditEvent(PersistentAuditEvent persistentAuditEvent) { + if (persistentAuditEvent == null) { + return null; + } + return new AuditEvent(persistentAuditEvent.getAuditEventDate(), persistentAuditEvent.getPrincipal(), + persistentAuditEvent.getAuditEventType(), convertDataToObjects(persistentAuditEvent.getData())); + } + + /** + * Internal conversion. This is needed to support the current SpringBoot actuator AuditEventRepository interface + * + * @param data the data to convert + * @return a map of String, Object + */ + public Map convertDataToObjects(Map data) { + Map results = new HashMap<>(); + + if (data != null) { + for (Map.Entry entry : data.entrySet()) { + results.put(entry.getKey(), entry.getValue()); + } + } + return results; + } + + /** + * Internal conversion. This method will allow to save additional data. + * By default, it will save the object as string + * + * @param data the data to convert + * @return a map of String, String + */ + public Map convertDataToStrings(Map data) { + Map results = new HashMap<>(); + + if (data != null) { + for (Map.Entry entry : data.entrySet()) { + // Extract the data that will be saved. + if (entry.getValue() instanceof WebAuthenticationDetails) { + WebAuthenticationDetails authenticationDetails = (WebAuthenticationDetails) entry.getValue(); + results.put("remoteAddress", authenticationDetails.getRemoteAddress()); + results.put("sessionId", authenticationDetails.getSessionId()); + } else { + results.put(entry.getKey(), Objects.toString(entry.getValue())); + } + } + } + return results; + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/audit/package-info.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/audit/package-info.java new file mode 100644 index 000000000000..ce7911db40d1 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/audit/package-info.java @@ -0,0 +1,4 @@ +/** + * Audit specific code. + */ +package com.baeldung.jhipster6.config.audit; diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/package-info.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/package-info.java new file mode 100644 index 000000000000..2f6261950af6 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/config/package-info.java @@ -0,0 +1,4 @@ +/** + * Spring Framework configuration files. + */ +package com.baeldung.jhipster6.config; diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/domain/AbstractAuditingEntity.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/domain/AbstractAuditingEntity.java new file mode 100644 index 000000000000..b3881af03b70 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/domain/AbstractAuditingEntity.java @@ -0,0 +1,79 @@ +package com.baeldung.jhipster6.domain; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import org.hibernate.envers.Audited; +import org.springframework.data.annotation.CreatedBy; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.annotation.LastModifiedBy; +import org.springframework.data.annotation.LastModifiedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import java.io.Serializable; +import java.time.Instant; +import javax.persistence.Column; +import javax.persistence.EntityListeners; +import javax.persistence.MappedSuperclass; + +/** + * Base abstract class for entities which will hold definitions for created, last modified by and created, + * last modified by date. + */ +@MappedSuperclass +@Audited +@EntityListeners(AuditingEntityListener.class) +public abstract class AbstractAuditingEntity implements Serializable { + + private static final long serialVersionUID = 1L; + + @CreatedBy + @Column(name = "created_by", nullable = false, length = 50, updatable = false) + @JsonIgnore + private String createdBy; + + @CreatedDate + @Column(name = "created_date", updatable = false) + @JsonIgnore + private Instant createdDate = Instant.now(); + + @LastModifiedBy + @Column(name = "last_modified_by", length = 50) + @JsonIgnore + private String lastModifiedBy; + + @LastModifiedDate + @Column(name = "last_modified_date") + @JsonIgnore + private Instant lastModifiedDate = Instant.now(); + + public String getCreatedBy() { + return createdBy; + } + + public void setCreatedBy(String createdBy) { + this.createdBy = createdBy; + } + + public Instant getCreatedDate() { + return createdDate; + } + + public void setCreatedDate(Instant createdDate) { + this.createdDate = createdDate; + } + + public String getLastModifiedBy() { + return lastModifiedBy; + } + + public void setLastModifiedBy(String lastModifiedBy) { + this.lastModifiedBy = lastModifiedBy; + } + + public Instant getLastModifiedDate() { + return lastModifiedDate; + } + + public void setLastModifiedDate(Instant lastModifiedDate) { + this.lastModifiedDate = lastModifiedDate; + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/domain/Authority.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/domain/Authority.java new file mode 100644 index 000000000000..81d2b930cbf3 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/domain/Authority.java @@ -0,0 +1,59 @@ +package com.baeldung.jhipster6.domain; + +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Column; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import java.io.Serializable; + +/** + * An authority (a security role) used by Spring Security. + */ +@Entity +@Table(name = "jhi_authority") +public class Authority implements Serializable { + + private static final long serialVersionUID = 1L; + + @NotNull + @Size(max = 50) + @Id + @Column(length = 50) + private String name; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + Authority authority = (Authority) o; + + return !(name != null ? !name.equals(authority.name) : authority.name != null); + } + + @Override + public int hashCode() { + return name != null ? name.hashCode() : 0; + } + + @Override + public String toString() { + return "Authority{" + + "name='" + name + '\'' + + "}"; + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/domain/Book.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/domain/Book.java new file mode 100644 index 000000000000..14c5ec33961d --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/domain/Book.java @@ -0,0 +1,153 @@ +package com.baeldung.jhipster6.domain; + + + +import javax.persistence.*; +import javax.validation.constraints.*; + +import java.io.Serializable; +import java.time.LocalDate; +import java.util.Objects; + +/** + * A Book. + */ +@Entity +@Table(name = "book") +public class Book implements Serializable { + + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @NotNull + @Column(name = "title", nullable = false) + private String title; + + @NotNull + @Column(name = "author", nullable = false) + private String author; + + @NotNull + @Column(name = "published", nullable = false) + private LocalDate published; + + @NotNull + @Min(value = 0) + @Column(name = "quantity", nullable = false) + private Integer quantity; + + @NotNull + @DecimalMin(value = "0") + @Column(name = "price", nullable = false) + private Double price; + + // jhipster-needle-entity-add-field - JHipster will add fields here, do not remove + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getTitle() { + return title; + } + + public Book title(String title) { + this.title = title; + return this; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getAuthor() { + return author; + } + + public Book author(String author) { + this.author = author; + return this; + } + + public void setAuthor(String author) { + this.author = author; + } + + public LocalDate getPublished() { + return published; + } + + public Book published(LocalDate published) { + this.published = published; + return this; + } + + public void setPublished(LocalDate published) { + this.published = published; + } + + public Integer getQuantity() { + return quantity; + } + + public Book quantity(Integer quantity) { + this.quantity = quantity; + return this; + } + + public void setQuantity(Integer quantity) { + this.quantity = quantity; + } + + public Double getPrice() { + return price; + } + + public Book price(Double price) { + this.price = price; + return this; + } + + public void setPrice(Double price) { + this.price = price; + } + // jhipster-needle-entity-add-getters-setters - JHipster will add getters and setters here, do not remove + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Book book = (Book) o; + if (book.getId() == null || getId() == null) { + return false; + } + return Objects.equals(getId(), book.getId()); + } + + @Override + public int hashCode() { + return Objects.hashCode(getId()); + } + + @Override + public String toString() { + return "Book{" + + "id=" + getId() + + ", title='" + getTitle() + "'" + + ", author='" + getAuthor() + "'" + + ", published='" + getPublished() + "'" + + ", quantity=" + getQuantity() + + ", price=" + getPrice() + + "}"; + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/domain/PersistentAuditEvent.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/domain/PersistentAuditEvent.java new file mode 100644 index 000000000000..f953eeded94c --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/domain/PersistentAuditEvent.java @@ -0,0 +1,109 @@ +package com.baeldung.jhipster6.domain; + +import javax.persistence.*; +import javax.validation.constraints.NotNull; +import java.io.Serializable; +import java.time.Instant; +import java.util.HashMap; +import java.util.Objects; +import java.util.Map; + +/** + * Persist AuditEvent managed by the Spring Boot actuator. + * + * @see org.springframework.boot.actuate.audit.AuditEvent + */ +@Entity +@Table(name = "jhi_persistent_audit_event") +public class PersistentAuditEvent implements Serializable { + + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "event_id") + private Long id; + + @NotNull + @Column(nullable = false) + private String principal; + + @Column(name = "event_date") + private Instant auditEventDate; + + @Column(name = "event_type") + private String auditEventType; + + @ElementCollection + @MapKeyColumn(name = "name") + @Column(name = "value") + @CollectionTable(name = "jhi_persistent_audit_evt_data", joinColumns=@JoinColumn(name="event_id")) + private Map data = new HashMap<>(); + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getPrincipal() { + return principal; + } + + public void setPrincipal(String principal) { + this.principal = principal; + } + + public Instant getAuditEventDate() { + return auditEventDate; + } + + public void setAuditEventDate(Instant auditEventDate) { + this.auditEventDate = auditEventDate; + } + + public String getAuditEventType() { + return auditEventType; + } + + public void setAuditEventType(String auditEventType) { + this.auditEventType = auditEventType; + } + + public Map getData() { + return data; + } + + public void setData(Map data) { + this.data = data; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + PersistentAuditEvent persistentAuditEvent = (PersistentAuditEvent) o; + return !(persistentAuditEvent.getId() == null || getId() == null) && Objects.equals(getId(), persistentAuditEvent.getId()); + } + + @Override + public int hashCode() { + return Objects.hashCode(getId()); + } + + @Override + public String toString() { + return "PersistentAuditEvent{" + + "principal='" + principal + '\'' + + ", auditEventDate=" + auditEventDate + + ", auditEventType='" + auditEventType + '\'' + + '}'; + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/domain/User.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/domain/User.java new file mode 100644 index 000000000000..d1ff6c33fabc --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/domain/User.java @@ -0,0 +1,231 @@ +package com.baeldung.jhipster6.domain; + +import com.baeldung.jhipster6.config.Constants; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import org.apache.commons.lang3.StringUtils; +import org.hibernate.annotations.BatchSize; +import javax.validation.constraints.Email; + +import javax.persistence.*; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Pattern; +import javax.validation.constraints.Size; +import java.io.Serializable; +import java.util.HashSet; +import java.util.Locale; +import java.util.Objects; +import java.util.Set; +import java.time.Instant; + +/** + * A user. + */ +@Entity +@Table(name = "jhi_user") + +public class User extends AbstractAuditingEntity implements Serializable { + + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @NotNull + @Pattern(regexp = Constants.LOGIN_REGEX) + @Size(min = 1, max = 50) + @Column(length = 50, unique = true, nullable = false) + private String login; + + @JsonIgnore + @NotNull + @Size(min = 60, max = 60) + @Column(name = "password_hash", length = 60, nullable = false) + private String password; + + @Size(max = 50) + @Column(name = "first_name", length = 50) + private String firstName; + + @Size(max = 50) + @Column(name = "last_name", length = 50) + private String lastName; + + @Email + @Size(min = 5, max = 254) + @Column(length = 254, unique = true) + private String email; + + @NotNull + @Column(nullable = false) + private boolean activated = false; + + @Size(min = 2, max = 6) + @Column(name = "lang_key", length = 6) + private String langKey; + + @Size(max = 256) + @Column(name = "image_url", length = 256) + private String imageUrl; + + @Size(max = 20) + @Column(name = "activation_key", length = 20) + @JsonIgnore + private String activationKey; + + @Size(max = 20) + @Column(name = "reset_key", length = 20) + @JsonIgnore + private String resetKey; + + @Column(name = "reset_date") + private Instant resetDate = null; + + @JsonIgnore + @ManyToMany + @JoinTable( + name = "jhi_user_authority", + joinColumns = {@JoinColumn(name = "user_id", referencedColumnName = "id")}, + inverseJoinColumns = {@JoinColumn(name = "authority_name", referencedColumnName = "name")}) + + @BatchSize(size = 20) + private Set authorities = new HashSet<>(); + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getLogin() { + return login; + } + + // Lowercase the login before saving it in database + public void setLogin(String login) { + this.login = StringUtils.lowerCase(login, Locale.ENGLISH); + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + 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; + } + + public String getImageUrl() { + return imageUrl; + } + + public void setImageUrl(String imageUrl) { + this.imageUrl = imageUrl; + } + + public boolean getActivated() { + return activated; + } + + public void setActivated(boolean activated) { + this.activated = activated; + } + + public String getActivationKey() { + return activationKey; + } + + public void setActivationKey(String activationKey) { + this.activationKey = activationKey; + } + + public String getResetKey() { + return resetKey; + } + + public void setResetKey(String resetKey) { + this.resetKey = resetKey; + } + + public Instant getResetDate() { + return resetDate; + } + + public void setResetDate(Instant resetDate) { + this.resetDate = resetDate; + } + + public String getLangKey() { + return langKey; + } + + public void setLangKey(String langKey) { + this.langKey = langKey; + } + + public Set getAuthorities() { + return authorities; + } + + public void setAuthorities(Set authorities) { + this.authorities = authorities; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + User user = (User) o; + return !(user.getId() == null || getId() == null) && Objects.equals(getId(), user.getId()); + } + + @Override + public int hashCode() { + return Objects.hashCode(getId()); + } + + @Override + public String toString() { + return "User{" + + "login='" + login + '\'' + + ", firstName='" + firstName + '\'' + + ", lastName='" + lastName + '\'' + + ", email='" + email + '\'' + + ", imageUrl='" + imageUrl + '\'' + + ", activated='" + activated + '\'' + + ", langKey='" + langKey + '\'' + + ", activationKey='" + activationKey + '\'' + + "}"; + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/domain/package-info.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/domain/package-info.java new file mode 100644 index 000000000000..9063a204d520 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/domain/package-info.java @@ -0,0 +1,4 @@ +/** + * JPA domain objects. + */ +package com.baeldung.jhipster6.domain; diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/repository/AuthorityRepository.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/repository/AuthorityRepository.java new file mode 100644 index 000000000000..335631195d82 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/repository/AuthorityRepository.java @@ -0,0 +1,11 @@ +package com.baeldung.jhipster6.repository; + +import com.baeldung.jhipster6.domain.Authority; + +import org.springframework.data.jpa.repository.JpaRepository; + +/** + * Spring Data JPA repository for the Authority entity. + */ +public interface AuthorityRepository extends JpaRepository { +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/repository/BookRepository.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/repository/BookRepository.java new file mode 100644 index 000000000000..0863d1b89b1b --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/repository/BookRepository.java @@ -0,0 +1,15 @@ +package com.baeldung.jhipster6.repository; + +import com.baeldung.jhipster6.domain.Book; +import org.springframework.data.jpa.repository.*; +import org.springframework.stereotype.Repository; + + +/** + * Spring Data repository for the Book entity. + */ +@SuppressWarnings("unused") +@Repository +public interface BookRepository extends JpaRepository { + +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/repository/CustomAuditEventRepository.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/repository/CustomAuditEventRepository.java new file mode 100644 index 000000000000..4e17cfff2b85 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/repository/CustomAuditEventRepository.java @@ -0,0 +1,89 @@ +package com.baeldung.jhipster6.repository; + +import com.baeldung.jhipster6.config.Constants; +import com.baeldung.jhipster6.config.audit.AuditEventConverter; +import com.baeldung.jhipster6.domain.PersistentAuditEvent; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.boot.actuate.audit.AuditEvent; +import org.springframework.boot.actuate.audit.AuditEventRepository; +import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; + +import java.time.Instant; +import java.util.*; + +/** + * An implementation of Spring Boot's AuditEventRepository. + */ +@Repository +public class CustomAuditEventRepository implements AuditEventRepository { + + private static final String AUTHORIZATION_FAILURE = "AUTHORIZATION_FAILURE"; + + /** + * Should be the same as in Liquibase migration. + */ + protected static final int EVENT_DATA_COLUMN_MAX_LENGTH = 255; + + private final PersistenceAuditEventRepository persistenceAuditEventRepository; + + private final AuditEventConverter auditEventConverter; + + private final Logger log = LoggerFactory.getLogger(getClass()); + + public CustomAuditEventRepository(PersistenceAuditEventRepository persistenceAuditEventRepository, + AuditEventConverter auditEventConverter) { + + this.persistenceAuditEventRepository = persistenceAuditEventRepository; + this.auditEventConverter = auditEventConverter; + } + + @Override + public List find(String principal, Instant after, String type) { + Iterable persistentAuditEvents = + persistenceAuditEventRepository.findByPrincipalAndAuditEventDateAfterAndAuditEventType(principal, after, type); + return auditEventConverter.convertToAuditEvent(persistentAuditEvents); + } + + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW) + public void add(AuditEvent event) { + if (!AUTHORIZATION_FAILURE.equals(event.getType()) && + !Constants.ANONYMOUS_USER.equals(event.getPrincipal())) { + + PersistentAuditEvent persistentAuditEvent = new PersistentAuditEvent(); + persistentAuditEvent.setPrincipal(event.getPrincipal()); + persistentAuditEvent.setAuditEventType(event.getType()); + persistentAuditEvent.setAuditEventDate(event.getTimestamp()); + Map eventData = auditEventConverter.convertDataToStrings(event.getData()); + persistentAuditEvent.setData(truncate(eventData)); + persistenceAuditEventRepository.save(persistentAuditEvent); + } + } + + /** + * Truncate event data that might exceed column length. + */ + private Map truncate(Map data) { + Map results = new HashMap<>(); + + if (data != null) { + for (Map.Entry entry : data.entrySet()) { + String value = entry.getValue(); + if (value != null) { + int length = value.length(); + if (length > EVENT_DATA_COLUMN_MAX_LENGTH) { + value = value.substring(0, EVENT_DATA_COLUMN_MAX_LENGTH); + log.warn("Event data for {} too long ({}) has been truncated to {}. Consider increasing column width.", + entry.getKey(), length, EVENT_DATA_COLUMN_MAX_LENGTH); + } + } + results.put(entry.getKey(), value); + } + } + return results; + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/repository/PersistenceAuditEventRepository.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/repository/PersistenceAuditEventRepository.java new file mode 100644 index 000000000000..ca0025321e26 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/repository/PersistenceAuditEventRepository.java @@ -0,0 +1,25 @@ +package com.baeldung.jhipster6.repository; + +import com.baeldung.jhipster6.domain.PersistentAuditEvent; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.time.Instant; +import java.util.List; + +/** + * Spring Data JPA repository for the PersistentAuditEvent entity. + */ +public interface PersistenceAuditEventRepository extends JpaRepository { + + List findByPrincipal(String principal); + + List findByAuditEventDateAfter(Instant after); + + List findByPrincipalAndAuditEventDateAfter(String principal, Instant after); + + List findByPrincipalAndAuditEventDateAfterAndAuditEventType(String principal, Instant after, String type); + + Page findAllByAuditEventDateBetween(Instant fromDate, Instant toDate, Pageable pageable); +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/repository/UserRepository.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/repository/UserRepository.java new file mode 100644 index 000000000000..27fd5fc359cb --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/repository/UserRepository.java @@ -0,0 +1,40 @@ +package com.baeldung.jhipster6.repository; + +import com.baeldung.jhipster6.domain.User; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.EntityGraph; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; +import java.util.List; +import java.util.Optional; +import java.time.Instant; + +/** + * Spring Data JPA repository for the User entity. + */ +@Repository +public interface UserRepository extends JpaRepository { + + Optional findOneByActivationKey(String activationKey); + + List findAllByActivatedIsFalseAndCreatedDateBefore(Instant dateTime); + + Optional findOneByResetKey(String resetKey); + + Optional findOneByEmailIgnoreCase(String email); + + Optional findOneByLogin(String login); + + @EntityGraph(attributePaths = "authorities") + Optional findOneWithAuthoritiesById(Long id); + + @EntityGraph(attributePaths = "authorities") + Optional findOneWithAuthoritiesByLogin(String login); + + @EntityGraph(attributePaths = "authorities") + Optional findOneWithAuthoritiesByEmail(String email); + + Page findAllByLoginNot(Pageable pageable, String login); +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/repository/package-info.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/repository/package-info.java new file mode 100644 index 000000000000..949ee586b74b --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/repository/package-info.java @@ -0,0 +1,4 @@ +/** + * Spring Data JPA repositories. + */ +package com.baeldung.jhipster6.repository; diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/security/AuthoritiesConstants.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/security/AuthoritiesConstants.java new file mode 100644 index 000000000000..3f1709a6d928 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/security/AuthoritiesConstants.java @@ -0,0 +1,16 @@ +package com.baeldung.jhipster6.security; + +/** + * Constants for Spring Security authorities. + */ +public final class AuthoritiesConstants { + + public static final String ADMIN = "ROLE_ADMIN"; + + public static final String USER = "ROLE_USER"; + + public static final String ANONYMOUS = "ROLE_ANONYMOUS"; + + private AuthoritiesConstants() { + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/security/CustomAuthenticationManager.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/security/CustomAuthenticationManager.java new file mode 100644 index 000000000000..092adf1b06db --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/security/CustomAuthenticationManager.java @@ -0,0 +1,126 @@ +package com.baeldung.jhipster6.security; + +import com.baeldung.jhipster6.domain.User; +import com.baeldung.jhipster6.security.dto.LoginRequest; +import com.baeldung.jhipster6.security.dto.LoginResponse; +import com.baeldung.jhipster6.service.UserService; +import com.baeldung.jhipster6.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 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-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/security/DomainUserDetailsService.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/security/DomainUserDetailsService.java new file mode 100644 index 000000000000..3102604ee425 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/security/DomainUserDetailsService.java @@ -0,0 +1,63 @@ +package com.baeldung.jhipster6.security; + +import com.baeldung.jhipster6.domain.User; +import com.baeldung.jhipster6.repository.UserRepository; + +import org.hibernate.validator.internal.constraintvalidators.hv.EmailValidator; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.core.userdetails.UsernameNotFoundException; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * Authenticate a user from the database. + */ +@Component("userDetailsService") +public class DomainUserDetailsService implements UserDetailsService { + + private final Logger log = LoggerFactory.getLogger(DomainUserDetailsService.class); + + private final UserRepository userRepository; + + public DomainUserDetailsService(UserRepository userRepository) { + this.userRepository = userRepository; + } + + @Override + @Transactional + public UserDetails loadUserByUsername(final String login) { + log.debug("Authenticating {}", login); + + if (new EmailValidator().isValid(login, null)) { + return userRepository.findOneWithAuthoritiesByEmail(login) + .map(user -> createSpringSecurityUser(login, user)) + .orElseThrow(() -> new UsernameNotFoundException("User with email " + login + " was not found in the database")); + } + + String lowercaseLogin = login.toLowerCase(Locale.ENGLISH); + return userRepository.findOneWithAuthoritiesByLogin(lowercaseLogin) + .map(user -> createSpringSecurityUser(lowercaseLogin, user)) + .orElseThrow(() -> new UsernameNotFoundException("User " + lowercaseLogin + " was not found in the database")); + + } + + private org.springframework.security.core.userdetails.User createSpringSecurityUser(String lowercaseLogin, User user) { + if (!user.getActivated()) { + throw new UserNotActivatedException("User " + lowercaseLogin + " was not activated"); + } + List grantedAuthorities = user.getAuthorities().stream() + .map(authority -> new SimpleGrantedAuthority(authority.getName())) + .collect(Collectors.toList()); + return new org.springframework.security.core.userdetails.User(user.getLogin(), + user.getPassword(), + grantedAuthorities); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/security/SecurityUtils.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/security/SecurityUtils.java new file mode 100644 index 000000000000..a4a1982b3c7b --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/security/SecurityUtils.java @@ -0,0 +1,76 @@ +package com.baeldung.jhipster6.security; + +import org.springframework.security.core.context.SecurityContext; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.core.userdetails.UserDetails; + +import java.util.Optional; + +/** + * Utility class for Spring Security. + */ +public final class SecurityUtils { + + private SecurityUtils() { + } + + /** + * Get the login of the current user. + * + * @return the login of the current user + */ + public static Optional getCurrentUserLogin() { + SecurityContext securityContext = SecurityContextHolder.getContext(); + return Optional.ofNullable(securityContext.getAuthentication()) + .map(authentication -> { + if (authentication.getPrincipal() instanceof UserDetails) { + UserDetails springSecurityUser = (UserDetails) authentication.getPrincipal(); + return springSecurityUser.getUsername(); + } else if (authentication.getPrincipal() instanceof String) { + return (String) authentication.getPrincipal(); + } + return null; + }); + } + + /** + * Get the JWT of the current user. + * + * @return the JWT of the current user + */ + public static Optional getCurrentUserJWT() { + SecurityContext securityContext = SecurityContextHolder.getContext(); + return Optional.ofNullable(securityContext.getAuthentication()) + .filter(authentication -> authentication.getCredentials() instanceof String) + .map(authentication -> (String) authentication.getCredentials()); + } + + /** + * Check if a user is authenticated. + * + * @return true if the user is authenticated, false otherwise + */ + public static boolean isAuthenticated() { + SecurityContext securityContext = SecurityContextHolder.getContext(); + return Optional.ofNullable(securityContext.getAuthentication()) + .map(authentication -> authentication.getAuthorities().stream() + .noneMatch(grantedAuthority -> grantedAuthority.getAuthority().equals(AuthoritiesConstants.ANONYMOUS))) + .orElse(false); + } + + /** + * If the current user has a specific authority (security role). + *

+ * The name of this method comes from the isUserInRole() method in the Servlet API + * + * @param authority the authority to check + * @return true if the current user has the authority, false otherwise + */ + public static boolean isCurrentUserInRole(String authority) { + SecurityContext securityContext = SecurityContextHolder.getContext(); + return Optional.ofNullable(securityContext.getAuthentication()) + .map(authentication -> authentication.getAuthorities().stream() + .anyMatch(grantedAuthority -> grantedAuthority.getAuthority().equals(authority))) + .orElse(false); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/security/SpringSecurityAuditorAware.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/security/SpringSecurityAuditorAware.java new file mode 100644 index 000000000000..aff636c13c01 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/security/SpringSecurityAuditorAware.java @@ -0,0 +1,20 @@ +package com.baeldung.jhipster6.security; + +import com.baeldung.jhipster6.config.Constants; + +import java.util.Optional; + +import org.springframework.data.domain.AuditorAware; +import org.springframework.stereotype.Component; + +/** + * Implementation of AuditorAware based on Spring Security. + */ +@Component +public class SpringSecurityAuditorAware implements AuditorAware { + + @Override + public Optional getCurrentAuditor() { + return Optional.of(SecurityUtils.getCurrentUserLogin().orElse(Constants.SYSTEM_ACCOUNT)); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/security/UserNotActivatedException.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/security/UserNotActivatedException.java new file mode 100644 index 000000000000..a1f71f5408ae --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/security/UserNotActivatedException.java @@ -0,0 +1,19 @@ +package com.baeldung.jhipster6.security; + +import org.springframework.security.core.AuthenticationException; + +/** + * This exception is thrown in case of a not activated user trying to authenticate. + */ +public class UserNotActivatedException extends AuthenticationException { + + private static final long serialVersionUID = 1L; + + public UserNotActivatedException(String message) { + super(message); + } + + public UserNotActivatedException(String message, Throwable t) { + super(message, t); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/security/dto/LoginRequest.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/security/dto/LoginRequest.java new file mode 100644 index 000000000000..1de26385771e --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/security/dto/LoginRequest.java @@ -0,0 +1,30 @@ +package com.baeldung.jhipster6.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-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/security/dto/LoginResponse.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/security/dto/LoginResponse.java new file mode 100644 index 000000000000..6063180569e0 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/security/dto/LoginResponse.java @@ -0,0 +1,50 @@ +package com.baeldung.jhipster6.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-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/security/jwt/JWTConfigurer.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/security/jwt/JWTConfigurer.java new file mode 100644 index 000000000000..570f6c8d9d21 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/security/jwt/JWTConfigurer.java @@ -0,0 +1,21 @@ +package com.baeldung.jhipster6.security.jwt; + +import org.springframework.security.config.annotation.SecurityConfigurerAdapter; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.web.DefaultSecurityFilterChain; +import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; + +public class JWTConfigurer extends SecurityConfigurerAdapter { + + private TokenProvider tokenProvider; + + public JWTConfigurer(TokenProvider tokenProvider) { + this.tokenProvider = tokenProvider; + } + + @Override + public void configure(HttpSecurity http) throws Exception { + JWTFilter customFilter = new JWTFilter(tokenProvider); + http.addFilterBefore(customFilter, UsernamePasswordAuthenticationFilter.class); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/security/jwt/JWTFilter.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/security/jwt/JWTFilter.java new file mode 100644 index 000000000000..4e921a2f6edc --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/security/jwt/JWTFilter.java @@ -0,0 +1,48 @@ +package com.baeldung.jhipster6.security.jwt; + +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.util.StringUtils; +import org.springframework.web.filter.GenericFilterBean; + +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; +import java.io.IOException; + +/** + * Filters incoming requests and installs a Spring Security principal if a header corresponding to a valid user is + * found. + */ +public class JWTFilter extends GenericFilterBean { + + public static final String AUTHORIZATION_HEADER = "Authorization"; + + private TokenProvider tokenProvider; + + public JWTFilter(TokenProvider tokenProvider) { + this.tokenProvider = tokenProvider; + } + + @Override + public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) + throws IOException, ServletException { + HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest; + String jwt = resolveToken(httpServletRequest); + if (StringUtils.hasText(jwt) && this.tokenProvider.validateToken(jwt)) { + Authentication authentication = this.tokenProvider.getAuthentication(jwt); + SecurityContextHolder.getContext().setAuthentication(authentication); + } + filterChain.doFilter(servletRequest, servletResponse); + } + + private String resolveToken(HttpServletRequest request){ + String bearerToken = request.getHeader(AUTHORIZATION_HEADER); + if (StringUtils.hasText(bearerToken) && bearerToken.startsWith("Bearer ")) { + return bearerToken.substring(7); + } + return null; + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/security/jwt/TokenProvider.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/security/jwt/TokenProvider.java new file mode 100644 index 000000000000..20f46c06e934 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/security/jwt/TokenProvider.java @@ -0,0 +1,119 @@ +package com.baeldung.jhipster6.security.jwt; + +import java.nio.charset.StandardCharsets; +import java.security.Key; +import java.util.*; +import java.util.stream.Collectors; +import javax.annotation.PostConstruct; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.security.core.userdetails.User; +import org.springframework.stereotype.Component; +import org.springframework.util.StringUtils; + +import io.github.jhipster.config.JHipsterProperties; +import io.jsonwebtoken.*; +import io.jsonwebtoken.io.Decoders; +import io.jsonwebtoken.security.Keys; + +@Component +public class TokenProvider { + + private final Logger log = LoggerFactory.getLogger(TokenProvider.class); + + private static final String AUTHORITIES_KEY = "auth"; + + private Key key; + + private long tokenValidityInMilliseconds; + + private long tokenValidityInMillisecondsForRememberMe; + + private final JHipsterProperties jHipsterProperties; + + public TokenProvider(JHipsterProperties jHipsterProperties) { + this.jHipsterProperties = jHipsterProperties; + } + + @PostConstruct + public void init() { + byte[] keyBytes; + String secret = jHipsterProperties.getSecurity().getAuthentication().getJwt().getSecret(); + if (!StringUtils.isEmpty(secret)) { + log.warn("Warning: the JWT key used is not Base64-encoded. " + + "We recommend using the `jhipster.security.authentication.jwt.base64-secret` key for optimum security."); + keyBytes = secret.getBytes(StandardCharsets.UTF_8); + } else { + log.debug("Using a Base64-encoded JWT secret key"); + keyBytes = Decoders.BASE64.decode(jHipsterProperties.getSecurity().getAuthentication().getJwt().getBase64Secret()); + } + this.key = Keys.hmacShaKeyFor(keyBytes); + this.tokenValidityInMilliseconds = + 1000 * jHipsterProperties.getSecurity().getAuthentication().getJwt().getTokenValidityInSeconds(); + this.tokenValidityInMillisecondsForRememberMe = + 1000 * jHipsterProperties.getSecurity().getAuthentication().getJwt() + .getTokenValidityInSecondsForRememberMe(); + } + + public String createToken(Authentication authentication, boolean rememberMe) { + String authorities = authentication.getAuthorities().stream() + .map(GrantedAuthority::getAuthority) + .collect(Collectors.joining(",")); + + long now = (new Date()).getTime(); + Date validity; + if (rememberMe) { + validity = new Date(now + this.tokenValidityInMillisecondsForRememberMe); + } else { + validity = new Date(now + this.tokenValidityInMilliseconds); + } + + return Jwts.builder() + .setSubject(authentication.getName()) + .claim(AUTHORITIES_KEY, authorities) + .signWith(key, SignatureAlgorithm.HS512) + .setExpiration(validity) + .compact(); + } + + public Authentication getAuthentication(String token) { + Claims claims = Jwts.parser() + .setSigningKey(key) + .parseClaimsJws(token) + .getBody(); + + Collection authorities = + Arrays.stream(claims.get(AUTHORITIES_KEY).toString().split(",")) + .map(SimpleGrantedAuthority::new) + .collect(Collectors.toList()); + + User principal = new User(claims.getSubject(), "", authorities); + + return new UsernamePasswordAuthenticationToken(principal, token, authorities); + } + + public boolean validateToken(String authToken) { + try { + Jwts.parser().setSigningKey(key).parseClaimsJws(authToken); + return true; + } catch (io.jsonwebtoken.security.SecurityException | MalformedJwtException e) { + log.info("Invalid JWT signature."); + log.trace("Invalid JWT signature trace: {}", e); + } catch (ExpiredJwtException e) { + log.info("Expired JWT token."); + log.trace("Expired JWT token trace: {}", e); + } catch (UnsupportedJwtException e) { + log.info("Unsupported JWT token."); + log.trace("Unsupported JWT token trace: {}", e); + } catch (IllegalArgumentException e) { + log.info("JWT token compact of handler are invalid."); + log.trace("JWT token compact of handler are invalid trace: {}", e); + } + return false; + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/security/package-info.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/security/package-info.java new file mode 100644 index 000000000000..3fc05c27e735 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/security/package-info.java @@ -0,0 +1,4 @@ +/** + * Spring Security configuration. + */ +package com.baeldung.jhipster6.security; diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/service/AuditEventService.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/service/AuditEventService.java new file mode 100644 index 000000000000..4d008e096e56 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/service/AuditEventService.java @@ -0,0 +1,52 @@ +package com.baeldung.jhipster6.service; + +import com.baeldung.jhipster6.config.audit.AuditEventConverter; +import com.baeldung.jhipster6.repository.PersistenceAuditEventRepository; + +import org.springframework.boot.actuate.audit.AuditEvent; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.Instant; +import java.util.Optional; + +/** + * Service for managing audit events. + *

+ * This is the default implementation to support SpringBoot Actuator AuditEventRepository + */ +@Service +@Transactional +public class AuditEventService { + + private final PersistenceAuditEventRepository persistenceAuditEventRepository; + + private final AuditEventConverter auditEventConverter; + + public AuditEventService( + PersistenceAuditEventRepository persistenceAuditEventRepository, + AuditEventConverter auditEventConverter) { + + this.persistenceAuditEventRepository = persistenceAuditEventRepository; + this.auditEventConverter = auditEventConverter; + } + + public Page findAll(Pageable pageable) { + return persistenceAuditEventRepository.findAll(pageable) + .map(auditEventConverter::convertToAuditEvent); + } + + public Page findByDates(Instant fromDate, Instant toDate, Pageable pageable) { + return persistenceAuditEventRepository.findAllByAuditEventDateBetween(fromDate, toDate, pageable) + .map(auditEventConverter::convertToAuditEvent); + } + + public Optional find(Long id) { + return Optional.ofNullable(persistenceAuditEventRepository.findById(id)) + .filter(Optional::isPresent) + .map(Optional::get) + .map(auditEventConverter::convertToAuditEvent); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/service/BookService.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/service/BookService.java new file mode 100644 index 000000000000..00fe8475278f --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/service/BookService.java @@ -0,0 +1,50 @@ +package com.baeldung.jhipster6.service; + +import com.baeldung.jhipster6.service.dto.BookDTO; + +import java.util.List; +import java.util.Optional; + +/** + * Service Interface for managing Book. + */ +public interface BookService { + + /** + * Save a book. + * + * @param bookDTO the entity to save + * @return the persisted entity + */ + BookDTO save(BookDTO bookDTO); + + /** + * Get all the books. + * + * @return the list of entities + */ + List findAll(); + + + /** + * Get the "id" book. + * + * @param id the id of the entity + * @return the entity + */ + Optional findOne(Long id); + + /** + * Delete the "id" book. + * + * @param id the id of the entity + */ + void delete(Long id); + + /** + * Simulates purchasing a book by reducing the stock of a book by 1. + * @param id the id of the book + * @return Updated BookDTO, empty if not found, or throws exception if an error occurs. + */ + Optional purchase(Long id); +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/service/MailService.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/service/MailService.java new file mode 100644 index 000000000000..807cf8b5d6b7 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/service/MailService.java @@ -0,0 +1,105 @@ +package com.baeldung.jhipster6.service; + +import com.baeldung.jhipster6.domain.User; + +import io.github.jhipster.config.JHipsterProperties; + +import java.nio.charset.StandardCharsets; +import java.util.Locale; +import javax.mail.internet.MimeMessage; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.MessageSource; +import org.springframework.mail.javamail.JavaMailSender; +import org.springframework.mail.javamail.MimeMessageHelper; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; +import org.thymeleaf.context.Context; +import org.thymeleaf.spring5.SpringTemplateEngine; + +/** + * Service for sending emails. + *

+ * We use the @Async annotation to send emails asynchronously. + */ +@Service +public class MailService { + + private final Logger log = LoggerFactory.getLogger(MailService.class); + + private static final String USER = "user"; + + private static final String BASE_URL = "baseUrl"; + + private final JHipsterProperties jHipsterProperties; + + private final JavaMailSender javaMailSender; + + private final MessageSource messageSource; + + private final SpringTemplateEngine templateEngine; + + public MailService(JHipsterProperties jHipsterProperties, JavaMailSender javaMailSender, + MessageSource messageSource, SpringTemplateEngine templateEngine) { + + this.jHipsterProperties = jHipsterProperties; + this.javaMailSender = javaMailSender; + this.messageSource = messageSource; + this.templateEngine = templateEngine; + } + + @Async + public void sendEmail(String to, String subject, String content, boolean isMultipart, boolean isHtml) { + log.debug("Send email[multipart '{}' and html '{}'] to '{}' with subject '{}' and content={}", + isMultipart, isHtml, to, subject, content); + + // Prepare message using a Spring helper + MimeMessage mimeMessage = javaMailSender.createMimeMessage(); + try { + MimeMessageHelper message = new MimeMessageHelper(mimeMessage, isMultipart, StandardCharsets.UTF_8.name()); + message.setTo(to); + message.setFrom(jHipsterProperties.getMail().getFrom()); + message.setSubject(subject); + message.setText(content, isHtml); + javaMailSender.send(mimeMessage); + log.debug("Sent email to User '{}'", to); + } catch (Exception e) { + if (log.isDebugEnabled()) { + log.warn("Email could not be sent to user '{}'", to, e); + } else { + log.warn("Email could not be sent to user '{}': {}", to, e.getMessage()); + } + } + } + + @Async + public void sendEmailFromTemplate(User user, String templateName, String titleKey) { + Locale locale = Locale.forLanguageTag(user.getLangKey()); + Context context = new Context(locale); + context.setVariable(USER, user); + context.setVariable(BASE_URL, jHipsterProperties.getMail().getBaseUrl()); + String content = templateEngine.process(templateName, context); + String subject = messageSource.getMessage(titleKey, null, locale); + sendEmail(user.getEmail(), subject, content, false, true); + + } + + @Async + public void sendActivationEmail(User user) { + log.debug("Sending activation email to '{}'", user.getEmail()); + sendEmailFromTemplate(user, "mail/activationEmail", "email.activation.title"); + } + + @Async + public void sendCreationEmail(User user) { + log.debug("Sending creation email to '{}'", user.getEmail()); + sendEmailFromTemplate(user, "mail/creationEmail", "email.activation.title"); + } + + @Async + public void sendPasswordResetMail(User user) { + log.debug("Sending password reset email to '{}'", user.getEmail()); + sendEmailFromTemplate(user, "mail/passwordResetEmail", "email.reset.title"); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/service/UserService.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/service/UserService.java new file mode 100644 index 000000000000..9c4333207086 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/service/UserService.java @@ -0,0 +1,276 @@ +package com.baeldung.jhipster6.service; + +import com.baeldung.jhipster6.config.Constants; +import com.baeldung.jhipster6.domain.Authority; +import com.baeldung.jhipster6.domain.User; +import com.baeldung.jhipster6.repository.AuthorityRepository; +import com.baeldung.jhipster6.repository.UserRepository; +import com.baeldung.jhipster6.security.AuthoritiesConstants; +import com.baeldung.jhipster6.security.SecurityUtils; +import com.baeldung.jhipster6.service.dto.UserDTO; +import com.baeldung.jhipster6.service.util.RandomUtil; +import com.baeldung.jhipster6.web.rest.errors.*; +import com.baeldung.jhipster6.web.rest.errors.EmailAlreadyUsedException; +import com.baeldung.jhipster6.web.rest.errors.InvalidPasswordException; +import com.baeldung.jhipster6.web.rest.errors.LoginAlreadyUsedException; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.Instant; +import java.time.temporal.ChronoUnit; +import java.util.*; +import java.util.stream.Collectors; + +/** + * Service class for managing users. + */ +@Service +@Transactional +public class UserService { + + private final Logger log = LoggerFactory.getLogger(UserService.class); + + private final UserRepository userRepository; + + private final PasswordEncoder passwordEncoder; + + private final AuthorityRepository authorityRepository; + + public UserService(UserRepository userRepository, PasswordEncoder passwordEncoder, AuthorityRepository authorityRepository) { + this.userRepository = userRepository; + this.passwordEncoder = passwordEncoder; + this.authorityRepository = authorityRepository; + } + + public Optional activateRegistration(String key) { + log.debug("Activating user for activation key {}", key); + return userRepository.findOneByActivationKey(key) + .map(user -> { + // activate given user for the registration key. + user.setActivated(true); + user.setActivationKey(null); + log.debug("Activated user: {}", user); + return user; + }); + } + + public Optional completePasswordReset(String newPassword, String key) { + log.debug("Reset user password for reset key {}", key); + return userRepository.findOneByResetKey(key) + .filter(user -> user.getResetDate().isAfter(Instant.now().minusSeconds(86400))) + .map(user -> { + user.setPassword(passwordEncoder.encode(newPassword)); + user.setResetKey(null); + user.setResetDate(null); + return user; + }); + } + + public Optional requestPasswordReset(String mail) { + return userRepository.findOneByEmailIgnoreCase(mail) + .filter(User::getActivated) + .map(user -> { + user.setResetKey(RandomUtil.generateResetKey()); + user.setResetDate(Instant.now()); + return user; + }); + } + + public User registerUser(UserDTO userDTO, String password) { + userRepository.findOneByLogin(userDTO.getLogin().toLowerCase()).ifPresent(existingUser -> { + boolean removed = removeNonActivatedUser(existingUser); + if (!removed) { + throw new LoginAlreadyUsedException(); + } + }); + userRepository.findOneByEmailIgnoreCase(userDTO.getEmail()).ifPresent(existingUser -> { + boolean removed = removeNonActivatedUser(existingUser); + if (!removed) { + throw new EmailAlreadyUsedException(); + } + }); + User newUser = new User(); + String encryptedPassword = passwordEncoder.encode(password); + newUser.setLogin(userDTO.getLogin().toLowerCase()); + // new user gets initially a generated password + newUser.setPassword(encryptedPassword); + newUser.setFirstName(userDTO.getFirstName()); + newUser.setLastName(userDTO.getLastName()); + newUser.setEmail(userDTO.getEmail().toLowerCase()); + newUser.setImageUrl(userDTO.getImageUrl()); + newUser.setLangKey(userDTO.getLangKey()); + // new user is not active + newUser.setActivated(false); + // new user gets registration key + newUser.setActivationKey(RandomUtil.generateActivationKey()); + Set authorities = new HashSet<>(); + authorityRepository.findById(AuthoritiesConstants.USER).ifPresent(authorities::add); + newUser.setAuthorities(authorities); + userRepository.save(newUser); + log.debug("Created Information for User: {}", newUser); + return newUser; + } + + private boolean removeNonActivatedUser(User existingUser){ + if (existingUser.getActivated()) { + return false; + } + userRepository.delete(existingUser); + userRepository.flush(); + return true; + } + + public User createUser(UserDTO userDTO) { + User user = new User(); + user.setLogin(userDTO.getLogin().toLowerCase()); + user.setFirstName(userDTO.getFirstName()); + user.setLastName(userDTO.getLastName()); + user.setEmail(userDTO.getEmail().toLowerCase()); + user.setImageUrl(userDTO.getImageUrl()); + if (userDTO.getLangKey() == null) { + user.setLangKey(Constants.DEFAULT_LANGUAGE); // default language + } else { + user.setLangKey(userDTO.getLangKey()); + } + String encryptedPassword = passwordEncoder.encode(RandomUtil.generatePassword()); + user.setPassword(encryptedPassword); + user.setResetKey(RandomUtil.generateResetKey()); + user.setResetDate(Instant.now()); + user.setActivated(true); + if (userDTO.getAuthorities() != null) { + Set authorities = userDTO.getAuthorities().stream() + .map(authorityRepository::findById) + .filter(Optional::isPresent) + .map(Optional::get) + .collect(Collectors.toSet()); + user.setAuthorities(authorities); + } + userRepository.save(user); + log.debug("Created Information for User: {}", user); + return user; + } + + /** + * Update basic information (first name, last name, email, language) for the current user. + * + * @param firstName first name of user + * @param lastName last name of user + * @param email email id of user + * @param langKey language key + * @param imageUrl image URL of user + */ + public void updateUser(String firstName, String lastName, String email, String langKey, String imageUrl) { + SecurityUtils.getCurrentUserLogin() + .flatMap(userRepository::findOneByLogin) + .ifPresent(user -> { + user.setFirstName(firstName); + user.setLastName(lastName); + user.setEmail(email.toLowerCase()); + user.setLangKey(langKey); + user.setImageUrl(imageUrl); + log.debug("Changed Information for User: {}", user); + }); + } + + /** + * Update all information for a specific user, and return the modified user. + * + * @param userDTO user to update + * @return updated user + */ + public Optional updateUser(UserDTO userDTO) { + return Optional.of(userRepository + .findById(userDTO.getId())) + .filter(Optional::isPresent) + .map(Optional::get) + .map(user -> { + user.setLogin(userDTO.getLogin().toLowerCase()); + user.setFirstName(userDTO.getFirstName()); + user.setLastName(userDTO.getLastName()); + user.setEmail(userDTO.getEmail().toLowerCase()); + user.setImageUrl(userDTO.getImageUrl()); + user.setActivated(userDTO.isActivated()); + user.setLangKey(userDTO.getLangKey()); + Set managedAuthorities = user.getAuthorities(); + managedAuthorities.clear(); + userDTO.getAuthorities().stream() + .map(authorityRepository::findById) + .filter(Optional::isPresent) + .map(Optional::get) + .forEach(managedAuthorities::add); + log.debug("Changed Information for User: {}", user); + return user; + }) + .map(UserDTO::new); + } + + public void deleteUser(String login) { + userRepository.findOneByLogin(login).ifPresent(user -> { + userRepository.delete(user); + log.debug("Deleted User: {}", user); + }); + } + + public void changePassword(String currentClearTextPassword, String newPassword) { + SecurityUtils.getCurrentUserLogin() + .flatMap(userRepository::findOneByLogin) + .ifPresent(user -> { + String currentEncryptedPassword = user.getPassword(); + if (!passwordEncoder.matches(currentClearTextPassword, currentEncryptedPassword)) { + throw new InvalidPasswordException(); + } + String encryptedPassword = passwordEncoder.encode(newPassword); + user.setPassword(encryptedPassword); + log.debug("Changed password for User: {}", user); + }); + } + + @Transactional(readOnly = true) + public Page getAllManagedUsers(Pageable pageable) { + return userRepository.findAllByLoginNot(pageable, Constants.ANONYMOUS_USER).map(UserDTO::new); + } + + @Transactional(readOnly = true) + public Optional getUserWithAuthoritiesByLogin(String login) { + return userRepository.findOneWithAuthoritiesByLogin(login); + } + + @Transactional(readOnly = true) + public Optional getUserWithAuthorities(Long id) { + return userRepository.findOneWithAuthoritiesById(id); + } + + @Transactional(readOnly = true) + public Optional getUserWithAuthorities() { + return SecurityUtils.getCurrentUserLogin().flatMap(userRepository::findOneWithAuthoritiesByLogin); + } + + /** + * Not activated users should be automatically deleted after 3 days. + *

+ * This is scheduled to get fired everyday, at 01:00 (am). + */ + @Scheduled(cron = "0 0 1 * * ?") + public void removeNotActivatedUsers() { + userRepository + .findAllByActivatedIsFalseAndCreatedDateBefore(Instant.now().minus(3, ChronoUnit.DAYS)) + .forEach(user -> { + log.debug("Deleting not activated user {}", user.getLogin()); + userRepository.delete(user); + }); + } + + /** + * @return a list of all the authorities + */ + public List getAuthorities() { + return authorityRepository.findAll().stream().map(Authority::getName).collect(Collectors.toList()); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/service/dto/BookDTO.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/service/dto/BookDTO.java new file mode 100644 index 000000000000..6334af6c21a3 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/service/dto/BookDTO.java @@ -0,0 +1,112 @@ +package com.baeldung.jhipster6.service.dto; +import java.time.LocalDate; +import javax.validation.constraints.*; +import java.io.Serializable; +import java.util.Objects; + +/** + * A DTO for the Book entity. + */ +public class BookDTO implements Serializable { + + private Long id; + + @NotNull + private String title; + + @NotNull + private String author; + + @NotNull + private LocalDate published; + + @NotNull + @Min(value = 0) + private Integer quantity; + + @NotNull + @DecimalMin(value = "0") + private Double price; + + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getAuthor() { + return author; + } + + public void setAuthor(String author) { + this.author = author; + } + + public LocalDate getPublished() { + return published; + } + + public void setPublished(LocalDate published) { + this.published = published; + } + + public Integer getQuantity() { + return quantity; + } + + public void setQuantity(Integer quantity) { + this.quantity = quantity; + } + + public Double getPrice() { + return price; + } + + public void setPrice(Double price) { + this.price = price; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + BookDTO bookDTO = (BookDTO) o; + if (bookDTO.getId() == null || getId() == null) { + return false; + } + return Objects.equals(getId(), bookDTO.getId()); + } + + @Override + public int hashCode() { + return Objects.hashCode(getId()); + } + + @Override + public String toString() { + return "BookDTO{" + + "id=" + getId() + + ", title='" + getTitle() + "'" + + ", author='" + getAuthor() + "'" + + ", published='" + getPublished() + "'" + + ", quantity=" + getQuantity() + + ", price=" + getPrice() + + "}"; + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/service/dto/PasswordChangeDTO.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/service/dto/PasswordChangeDTO.java new file mode 100644 index 000000000000..1439b6e58d7a --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/service/dto/PasswordChangeDTO.java @@ -0,0 +1,35 @@ +package com.baeldung.jhipster6.service.dto; + +/** + * A DTO representing a password change required data - current and new password. + */ +public class PasswordChangeDTO { + private String currentPassword; + private String newPassword; + + public PasswordChangeDTO() { + // Empty constructor needed for Jackson. + } + + public PasswordChangeDTO(String currentPassword, String newPassword) { + this.currentPassword = currentPassword; + this.newPassword = newPassword; + } + + public String getCurrentPassword() { + + return currentPassword; + } + + public void setCurrentPassword(String currentPassword) { + this.currentPassword = currentPassword; + } + + public String getNewPassword() { + return newPassword; + } + + public void setNewPassword(String newPassword) { + this.newPassword = newPassword; + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/service/dto/UserDTO.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/service/dto/UserDTO.java new file mode 100644 index 000000000000..2dd38f9c0fc2 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/service/dto/UserDTO.java @@ -0,0 +1,199 @@ +package com.baeldung.jhipster6.service.dto; + +import com.baeldung.jhipster6.config.Constants; + +import com.baeldung.jhipster6.domain.Authority; +import com.baeldung.jhipster6.domain.User; + +import javax.validation.constraints.Email; +import javax.validation.constraints.NotBlank; + +import javax.validation.constraints.*; +import java.time.Instant; +import java.util.Set; +import java.util.stream.Collectors; + +/** + * A DTO representing a user, with his authorities. + */ +public class UserDTO { + + private Long id; + + @NotBlank + @Pattern(regexp = Constants.LOGIN_REGEX) + @Size(min = 1, max = 50) + private String login; + + @Size(max = 50) + private String firstName; + + @Size(max = 50) + private String lastName; + + @Email + @Size(min = 5, max = 254) + private String email; + + @Size(max = 256) + private String imageUrl; + + private boolean activated = false; + + @Size(min = 2, max = 6) + private String langKey; + + private String createdBy; + + private Instant createdDate; + + private String lastModifiedBy; + + private Instant lastModifiedDate; + + private Set authorities; + + public UserDTO() { + // Empty constructor needed for Jackson. + } + + public UserDTO(User user) { + this.id = user.getId(); + this.login = user.getLogin(); + this.firstName = user.getFirstName(); + this.lastName = user.getLastName(); + this.email = user.getEmail(); + this.activated = user.getActivated(); + this.imageUrl = user.getImageUrl(); + this.langKey = user.getLangKey(); + this.createdBy = user.getCreatedBy(); + this.createdDate = user.getCreatedDate(); + this.lastModifiedBy = user.getLastModifiedBy(); + this.lastModifiedDate = user.getLastModifiedDate(); + this.authorities = user.getAuthorities().stream() + .map(Authority::getName) + .collect(Collectors.toSet()); + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getLogin() { + return login; + } + + public void setLogin(String login) { + this.login = login; + } + + 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; + } + + public String getImageUrl() { + return imageUrl; + } + + public void setImageUrl(String imageUrl) { + this.imageUrl = imageUrl; + } + + public boolean isActivated() { + return activated; + } + + public void setActivated(boolean activated) { + this.activated = activated; + } + + public String getLangKey() { + return langKey; + } + + public void setLangKey(String langKey) { + this.langKey = langKey; + } + + public String getCreatedBy() { + return createdBy; + } + + public void setCreatedBy(String createdBy) { + this.createdBy = createdBy; + } + + public Instant getCreatedDate() { + return createdDate; + } + + public void setCreatedDate(Instant createdDate) { + this.createdDate = createdDate; + } + + public String getLastModifiedBy() { + return lastModifiedBy; + } + + public void setLastModifiedBy(String lastModifiedBy) { + this.lastModifiedBy = lastModifiedBy; + } + + public Instant getLastModifiedDate() { + return lastModifiedDate; + } + + public void setLastModifiedDate(Instant lastModifiedDate) { + this.lastModifiedDate = lastModifiedDate; + } + + public Set getAuthorities() { + return authorities; + } + + public void setAuthorities(Set authorities) { + this.authorities = authorities; + } + + @Override + public String toString() { + return "UserDTO{" + + "login='" + login + '\'' + + ", firstName='" + firstName + '\'' + + ", lastName='" + lastName + '\'' + + ", email='" + email + '\'' + + ", imageUrl='" + imageUrl + '\'' + + ", activated=" + activated + + ", langKey='" + langKey + '\'' + + ", createdBy=" + createdBy + + ", createdDate=" + createdDate + + ", lastModifiedBy='" + lastModifiedBy + '\'' + + ", lastModifiedDate=" + lastModifiedDate + + ", authorities=" + authorities + + "}"; + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/service/dto/package-info.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/service/dto/package-info.java new file mode 100644 index 000000000000..c5363205842a --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/service/dto/package-info.java @@ -0,0 +1,4 @@ +/** + * Data Transfer Objects. + */ +package com.baeldung.jhipster6.service.dto; diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/service/impl/BookServiceImpl.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/service/impl/BookServiceImpl.java new file mode 100644 index 000000000000..0012489c5eca --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/service/impl/BookServiceImpl.java @@ -0,0 +1,110 @@ +package com.baeldung.jhipster6.service.impl; + +import com.baeldung.jhipster6.service.BookService; +import com.baeldung.jhipster6.domain.Book; +import com.baeldung.jhipster6.repository.BookRepository; +import com.baeldung.jhipster6.service.dto.BookDTO; +import com.baeldung.jhipster6.service.mapper.BookMapper; +import com.baeldung.jhipster6.web.rest.errors.BadRequestAlertException; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.LinkedList; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +/** + * Service Implementation for managing Book. + */ +@Service +@Transactional +public class BookServiceImpl implements BookService { + + private final Logger log = LoggerFactory.getLogger(BookServiceImpl.class); + + private final BookRepository bookRepository; + + private final BookMapper bookMapper; + + public BookServiceImpl(BookRepository bookRepository, BookMapper bookMapper) { + this.bookRepository = bookRepository; + this.bookMapper = bookMapper; + } + + /** + * Save a book. + * + * @param bookDTO the entity to save + * @return the persisted entity + */ + @Override + public BookDTO save(BookDTO bookDTO) { + log.debug("Request to save Book : {}", bookDTO); + Book book = bookMapper.toEntity(bookDTO); + book = bookRepository.save(book); + return bookMapper.toDto(book); + } + + /** + * Get all the books. + * + * @return the list of entities + */ + @Override + @Transactional(readOnly = true) + public List findAll() { + log.debug("Request to get all Books"); + return bookRepository.findAll().stream() + .map(bookMapper::toDto) + .collect(Collectors.toCollection(LinkedList::new)); + } + + + /** + * Get one book by id. + * + * @param id the id of the entity + * @return the entity + */ + @Override + @Transactional(readOnly = true) + public Optional findOne(Long id) { + log.debug("Request to get Book : {}", id); + return bookRepository.findById(id) + .map(bookMapper::toDto); + } + + /** + * Delete the book by id. + * + * @param id the id of the entity + */ + @Override + public void delete(Long id) { + log.debug("Request to delete Book : {}", id); + bookRepository.deleteById(id); + } + + @Override + public Optional purchase(Long id) { + Optional bookDTO = findOne(id); + if(bookDTO.isPresent()) { + int quantity = bookDTO.get().getQuantity(); + if(quantity > 0) { + bookDTO.get().setQuantity(quantity - 1); + Book book = bookMapper.toEntity(bookDTO.get()); + book = bookRepository.save(book); + return bookDTO; + } + else { + throw new BadRequestAlertException("Book is not in stock", "book", "notinstock"); + } + } + return Optional.empty(); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/service/mapper/BookMapper.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/service/mapper/BookMapper.java new file mode 100644 index 000000000000..64350fb4ed7f --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/service/mapper/BookMapper.java @@ -0,0 +1,25 @@ +package com.baeldung.jhipster6.service.mapper; + +import com.baeldung.jhipster6.domain.*; +import com.baeldung.jhipster6.service.dto.BookDTO; +import com.baeldung.jhipster6.domain.Book; + +import org.mapstruct.*; + +/** + * Mapper for the entity Book and its DTO BookDTO. + */ +@Mapper(componentModel = "spring", uses = {}) +public interface BookMapper extends EntityMapper { + + + + default Book fromId(Long id) { + if (id == null) { + return null; + } + Book book = new Book(); + book.setId(id); + return book; + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/service/mapper/EntityMapper.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/service/mapper/EntityMapper.java new file mode 100644 index 000000000000..6ca8d894801c --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/service/mapper/EntityMapper.java @@ -0,0 +1,21 @@ +package com.baeldung.jhipster6.service.mapper; + +import java.util.List; + +/** + * Contract for a generic dto to entity mapper. + * + * @param - DTO type parameter. + * @param - Entity type parameter. + */ + +public interface EntityMapper { + + E toEntity(D dto); + + D toDto(E entity); + + List toEntity(List dtoList); + + List toDto(List entityList); +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/service/mapper/UserMapper.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/service/mapper/UserMapper.java new file mode 100644 index 000000000000..8b2b4cfba048 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/service/mapper/UserMapper.java @@ -0,0 +1,81 @@ +package com.baeldung.jhipster6.service.mapper; + +import com.baeldung.jhipster6.domain.Authority; +import com.baeldung.jhipster6.domain.User; +import com.baeldung.jhipster6.service.dto.UserDTO; + +import org.springframework.stereotype.Service; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * Mapper for the entity User and its DTO called UserDTO. + * + * Normal mappers are generated using MapStruct, this one is hand-coded as MapStruct + * support is still in beta, and requires a manual step with an IDE. + */ +@Service +public class UserMapper { + + public List usersToUserDTOs(List users) { + return users.stream() + .filter(Objects::nonNull) + .map(this::userToUserDTO) + .collect(Collectors.toList()); + } + + public UserDTO userToUserDTO(User user) { + return new UserDTO(user); + } + + public List userDTOsToUsers(List userDTOs) { + return userDTOs.stream() + .filter(Objects::nonNull) + .map(this::userDTOToUser) + .collect(Collectors.toList()); + } + + public User userDTOToUser(UserDTO userDTO) { + if (userDTO == null) { + return null; + } else { + User user = new User(); + user.setId(userDTO.getId()); + user.setLogin(userDTO.getLogin()); + user.setFirstName(userDTO.getFirstName()); + user.setLastName(userDTO.getLastName()); + user.setEmail(userDTO.getEmail()); + user.setImageUrl(userDTO.getImageUrl()); + user.setActivated(userDTO.isActivated()); + user.setLangKey(userDTO.getLangKey()); + Set authorities = this.authoritiesFromStrings(userDTO.getAuthorities()); + user.setAuthorities(authorities); + return user; + } + } + + + private Set authoritiesFromStrings(Set authoritiesAsString) { + Set authorities = new HashSet<>(); + + if(authoritiesAsString != null){ + authorities = authoritiesAsString.stream().map(string -> { + Authority auth = new Authority(); + auth.setName(string); + return auth; + }).collect(Collectors.toSet()); + } + + return authorities; + } + + public User userFromId(Long id) { + if (id == null) { + return null; + } + User user = new User(); + user.setId(id); + return user; + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/service/mapper/package-info.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/service/mapper/package-info.java new file mode 100644 index 000000000000..6ce6ec42fbdf --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/service/mapper/package-info.java @@ -0,0 +1,4 @@ +/** + * MapStruct mappers for mapping domain objects and Data Transfer Objects. + */ +package com.baeldung.jhipster6.service.mapper; diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/service/package-info.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/service/package-info.java new file mode 100644 index 000000000000..4f9584c45e85 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/service/package-info.java @@ -0,0 +1,4 @@ +/** + * Service layer beans. + */ +package com.baeldung.jhipster6.service; diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/service/util/RandomUtil.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/service/util/RandomUtil.java new file mode 100644 index 000000000000..74b8b178c27a --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/service/util/RandomUtil.java @@ -0,0 +1,41 @@ +package com.baeldung.jhipster6.service.util; + +import org.apache.commons.lang3.RandomStringUtils; + +/** + * Utility class for generating random Strings. + */ +public final class RandomUtil { + + private static final int DEF_COUNT = 20; + + private RandomUtil() { + } + + /** + * Generate a password. + * + * @return the generated password + */ + public static String generatePassword() { + return RandomStringUtils.randomAlphanumeric(DEF_COUNT); + } + + /** + * Generate an activation key. + * + * @return the generated activation key + */ + public static String generateActivationKey() { + return RandomStringUtils.randomNumeric(DEF_COUNT); + } + + /** + * Generate a reset key. + * + * @return the generated reset key + */ + public static String generateResetKey() { + return RandomStringUtils.randomNumeric(DEF_COUNT); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/AccountResource.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/AccountResource.java new file mode 100644 index 000000000000..3603df148bd6 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/AccountResource.java @@ -0,0 +1,184 @@ +package com.baeldung.jhipster6.web.rest; + + +import com.baeldung.jhipster6.domain.User; +import com.baeldung.jhipster6.repository.UserRepository; +import com.baeldung.jhipster6.security.SecurityUtils; +import com.baeldung.jhipster6.service.MailService; +import com.baeldung.jhipster6.service.UserService; +import com.baeldung.jhipster6.service.dto.PasswordChangeDTO; +import com.baeldung.jhipster6.service.dto.UserDTO; +import com.baeldung.jhipster6.web.rest.errors.*; +import com.baeldung.jhipster6.web.rest.errors.EmailAlreadyUsedException; +import com.baeldung.jhipster6.web.rest.errors.EmailNotFoundException; +import com.baeldung.jhipster6.web.rest.errors.InternalServerErrorException; +import com.baeldung.jhipster6.web.rest.errors.InvalidPasswordException; +import com.baeldung.jhipster6.web.rest.errors.LoginAlreadyUsedException; +import com.baeldung.jhipster6.web.rest.vm.KeyAndPasswordVM; +import com.baeldung.jhipster6.web.rest.vm.ManagedUserVM; + +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletRequest; +import javax.validation.Valid; +import java.util.*; + +/** + * REST controller for managing the current user's account. + */ +@RestController +@RequestMapping("/api") +public class AccountResource { + + private final Logger log = LoggerFactory.getLogger(AccountResource.class); + + private final UserRepository userRepository; + + private final UserService userService; + + private final MailService mailService; + + public AccountResource(UserRepository userRepository, UserService userService, MailService mailService) { + + this.userRepository = userRepository; + this.userService = userService; + this.mailService = mailService; + } + + /** + * POST /register : register the user. + * + * @param managedUserVM the managed user View Model + * @throws InvalidPasswordException 400 (Bad Request) if the password is incorrect + * @throws EmailAlreadyUsedException 400 (Bad Request) if the email is already used + * @throws LoginAlreadyUsedException 400 (Bad Request) if the login is already used + */ + @PostMapping("/register") + @ResponseStatus(HttpStatus.CREATED) + public void registerAccount(@Valid @RequestBody ManagedUserVM managedUserVM) { + if (!checkPasswordLength(managedUserVM.getPassword())) { + throw new InvalidPasswordException(); + } + User user = userService.registerUser(managedUserVM, managedUserVM.getPassword()); + mailService.sendActivationEmail(user); + } + + /** + * GET /activate : activate the registered user. + * + * @param key the activation key + * @throws RuntimeException 500 (Internal Server Error) if the user couldn't be activated + */ + @GetMapping("/activate") + public void activateAccount(@RequestParam(value = "key") String key) { + Optional user = userService.activateRegistration(key); + if (!user.isPresent()) { + throw new InternalServerErrorException("No user was found for this activation key"); + } + } + + /** + * GET /authenticate : check if the user is authenticated, and return its login. + * + * @param request the HTTP request + * @return the login if the user is authenticated + */ + @GetMapping("/authenticate") + public String isAuthenticated(HttpServletRequest request) { + log.debug("REST request to check if the current user is authenticated"); + return request.getRemoteUser(); + } + + /** + * GET /account : get the current user. + * + * @return the current user + * @throws RuntimeException 500 (Internal Server Error) if the user couldn't be returned + */ + @GetMapping("/account") + public UserDTO getAccount() { + return userService.getUserWithAuthorities() + .map(UserDTO::new) + .orElseThrow(() -> new InternalServerErrorException("User could not be found")); + } + + /** + * POST /account : update the current user information. + * + * @param userDTO the current user information + * @throws EmailAlreadyUsedException 400 (Bad Request) if the email is already used + * @throws RuntimeException 500 (Internal Server Error) if the user login wasn't found + */ + @PostMapping("/account") + public void saveAccount(@Valid @RequestBody UserDTO userDTO) { + String userLogin = SecurityUtils.getCurrentUserLogin().orElseThrow(() -> new InternalServerErrorException("Current user login not found")); + Optional existingUser = userRepository.findOneByEmailIgnoreCase(userDTO.getEmail()); + if (existingUser.isPresent() && (!existingUser.get().getLogin().equalsIgnoreCase(userLogin))) { + throw new EmailAlreadyUsedException(); + } + Optional user = userRepository.findOneByLogin(userLogin); + if (!user.isPresent()) { + throw new InternalServerErrorException("User could not be found"); + } + userService.updateUser(userDTO.getFirstName(), userDTO.getLastName(), userDTO.getEmail(), + userDTO.getLangKey(), userDTO.getImageUrl()); + } + + /** + * POST /account/change-password : changes the current user's password + * + * @param passwordChangeDto current and new password + * @throws InvalidPasswordException 400 (Bad Request) if the new password is incorrect + */ + @PostMapping(path = "/account/change-password") + public void changePassword(@RequestBody PasswordChangeDTO passwordChangeDto) { + if (!checkPasswordLength(passwordChangeDto.getNewPassword())) { + throw new InvalidPasswordException(); + } + userService.changePassword(passwordChangeDto.getCurrentPassword(), passwordChangeDto.getNewPassword()); + } + + /** + * POST /account/reset-password/init : Send an email to reset the password of the user + * + * @param mail the mail of the user + * @throws EmailNotFoundException 400 (Bad Request) if the email address is not registered + */ + @PostMapping(path = "/account/reset-password/init") + public void requestPasswordReset(@RequestBody String mail) { + mailService.sendPasswordResetMail( + userService.requestPasswordReset(mail) + .orElseThrow(EmailNotFoundException::new) + ); + } + + /** + * POST /account/reset-password/finish : Finish to reset the password of the user + * + * @param keyAndPassword the generated key and the new password + * @throws InvalidPasswordException 400 (Bad Request) if the password is incorrect + * @throws RuntimeException 500 (Internal Server Error) if the password could not be reset + */ + @PostMapping(path = "/account/reset-password/finish") + public void finishPasswordReset(@RequestBody KeyAndPasswordVM keyAndPassword) { + if (!checkPasswordLength(keyAndPassword.getNewPassword())) { + throw new InvalidPasswordException(); + } + Optional user = + userService.completePasswordReset(keyAndPassword.getNewPassword(), keyAndPassword.getKey()); + + if (!user.isPresent()) { + throw new InternalServerErrorException("No user was found for this reset key"); + } + } + + private static boolean checkPasswordLength(String password) { + return !StringUtils.isEmpty(password) && + password.length() >= ManagedUserVM.PASSWORD_MIN_LENGTH && + password.length() <= ManagedUserVM.PASSWORD_MAX_LENGTH; + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/AuditResource.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/AuditResource.java new file mode 100644 index 000000000000..ebcdc42f64eb --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/AuditResource.java @@ -0,0 +1,77 @@ +package com.baeldung.jhipster6.web.rest; + +import com.baeldung.jhipster6.service.AuditEventService; +import com.baeldung.jhipster6.web.rest.util.PaginationUtil; + +import io.github.jhipster.web.util.ResponseUtil; +import org.springframework.boot.actuate.audit.AuditEvent; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.time.LocalDate; +import java.time.ZoneId; +import java.util.List; + +/** + * REST controller for getting the audit events. + */ +@RestController +@RequestMapping("/management/audits") +public class AuditResource { + + private final AuditEventService auditEventService; + + public AuditResource(AuditEventService auditEventService) { + this.auditEventService = auditEventService; + } + + /** + * GET /audits : get a page of AuditEvents. + * + * @param pageable the pagination information + * @return the ResponseEntity with status 200 (OK) and the list of AuditEvents in body + */ + @GetMapping + public ResponseEntity> getAll(Pageable pageable) { + Page page = auditEventService.findAll(pageable); + HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(page, "/management/audits"); + return new ResponseEntity<>(page.getContent(), headers, HttpStatus.OK); + } + + /** + * GET /audits : get a page of AuditEvents between the fromDate and toDate. + * + * @param fromDate the start of the time period of AuditEvents to get + * @param toDate the end of the time period of AuditEvents to get + * @param pageable the pagination information + * @return the ResponseEntity with status 200 (OK) and the list of AuditEvents in body + */ + @GetMapping(params = {"fromDate", "toDate"}) + public ResponseEntity> getByDates( + @RequestParam(value = "fromDate") LocalDate fromDate, + @RequestParam(value = "toDate") LocalDate toDate, + Pageable pageable) { + + Page page = auditEventService.findByDates( + fromDate.atStartOfDay(ZoneId.systemDefault()).toInstant(), + toDate.atStartOfDay(ZoneId.systemDefault()).plusDays(1).toInstant(), + pageable); + HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(page, "/management/audits"); + return new ResponseEntity<>(page.getContent(), headers, HttpStatus.OK); + } + + /** + * GET /audits/:id : get an AuditEvent by id. + * + * @param id the id of the entity to get + * @return the ResponseEntity with status 200 (OK) and the AuditEvent in body, or status 404 (Not Found) + */ + @GetMapping("/{id:.+}") + public ResponseEntity get(@PathVariable Long id) { + return ResponseUtil.wrapOrNotFound(auditEventService.find(id)); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/BookResource.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/BookResource.java new file mode 100644 index 000000000000..584216b51d3b --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/BookResource.java @@ -0,0 +1,118 @@ +package com.baeldung.jhipster6.web.rest; +import com.baeldung.jhipster6.service.BookService; +import com.baeldung.jhipster6.web.rest.errors.BadRequestAlertException; +import com.baeldung.jhipster6.web.rest.util.HeaderUtil; +import com.baeldung.jhipster6.service.dto.BookDTO; +import io.github.jhipster.web.util.ResponseUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.net.URI; +import java.net.URISyntaxException; + +import java.util.List; +import java.util.Optional; + +/** + * REST controller for managing Book. + */ +@RestController +@RequestMapping("/api") +public class BookResource { + + private final Logger log = LoggerFactory.getLogger(BookResource.class); + + private static final String ENTITY_NAME = "book"; + + private final BookService bookService; + + public BookResource(BookService bookService) { + this.bookService = bookService; + } + + /** + * POST /books : Create a new book. + * + * @param bookDTO the bookDTO to create + * @return the ResponseEntity with status 201 (Created) and with body the new bookDTO, or with status 400 (Bad Request) if the book has already an ID + * @throws URISyntaxException if the Location URI syntax is incorrect + */ + @PostMapping("/books") + public ResponseEntity createBook(@Valid @RequestBody BookDTO bookDTO) throws URISyntaxException { + log.debug("REST request to save Book : {}", bookDTO); + if (bookDTO.getId() != null) { + throw new BadRequestAlertException("A new book cannot already have an ID", ENTITY_NAME, "idexists"); + } + BookDTO result = bookService.save(bookDTO); + return ResponseEntity.created(new URI("/api/books/" + result.getId())) + .headers(HeaderUtil.createEntityCreationAlert(ENTITY_NAME, result.getId().toString())) + .body(result); + } + + /** + * PUT /books : Updates an existing book. + * + * @param bookDTO the bookDTO to update + * @return the ResponseEntity with status 200 (OK) and with body the updated bookDTO, + * or with status 400 (Bad Request) if the bookDTO is not valid, + * or with status 500 (Internal Server Error) if the bookDTO couldn't be updated + * @throws URISyntaxException if the Location URI syntax is incorrect + */ + @PutMapping("/books") + public ResponseEntity updateBook(@Valid @RequestBody BookDTO bookDTO) throws URISyntaxException { + log.debug("REST request to update Book : {}", bookDTO); + if (bookDTO.getId() == null) { + throw new BadRequestAlertException("Invalid id", ENTITY_NAME, "idnull"); + } + BookDTO result = bookService.save(bookDTO); + return ResponseEntity.ok() + .headers(HeaderUtil.createEntityUpdateAlert(ENTITY_NAME, bookDTO.getId().toString())) + .body(result); + } + + /** + * GET /books : get all the books. + * + * @return the ResponseEntity with status 200 (OK) and the list of books in body + */ + @GetMapping("/books") + public List getAllBooks() { + log.debug("REST request to get all Books"); + return bookService.findAll(); + } + + /** + * GET /books/:id : get the "id" book. + * + * @param id the id of the bookDTO to retrieve + * @return the ResponseEntity with status 200 (OK) and with body the bookDTO, or with status 404 (Not Found) + */ + @GetMapping("/books/{id}") + public ResponseEntity getBook(@PathVariable Long id) { + log.debug("REST request to get Book : {}", id); + Optional bookDTO = bookService.findOne(id); + return ResponseUtil.wrapOrNotFound(bookDTO); + } + + /** + * DELETE /books/:id : delete the "id" book. + * + * @param id the id of the bookDTO to delete + * @return the ResponseEntity with status 200 (OK) + */ + @DeleteMapping("/books/{id}") + public ResponseEntity deleteBook(@PathVariable Long id) { + log.debug("REST request to delete Book : {}", id); + bookService.delete(id); + return ResponseEntity.ok().headers(HeaderUtil.createEntityDeletionAlert(ENTITY_NAME, id.toString())).build(); + } + + @GetMapping("/books/purchase/{id}") + public ResponseEntity purchase(@PathVariable Long id) { + Optional bookDTO = bookService.purchase(id); + return ResponseUtil.wrapOrNotFound(bookDTO); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/ClientForwardController.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/ClientForwardController.java new file mode 100644 index 000000000000..a524d90fc087 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/ClientForwardController.java @@ -0,0 +1,17 @@ +package com.baeldung.jhipster6.web.rest; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; + +@Controller +public class ClientForwardController { + + /** + * Forwards any unmapped paths (except those containing a period) to the client {@code index.html}. + * @return forward to client {@code index.html}. + */ + @GetMapping(value = "/**/{path:[^\\.]*}") + public String forward() { + return "forward:/"; + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/LogsResource.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/LogsResource.java new file mode 100644 index 000000000000..76d71d23d01b --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/LogsResource.java @@ -0,0 +1,36 @@ +package com.baeldung.jhipster6.web.rest; + +import com.baeldung.jhipster6.web.rest.vm.LoggerVM; + +import ch.qos.logback.classic.Level; +import ch.qos.logback.classic.LoggerContext; +import org.slf4j.LoggerFactory; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * Controller for view and managing Log Level at runtime. + */ +@RestController +@RequestMapping("/management") +public class LogsResource { + + @GetMapping("/logs") + public List getList() { + LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); + return context.getLoggerList() + .stream() + .map(LoggerVM::new) + .collect(Collectors.toList()); + } + + @PutMapping("/logs") + @ResponseStatus(HttpStatus.NO_CONTENT) + public void changeLevel(@RequestBody LoggerVM jsonLogger) { + LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); + context.getLogger(jsonLogger.getName()).setLevel(Level.valueOf(jsonLogger.getLevel())); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/UserJWTController.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/UserJWTController.java new file mode 100644 index 000000000000..1bb647d2ef5e --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/UserJWTController.java @@ -0,0 +1,71 @@ +package com.baeldung.jhipster6.web.rest; + +import com.baeldung.jhipster6.security.jwt.JWTFilter; +import com.baeldung.jhipster6.security.jwt.TokenProvider; +import com.baeldung.jhipster6.web.rest.vm.LoginVM; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; + +/** + * Controller to authenticate users. + */ +@RestController +@RequestMapping("/api") +public class UserJWTController { + + private final TokenProvider tokenProvider; + + private final AuthenticationManager authenticationManager; + + public UserJWTController(TokenProvider tokenProvider, AuthenticationManager authenticationManager) { + this.tokenProvider = tokenProvider; + this.authenticationManager = authenticationManager; + } + + @PostMapping("/authenticate") + public ResponseEntity authorize(@Valid @RequestBody LoginVM loginVM) { + + UsernamePasswordAuthenticationToken authenticationToken = + new UsernamePasswordAuthenticationToken(loginVM.getUsername(), loginVM.getPassword()); + + Authentication authentication = this.authenticationManager.authenticate(authenticationToken); + SecurityContextHolder.getContext().setAuthentication(authentication); + boolean rememberMe = (loginVM.isRememberMe() == null) ? false : loginVM.isRememberMe(); + String jwt = tokenProvider.createToken(authentication, rememberMe); + HttpHeaders httpHeaders = new HttpHeaders(); + httpHeaders.add(JWTFilter.AUTHORIZATION_HEADER, "Bearer " + jwt); + return new ResponseEntity<>(new JWTToken(jwt), httpHeaders, HttpStatus.OK); + } + + /** + * Object to return as body in JWT Authentication. + */ + static class JWTToken { + + private String idToken; + + JWTToken(String idToken) { + this.idToken = idToken; + } + + @JsonProperty("id_token") + String getIdToken() { + return idToken; + } + + void setIdToken(String idToken) { + this.idToken = idToken; + } + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/UserResource.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/UserResource.java new file mode 100644 index 000000000000..36fa8f319cf9 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/UserResource.java @@ -0,0 +1,183 @@ +package com.baeldung.jhipster6.web.rest; + +import com.baeldung.jhipster6.config.Constants; +import com.baeldung.jhipster6.domain.User; +import com.baeldung.jhipster6.repository.UserRepository; +import com.baeldung.jhipster6.security.AuthoritiesConstants; +import com.baeldung.jhipster6.service.MailService; +import com.baeldung.jhipster6.service.UserService; +import com.baeldung.jhipster6.service.dto.UserDTO; +import com.baeldung.jhipster6.web.rest.errors.BadRequestAlertException; +import com.baeldung.jhipster6.web.rest.errors.EmailAlreadyUsedException; +import com.baeldung.jhipster6.web.rest.errors.LoginAlreadyUsedException; +import com.baeldung.jhipster6.web.rest.util.HeaderUtil; +import com.baeldung.jhipster6.web.rest.util.PaginationUtil; +import io.github.jhipster.web.util.ResponseUtil; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.net.URI; +import java.net.URISyntaxException; +import java.util.*; + +/** + * REST controller for managing users. + *

+ * This class accesses the User entity, and needs to fetch its collection of authorities. + *

+ * For a normal use-case, it would be better to have an eager relationship between User and Authority, + * and send everything to the client side: there would be no View Model and DTO, a lot less code, and an outer-join + * which would be good for performance. + *

+ * We use a View Model and a DTO for 3 reasons: + *

    + *
  • We want to keep a lazy association between the user and the authorities, because people will + * quite often do relationships with the user, and we don't want them to get the authorities all + * the time for nothing (for performance reasons). This is the #1 goal: we should not impact our users' + * application because of this use-case.
  • + *
  • Not having an outer join causes n+1 requests to the database. This is not a real issue as + * we have by default a second-level cache. This means on the first HTTP call we do the n+1 requests, + * but then all authorities come from the cache, so in fact it's much better than doing an outer join + * (which will get lots of data from the database, for each HTTP call).
  • + *
  • As this manages users, for security reasons, we'd rather have a DTO layer.
  • + *
+ *

+ * Another option would be to have a specific JPA entity graph to handle this case. + */ +@RestController +@RequestMapping("/api") +public class UserResource { + + private final Logger log = LoggerFactory.getLogger(UserResource.class); + + private final UserService userService; + + private final UserRepository userRepository; + + private final MailService mailService; + + public UserResource(UserService userService, UserRepository userRepository, MailService mailService) { + + this.userService = userService; + this.userRepository = userRepository; + this.mailService = mailService; + } + + /** + * POST /users : Creates a new user. + *

+ * Creates a new user if the login and email are not already used, and sends an + * mail with an activation link. + * The user needs to be activated on creation. + * + * @param userDTO the user to create + * @return the ResponseEntity with status 201 (Created) and with body the new user, or with status 400 (Bad Request) if the login or email is already in use + * @throws URISyntaxException if the Location URI syntax is incorrect + * @throws BadRequestAlertException 400 (Bad Request) if the login or email is already in use + */ + @PostMapping("/users") + @PreAuthorize("hasRole(\"" + AuthoritiesConstants.ADMIN + "\")") + public ResponseEntity createUser(@Valid @RequestBody UserDTO userDTO) throws URISyntaxException { + log.debug("REST request to save User : {}", userDTO); + + if (userDTO.getId() != null) { + throw new BadRequestAlertException("A new user cannot already have an ID", "userManagement", "idexists"); + // Lowercase the user login before comparing with database + } else if (userRepository.findOneByLogin(userDTO.getLogin().toLowerCase()).isPresent()) { + throw new LoginAlreadyUsedException(); + } else if (userRepository.findOneByEmailIgnoreCase(userDTO.getEmail()).isPresent()) { + throw new EmailAlreadyUsedException(); + } else { + User newUser = userService.createUser(userDTO); + mailService.sendCreationEmail(newUser); + return ResponseEntity.created(new URI("/api/users/" + newUser.getLogin())) + .headers(HeaderUtil.createAlert( "A user is created with identifier " + newUser.getLogin(), newUser.getLogin())) + .body(newUser); + } + } + + /** + * PUT /users : Updates an existing User. + * + * @param userDTO the user to update + * @return the ResponseEntity with status 200 (OK) and with body the updated user + * @throws EmailAlreadyUsedException 400 (Bad Request) if the email is already in use + * @throws LoginAlreadyUsedException 400 (Bad Request) if the login is already in use + */ + @PutMapping("/users") + @PreAuthorize("hasRole(\"" + AuthoritiesConstants.ADMIN + "\")") + public ResponseEntity updateUser(@Valid @RequestBody UserDTO userDTO) { + log.debug("REST request to update User : {}", userDTO); + Optional existingUser = userRepository.findOneByEmailIgnoreCase(userDTO.getEmail()); + if (existingUser.isPresent() && (!existingUser.get().getId().equals(userDTO.getId()))) { + throw new EmailAlreadyUsedException(); + } + existingUser = userRepository.findOneByLogin(userDTO.getLogin().toLowerCase()); + if (existingUser.isPresent() && (!existingUser.get().getId().equals(userDTO.getId()))) { + throw new LoginAlreadyUsedException(); + } + Optional updatedUser = userService.updateUser(userDTO); + + return ResponseUtil.wrapOrNotFound(updatedUser, + HeaderUtil.createAlert("A user is updated with identifier " + userDTO.getLogin(), userDTO.getLogin())); + } + + /** + * GET /users : get all users. + * + * @param pageable the pagination information + * @return the ResponseEntity with status 200 (OK) and with body all users + */ + @GetMapping("/users") + public ResponseEntity> getAllUsers(Pageable pageable) { + final Page page = userService.getAllManagedUsers(pageable); + HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(page, "/api/users"); + return new ResponseEntity<>(page.getContent(), headers, HttpStatus.OK); + } + + /** + * @return a string list of the all of the roles + */ + @GetMapping("/users/authorities") + @PreAuthorize("hasRole(\"" + AuthoritiesConstants.ADMIN + "\")") + public List getAuthorities() { + return userService.getAuthorities(); + } + + /** + * GET /users/:login : get the "login" user. + * + * @param login the login of the user to find + * @return the ResponseEntity with status 200 (OK) and with body the "login" user, or with status 404 (Not Found) + */ + @GetMapping("/users/{login:" + Constants.LOGIN_REGEX + "}") + public ResponseEntity getUser(@PathVariable String login) { + log.debug("REST request to get User : {}", login); + return ResponseUtil.wrapOrNotFound( + userService.getUserWithAuthoritiesByLogin(login) + .map(UserDTO::new)); + } + + /** + * DELETE /users/:login : delete the "login" User. + * + * @param login the login of the user to delete + * @return the ResponseEntity with status 200 (OK) + */ + @DeleteMapping("/users/{login:" + Constants.LOGIN_REGEX + "}") + @PreAuthorize("hasRole(\"" + AuthoritiesConstants.ADMIN + "\")") + public ResponseEntity deleteUser(@PathVariable String login) { + log.debug("REST request to delete User: {}", login); + userService.deleteUser(login); + return ResponseEntity.ok().headers(HeaderUtil.createAlert( "A user is deleted with identifier " + login, login)).build(); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/errors/BadRequestAlertException.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/errors/BadRequestAlertException.java new file mode 100644 index 000000000000..a2e71a28bfbf --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/errors/BadRequestAlertException.java @@ -0,0 +1,42 @@ +package com.baeldung.jhipster6.web.rest.errors; + +import org.zalando.problem.AbstractThrowableProblem; +import org.zalando.problem.Status; + +import java.net.URI; +import java.util.HashMap; +import java.util.Map; + +public class BadRequestAlertException extends AbstractThrowableProblem { + + private static final long serialVersionUID = 1L; + + private final String entityName; + + private final String errorKey; + + public BadRequestAlertException(String defaultMessage, String entityName, String errorKey) { + this(ErrorConstants.DEFAULT_TYPE, defaultMessage, entityName, errorKey); + } + + public BadRequestAlertException(URI type, String defaultMessage, String entityName, String errorKey) { + super(type, defaultMessage, Status.BAD_REQUEST, null, null, null, getAlertParameters(entityName, errorKey)); + this.entityName = entityName; + this.errorKey = errorKey; + } + + public String getEntityName() { + return entityName; + } + + public String getErrorKey() { + return errorKey; + } + + private static Map getAlertParameters(String entityName, String errorKey) { + Map parameters = new HashMap<>(); + parameters.put("message", "error." + errorKey); + parameters.put("params", entityName); + return parameters; + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/errors/CustomParameterizedException.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/errors/CustomParameterizedException.java new file mode 100644 index 000000000000..31add5c58880 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/errors/CustomParameterizedException.java @@ -0,0 +1,54 @@ +package com.baeldung.jhipster6.web.rest.errors; + +import org.zalando.problem.AbstractThrowableProblem; + +import java.util.HashMap; +import java.util.Map; + +import static org.zalando.problem.Status.BAD_REQUEST; + +/** + * Custom, parameterized exception, which can be translated on the client side. + * For example: + * + *

+ * throw new CustomParameterizedException("myCustomError", "hello", "world");
+ * 
+ * + * Can be translated with: + * + *
+ * "error.myCustomError" :  "The server says {{param0}} to {{param1}}"
+ * 
+ */ +public class CustomParameterizedException extends AbstractThrowableProblem { + + private static final long serialVersionUID = 1L; + + private static final String PARAM = "param"; + + public CustomParameterizedException(String message, String... params) { + this(message, toParamMap(params)); + } + + public CustomParameterizedException(String message, Map paramMap) { + super(ErrorConstants.PARAMETERIZED_TYPE, "Parameterized Exception", BAD_REQUEST, null, null, null, toProblemParameters(message, paramMap)); + } + + public static Map toParamMap(String... params) { + Map paramMap = new HashMap<>(); + if (params != null && params.length > 0) { + for (int i = 0; i < params.length; i++) { + paramMap.put(PARAM + i, params[i]); + } + } + return paramMap; + } + + public static Map toProblemParameters(String message, Map paramMap) { + Map parameters = new HashMap<>(); + parameters.put("message", message); + parameters.put("params", paramMap); + return parameters; + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/errors/EmailAlreadyUsedException.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/errors/EmailAlreadyUsedException.java new file mode 100644 index 000000000000..01e358b76c72 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/errors/EmailAlreadyUsedException.java @@ -0,0 +1,10 @@ +package com.baeldung.jhipster6.web.rest.errors; + +public class EmailAlreadyUsedException extends BadRequestAlertException { + + private static final long serialVersionUID = 1L; + + public EmailAlreadyUsedException() { + super(ErrorConstants.EMAIL_ALREADY_USED_TYPE, "Email is already in use!", "userManagement", "emailexists"); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/errors/EmailNotFoundException.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/errors/EmailNotFoundException.java new file mode 100644 index 000000000000..51a7857f325a --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/errors/EmailNotFoundException.java @@ -0,0 +1,13 @@ +package com.baeldung.jhipster6.web.rest.errors; + +import org.zalando.problem.AbstractThrowableProblem; +import org.zalando.problem.Status; + +public class EmailNotFoundException extends AbstractThrowableProblem { + + private static final long serialVersionUID = 1L; + + public EmailNotFoundException() { + super(ErrorConstants.EMAIL_NOT_FOUND_TYPE, "Email address not registered", Status.BAD_REQUEST); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/errors/ErrorConstants.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/errors/ErrorConstants.java new file mode 100644 index 000000000000..b6a256dda09e --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/errors/ErrorConstants.java @@ -0,0 +1,21 @@ +package com.baeldung.jhipster6.web.rest.errors; + +import java.net.URI; + +public final class ErrorConstants { + + public static final String ERR_CONCURRENCY_FAILURE = "error.concurrencyFailure"; + public static final String ERR_VALIDATION = "error.validation"; + public static final String PROBLEM_BASE_URL = "https://www.jhipster.tech/problem"; + public static final URI DEFAULT_TYPE = URI.create(PROBLEM_BASE_URL + "/problem-with-message"); + public static final URI CONSTRAINT_VIOLATION_TYPE = URI.create(PROBLEM_BASE_URL + "/constraint-violation"); + public static final URI PARAMETERIZED_TYPE = URI.create(PROBLEM_BASE_URL + "/parameterized"); + public static final URI ENTITY_NOT_FOUND_TYPE = URI.create(PROBLEM_BASE_URL + "/entity-not-found"); + public static final URI INVALID_PASSWORD_TYPE = URI.create(PROBLEM_BASE_URL + "/invalid-password"); + public static final URI EMAIL_ALREADY_USED_TYPE = URI.create(PROBLEM_BASE_URL + "/email-already-used"); + public static final URI LOGIN_ALREADY_USED_TYPE = URI.create(PROBLEM_BASE_URL + "/login-already-used"); + public static final URI EMAIL_NOT_FOUND_TYPE = URI.create(PROBLEM_BASE_URL + "/email-not-found"); + + private ErrorConstants() { + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/errors/ExceptionTranslator.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/errors/ExceptionTranslator.java new file mode 100644 index 000000000000..d9e5697c77cc --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/errors/ExceptionTranslator.java @@ -0,0 +1,112 @@ +package com.baeldung.jhipster6.web.rest.errors; + +import com.baeldung.jhipster6.web.rest.util.HeaderUtil; + +import org.springframework.dao.ConcurrencyFailureException; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.context.request.NativeWebRequest; +import org.zalando.problem.DefaultProblem; +import org.zalando.problem.Problem; +import org.zalando.problem.ProblemBuilder; +import org.zalando.problem.Status; +import org.zalando.problem.spring.web.advice.ProblemHandling; +import org.zalando.problem.violations.ConstraintViolationProblem; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import javax.servlet.http.HttpServletRequest; +import java.util.List; +import java.util.NoSuchElementException; +import java.util.stream.Collectors; + +/** + * Controller advice to translate the server side exceptions to client-friendly json structures. + * The error response follows RFC7807 - Problem Details for HTTP APIs (https://tools.ietf.org/html/rfc7807) + */ +@ControllerAdvice +public class ExceptionTranslator implements ProblemHandling { + + private static final String FIELD_ERRORS_KEY = "fieldErrors"; + private static final String MESSAGE_KEY = "message"; + private static final String PATH_KEY = "path"; + private static final String VIOLATIONS_KEY = "violations"; + + /** + * Post-process the Problem payload to add the message key for the front-end if needed + */ + @Override + public ResponseEntity process(@Nullable ResponseEntity entity, NativeWebRequest request) { + if (entity == null) { + return entity; + } + Problem problem = entity.getBody(); + if (!(problem instanceof ConstraintViolationProblem || problem instanceof DefaultProblem)) { + return entity; + } + ProblemBuilder builder = Problem.builder() + .withType(Problem.DEFAULT_TYPE.equals(problem.getType()) ? ErrorConstants.DEFAULT_TYPE : problem.getType()) + .withStatus(problem.getStatus()) + .withTitle(problem.getTitle()) + .with(PATH_KEY, request.getNativeRequest(HttpServletRequest.class).getRequestURI()); + + if (problem instanceof ConstraintViolationProblem) { + builder + .with(VIOLATIONS_KEY, ((ConstraintViolationProblem) problem).getViolations()) + .with(MESSAGE_KEY, ErrorConstants.ERR_VALIDATION); + } else { + builder + .withCause(((DefaultProblem) problem).getCause()) + .withDetail(problem.getDetail()) + .withInstance(problem.getInstance()); + problem.getParameters().forEach(builder::with); + if (!problem.getParameters().containsKey(MESSAGE_KEY) && problem.getStatus() != null) { + builder.with(MESSAGE_KEY, "error.http." + problem.getStatus().getStatusCode()); + } + } + return new ResponseEntity<>(builder.build(), entity.getHeaders(), entity.getStatusCode()); + } + + @Override + public ResponseEntity handleMethodArgumentNotValid(MethodArgumentNotValidException ex, @Nonnull NativeWebRequest request) { + BindingResult result = ex.getBindingResult(); + List fieldErrors = result.getFieldErrors().stream() + .map(f -> new FieldErrorVM(f.getObjectName(), f.getField(), f.getCode())) + .collect(Collectors.toList()); + + Problem problem = Problem.builder() + .withType(ErrorConstants.CONSTRAINT_VIOLATION_TYPE) + .withTitle("Method argument not valid") + .withStatus(defaultConstraintViolationStatus()) + .with(MESSAGE_KEY, ErrorConstants.ERR_VALIDATION) + .with(FIELD_ERRORS_KEY, fieldErrors) + .build(); + return create(ex, problem, request); + } + + @ExceptionHandler + public ResponseEntity handleNoSuchElementException(NoSuchElementException ex, NativeWebRequest request) { + Problem problem = Problem.builder() + .withStatus(Status.NOT_FOUND) + .with(MESSAGE_KEY, ErrorConstants.ENTITY_NOT_FOUND_TYPE) + .build(); + return create(ex, problem, request); + } + + @ExceptionHandler + public ResponseEntity handleBadRequestAlertException(BadRequestAlertException ex, NativeWebRequest request) { + return create(ex, request, HeaderUtil.createFailureAlert(ex.getEntityName(), ex.getErrorKey(), ex.getMessage())); + } + + @ExceptionHandler + public ResponseEntity handleConcurrencyFailure(ConcurrencyFailureException ex, NativeWebRequest request) { + Problem problem = Problem.builder() + .withStatus(Status.CONFLICT) + .with(MESSAGE_KEY, ErrorConstants.ERR_CONCURRENCY_FAILURE) + .build(); + return create(ex, problem, request); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/errors/FieldErrorVM.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/errors/FieldErrorVM.java new file mode 100644 index 000000000000..7c2504a3fcdc --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/errors/FieldErrorVM.java @@ -0,0 +1,33 @@ +package com.baeldung.jhipster6.web.rest.errors; + +import java.io.Serializable; + +public class FieldErrorVM implements Serializable { + + private static final long serialVersionUID = 1L; + + private final String objectName; + + private final String field; + + private final String message; + + public FieldErrorVM(String dto, String field, String message) { + this.objectName = dto; + this.field = field; + this.message = message; + } + + public String getObjectName() { + return objectName; + } + + public String getField() { + return field; + } + + public String getMessage() { + return message; + } + +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/errors/InternalServerErrorException.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/errors/InternalServerErrorException.java new file mode 100644 index 000000000000..844f315bfde2 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/errors/InternalServerErrorException.java @@ -0,0 +1,16 @@ +package com.baeldung.jhipster6.web.rest.errors; + +import org.zalando.problem.AbstractThrowableProblem; +import org.zalando.problem.Status; + +/** + * Simple exception with a message, that returns an Internal Server Error code. + */ +public class InternalServerErrorException extends AbstractThrowableProblem { + + private static final long serialVersionUID = 1L; + + public InternalServerErrorException(String message) { + super(ErrorConstants.DEFAULT_TYPE, message, Status.INTERNAL_SERVER_ERROR); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/errors/InvalidPasswordException.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/errors/InvalidPasswordException.java new file mode 100644 index 000000000000..02d4b4da0179 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/errors/InvalidPasswordException.java @@ -0,0 +1,13 @@ +package com.baeldung.jhipster6.web.rest.errors; + +import org.zalando.problem.AbstractThrowableProblem; +import org.zalando.problem.Status; + +public class InvalidPasswordException extends AbstractThrowableProblem { + + private static final long serialVersionUID = 1L; + + public InvalidPasswordException() { + super(ErrorConstants.INVALID_PASSWORD_TYPE, "Incorrect password", Status.BAD_REQUEST); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/errors/LoginAlreadyUsedException.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/errors/LoginAlreadyUsedException.java new file mode 100644 index 000000000000..fabd4d153d1b --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/errors/LoginAlreadyUsedException.java @@ -0,0 +1,10 @@ +package com.baeldung.jhipster6.web.rest.errors; + +public class LoginAlreadyUsedException extends BadRequestAlertException { + + private static final long serialVersionUID = 1L; + + public LoginAlreadyUsedException() { + super(ErrorConstants.LOGIN_ALREADY_USED_TYPE, "Login name already used!", "userManagement", "userexists"); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/errors/package-info.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/errors/package-info.java new file mode 100644 index 000000000000..b791df1268ae --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/errors/package-info.java @@ -0,0 +1,6 @@ +/** + * Specific errors used with Zalando's "problem-spring-web" library. + * + * More information on https://github.com/zalando/problem-spring-web + */ +package com.baeldung.jhipster6.web.rest.errors; diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/package-info.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/package-info.java new file mode 100644 index 000000000000..f5d106c277a4 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/package-info.java @@ -0,0 +1,4 @@ +/** + * Spring MVC REST controllers. + */ +package com.baeldung.jhipster6.web.rest; diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/util/HeaderUtil.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/util/HeaderUtil.java new file mode 100644 index 000000000000..8546b979563c --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/util/HeaderUtil.java @@ -0,0 +1,45 @@ +package com.baeldung.jhipster6.web.rest.util; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.HttpHeaders; + +/** + * Utility class for HTTP headers creation. + */ +public final class HeaderUtil { + + private static final Logger log = LoggerFactory.getLogger(HeaderUtil.class); + + private static final String APPLICATION_NAME = "bookstoreApp"; + + private HeaderUtil() { + } + + public static HttpHeaders createAlert(String message, String param) { + HttpHeaders headers = new HttpHeaders(); + headers.add("X-" + APPLICATION_NAME + "-alert", message); + headers.add("X-" + APPLICATION_NAME + "-params", param); + return headers; + } + + public static HttpHeaders createEntityCreationAlert(String entityName, String param) { + return createAlert("A new " + entityName + " is created with identifier " + param, param); + } + + public static HttpHeaders createEntityUpdateAlert(String entityName, String param) { + return createAlert("A " + entityName + " is updated with identifier " + param, param); + } + + public static HttpHeaders createEntityDeletionAlert(String entityName, String param) { + return createAlert("A " + entityName + " is deleted with identifier " + param, param); + } + + public static HttpHeaders createFailureAlert(String entityName, String errorKey, String defaultMessage) { + log.error("Entity processing failed, {}", defaultMessage); + HttpHeaders headers = new HttpHeaders(); + headers.add("X-" + APPLICATION_NAME + "-error", defaultMessage); + headers.add("X-" + APPLICATION_NAME + "-params", entityName); + return headers; + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/util/PaginationUtil.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/util/PaginationUtil.java new file mode 100644 index 000000000000..7c28d9348609 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/util/PaginationUtil.java @@ -0,0 +1,45 @@ +package com.baeldung.jhipster6.web.rest.util; + +import org.springframework.data.domain.Page; +import org.springframework.http.HttpHeaders; +import org.springframework.web.util.UriComponentsBuilder; + +/** + * Utility class for handling pagination. + * + *

+ * Pagination uses the same principles as the GitHub API, + * and follow RFC 5988 (Link header). + */ +public final class PaginationUtil { + + private PaginationUtil() { + } + + public static HttpHeaders generatePaginationHttpHeaders(Page page, String baseUrl) { + + HttpHeaders headers = new HttpHeaders(); + headers.add("X-Total-Count", Long.toString(page.getTotalElements())); + String link = ""; + if ((page.getNumber() + 1) < page.getTotalPages()) { + link = "<" + generateUri(baseUrl, page.getNumber() + 1, page.getSize()) + ">; rel=\"next\","; + } + // prev link + if ((page.getNumber()) > 0) { + link += "<" + generateUri(baseUrl, page.getNumber() - 1, page.getSize()) + ">; rel=\"prev\","; + } + // last and first link + int lastPage = 0; + if (page.getTotalPages() > 0) { + lastPage = page.getTotalPages() - 1; + } + link += "<" + generateUri(baseUrl, lastPage, page.getSize()) + ">; rel=\"last\","; + link += "<" + generateUri(baseUrl, 0, page.getSize()) + ">; rel=\"first\""; + headers.add(HttpHeaders.LINK, link); + return headers; + } + + private static String generateUri(String baseUrl, int page, int size) { + return UriComponentsBuilder.fromUriString(baseUrl).queryParam("page", page).queryParam("size", size).toUriString(); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/vm/KeyAndPasswordVM.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/vm/KeyAndPasswordVM.java new file mode 100644 index 000000000000..b2b1f91b0ab7 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/vm/KeyAndPasswordVM.java @@ -0,0 +1,27 @@ +package com.baeldung.jhipster6.web.rest.vm; + +/** + * View Model object for storing the user's key and password. + */ +public class KeyAndPasswordVM { + + private String key; + + private String newPassword; + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public String getNewPassword() { + return newPassword; + } + + public void setNewPassword(String newPassword) { + this.newPassword = newPassword; + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/vm/LoggerVM.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/vm/LoggerVM.java new file mode 100644 index 000000000000..d7ca167edf8f --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/vm/LoggerVM.java @@ -0,0 +1,46 @@ +package com.baeldung.jhipster6.web.rest.vm; + +import ch.qos.logback.classic.Logger; + +/** + * View Model object for storing a Logback logger. + */ +public class LoggerVM { + + private String name; + + private String level; + + public LoggerVM(Logger logger) { + this.name = logger.getName(); + this.level = logger.getEffectiveLevel().toString(); + } + + public LoggerVM() { + // Empty public constructor used by Jackson. + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getLevel() { + return level; + } + + public void setLevel(String level) { + this.level = level; + } + + @Override + public String toString() { + return "LoggerVM{" + + "name='" + name + '\'' + + ", level='" + level + '\'' + + '}'; + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/vm/LoginVM.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/vm/LoginVM.java new file mode 100644 index 000000000000..40ede22b3a66 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/vm/LoginVM.java @@ -0,0 +1,52 @@ +package com.baeldung.jhipster6.web.rest.vm; + +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; + +/** + * View Model object for storing a user's credentials. + */ +public class LoginVM { + + @NotNull + @Size(min = 1, max = 50) + private String username; + + @NotNull + @Size(min = ManagedUserVM.PASSWORD_MIN_LENGTH, max = ManagedUserVM.PASSWORD_MAX_LENGTH) + private String password; + + private Boolean rememberMe; + + 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; + } + + public Boolean isRememberMe() { + return rememberMe; + } + + public void setRememberMe(Boolean rememberMe) { + this.rememberMe = rememberMe; + } + + @Override + public String toString() { + return "LoginVM{" + + "username='" + username + '\'' + + ", rememberMe=" + rememberMe + + '}'; + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/vm/ManagedUserVM.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/vm/ManagedUserVM.java new file mode 100644 index 000000000000..2746ca6de049 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/vm/ManagedUserVM.java @@ -0,0 +1,35 @@ +package com.baeldung.jhipster6.web.rest.vm; + +import com.baeldung.jhipster6.service.dto.UserDTO; +import javax.validation.constraints.Size; + +/** + * View Model extending the UserDTO, which is meant to be used in the user management UI. + */ +public class ManagedUserVM extends UserDTO { + + public static final int PASSWORD_MIN_LENGTH = 4; + + public static final int PASSWORD_MAX_LENGTH = 100; + + @Size(min = PASSWORD_MIN_LENGTH, max = PASSWORD_MAX_LENGTH) + private String password; + + public ManagedUserVM() { + // Empty constructor needed for Jackson. + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + @Override + public String toString() { + return "ManagedUserVM{" + + "} " + super.toString(); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/vm/package-info.java b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/vm/package-info.java new file mode 100644 index 000000000000..af0defc392d4 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/java/com/baeldung/jhipster6/web/rest/vm/package-info.java @@ -0,0 +1,4 @@ +/** + * View Models used by Spring MVC REST controllers. + */ +package com.baeldung.jhipster6.web.rest.vm; diff --git a/jhipster-6/bookstore-monolith/src/main/jib/entrypoint.sh b/jhipster-6/bookstore-monolith/src/main/jib/entrypoint.sh new file mode 100644 index 000000000000..b3c454101172 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/jib/entrypoint.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +echo "The application will start in ${JHIPSTER_SLEEP}s..." && sleep ${JHIPSTER_SLEEP} +exec java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -cp /app/resources/:/app/classes/:/app/libs/* "com.baeldung.jhipster5.BookstoreApp" "$@" diff --git a/jhipster-6/bookstore-monolith/src/main/resources/.h2.server.properties b/jhipster-6/bookstore-monolith/src/main/resources/.h2.server.properties new file mode 100644 index 000000000000..99767b3a8a6b --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/resources/.h2.server.properties @@ -0,0 +1,5 @@ +#H2 Server Properties +0=JHipster H2 (Memory)|org.h2.Driver|jdbc\:h2\:mem\:bookstore|Bookstore +webAllowOthers=true +webPort=8082 +webSSL=false diff --git a/jhipster-6/bookstore-monolith/src/main/resources/banner.txt b/jhipster-6/bookstore-monolith/src/main/resources/banner.txt new file mode 100644 index 000000000000..e0bc55aaffa9 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/resources/banner.txt @@ -0,0 +1,10 @@ + + ${AnsiColor.GREEN} ██╗${AnsiColor.RED} ██╗ ██╗ ████████╗ ███████╗ ██████╗ ████████╗ ████████╗ ███████╗ + ${AnsiColor.GREEN} ██║${AnsiColor.RED} ██║ ██║ ╚══██╔══╝ ██╔═══██╗ ██╔════╝ ╚══██╔══╝ ██╔═════╝ ██╔═══██╗ + ${AnsiColor.GREEN} ██║${AnsiColor.RED} ████████║ ██║ ███████╔╝ ╚█████╗ ██║ ██████╗ ███████╔╝ + ${AnsiColor.GREEN}██╗ ██║${AnsiColor.RED} ██╔═══██║ ██║ ██╔════╝ ╚═══██╗ ██║ ██╔═══╝ ██╔══██║ + ${AnsiColor.GREEN}╚██████╔╝${AnsiColor.RED} ██║ ██║ ████████╗ ██║ ██████╔╝ ██║ ████████╗ ██║ ╚██╗ + ${AnsiColor.GREEN} ╚═════╝ ${AnsiColor.RED} ╚═╝ ╚═╝ ╚═══════╝ ╚═╝ ╚═════╝ ╚═╝ ╚═══════╝ ╚═╝ ╚═╝ + +${AnsiColor.BRIGHT_BLUE}:: JHipster 🤓 :: Running Spring Boot ${spring-boot.version} :: +:: https://www.jhipster.tech ::${AnsiColor.DEFAULT} diff --git a/jhipster-6/bookstore-monolith/src/main/resources/config/application-dev.yml b/jhipster-6/bookstore-monolith/src/main/resources/config/application-dev.yml new file mode 100644 index 000000000000..64742feb450c --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/resources/config/application-dev.yml @@ -0,0 +1,122 @@ +# =================================================================== +# Spring Boot configuration for the "dev" profile. +# +# This configuration overrides the application.yml file. +# +# More information on profiles: https://www.jhipster.tech/profiles/ +# More information on configuration properties: https://www.jhipster.tech/common-application-properties/ +# =================================================================== + +# =================================================================== +# Standard Spring Boot properties. +# Full reference is available at: +# http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html +# =================================================================== + +logging: + level: + ROOT: DEBUG + io.github.jhipster: DEBUG + com.baeldung.jhipster5: DEBUG + +spring: + profiles: + active: dev + include: + - swagger + # Uncomment to activate TLS for the dev profile + #- tls + devtools: + restart: + enabled: true + additional-exclude: .h2.server.properties + livereload: + enabled: false # we use Webpack dev server + BrowserSync for livereload + jackson: + serialization: + indent-output: true + datasource: + type: com.zaxxer.hikari.HikariDataSource + url: jdbc:h2:mem:bookstore;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE + username: Bookstore + password: + hikari: + poolName: Hikari + auto-commit: false + h2: + console: + enabled: false + jpa: + database-platform: io.github.jhipster.domain.util.FixedH2Dialect + database: H2 + show-sql: true + properties: + hibernate.id.new_generator_mappings: true + hibernate.connection.provider_disables_autocommit: true + hibernate.cache.use_second_level_cache: false + hibernate.cache.use_query_cache: false + hibernate.generate_statistics: true + liquibase: + contexts: dev + mail: + host: localhost + port: 25 + username: + password: + messages: + cache-duration: PT1S # 1 second, see the ISO 8601 standard + thymeleaf: + cache: false + +server: + port: 8080 + +# =================================================================== +# JHipster specific properties +# +# Full reference is available at: https://www.jhipster.tech/common-application-properties/ +# =================================================================== + +jhipster: + http: + version: V_1_1 # To use HTTP/2 you will need to activate TLS (see application-tls.yml) + # CORS is only enabled by default with the "dev" profile, so BrowserSync can access the API + cors: + allowed-origins: "*" + allowed-methods: "*" + allowed-headers: "*" + exposed-headers: "Authorization,Link,X-Total-Count" + allow-credentials: true + max-age: 1800 + security: + authentication: + jwt: + # This token must be encoded using Base64 and be at least 256 bits long (you can type `openssl rand -base64 64` on your command line to generate a 512 bits one) + base64-secret: NDJmOTVlZjI2NzhlZDRjNmVkNTM1NDE2NjkyNDljZDJiNzBlMjI5YmZjMjY3MzdjZmZlMjI3NjE4OTRkNzc5MWYzNDNlYWMzYmJjOWRmMjc5ZWQyZTZmOWZkOTMxZWZhNWE1MTVmM2U2NjFmYjhlNDc2Y2Q3NzliMGY0YzFkNmI= + # Token is valid 24 hours + token-validity-in-seconds: 86400 + token-validity-in-seconds-for-remember-me: 2592000 + mail: # specific JHipster mail property, for standard properties see MailProperties + from: Bookstore@localhost + base-url: http://127.0.0.1:8080 + metrics: + logs: # Reports metrics in the logs + enabled: false + report-frequency: 60 # in seconds + logging: + logstash: # Forward logs to logstash over a socket, used by LoggingConfiguration + enabled: false + host: localhost + port: 5000 + queue-size: 512 + +# =================================================================== +# Application specific properties +# Add your own application properties here, see the ApplicationProperties class +# to have type-safe configuration, like in the JHipsterProperties above +# +# More documentation is available at: +# https://www.jhipster.tech/common-application-properties/ +# =================================================================== + +# application: diff --git a/jhipster-6/bookstore-monolith/src/main/resources/config/application-prod.yml b/jhipster-6/bookstore-monolith/src/main/resources/config/application-prod.yml new file mode 100644 index 000000000000..d698099fac11 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/resources/config/application-prod.yml @@ -0,0 +1,133 @@ +# =================================================================== +# Spring Boot configuration for the "prod" profile. +# +# This configuration overrides the application.yml file. +# +# More information on profiles: https://www.jhipster.tech/profiles/ +# More information on configuration properties: https://www.jhipster.tech/common-application-properties/ +# =================================================================== + +# =================================================================== +# Standard Spring Boot properties. +# Full reference is available at: +# http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html +# =================================================================== + +logging: + level: + ROOT: INFO + com.baeldung.jhipster5: INFO + io.github.jhipster: INFO + +spring: + devtools: + restart: + enabled: false + livereload: + enabled: false + datasource: + type: com.zaxxer.hikari.HikariDataSource + url: jdbc:mysql://localhost:3306/Bookstore?useUnicode=true&characterEncoding=utf8&useSSL=false&useLegacyDatetimeCode=false&serverTimezone=UTC + username: root + password: + hikari: + poolName: Hikari + auto-commit: false + data-source-properties: + cachePrepStmts: true + prepStmtCacheSize: 250 + prepStmtCacheSqlLimit: 2048 + useServerPrepStmts: true + jpa: + database-platform: org.hibernate.dialect.MySQL5InnoDBDialect + database: MYSQL + show-sql: false + properties: + hibernate.id.new_generator_mappings: true + hibernate.connection.provider_disables_autocommit: true + hibernate.cache.use_second_level_cache: false + hibernate.cache.use_query_cache: false + hibernate.generate_statistics: true + liquibase: + contexts: prod + mail: + host: localhost + port: 25 + username: + password: + thymeleaf: + cache: true + +# =================================================================== +# To enable TLS in production, generate a certificate using: +# keytool -genkey -alias bookstore -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 3650 +# +# You can also use Let's Encrypt: +# https://maximilian-boehm.com/hp2121/Create-a-Java-Keystore-JKS-from-Let-s-Encrypt-Certificates.htm +# +# Then, modify the server.ssl properties so your "server" configuration looks like: +# +# server: +# port: 443 +# ssl: +# key-store: classpath:config/tls/keystore.p12 +# key-store-password: password +# key-store-type: PKCS12 +# key-alias: bookstore +# # The ciphers suite enforce the security by deactivating some old and deprecated SSL cipher, this list was tested against SSL Labs (https://www.ssllabs.com/ssltest/) +# ciphers: TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 ,TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 ,TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 ,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_DHE_RSA_WITH_AES_128_CBC_SHA256,TLS_DHE_RSA_WITH_AES_128_CBC_SHA,TLS_DHE_RSA_WITH_AES_256_CBC_SHA256,TLS_DHE_RSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_AES_128_GCM_SHA256,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA,TLS_RSA_WITH_CAMELLIA_256_CBC_SHA,TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA,TLS_RSA_WITH_CAMELLIA_128_CBC_SHA +# =================================================================== +server: + port: 8080 + compression: + enabled: true + mime-types: text/html,text/xml,text/plain,text/css, application/javascript, application/json + min-response-size: 1024 + +# =================================================================== +# JHipster specific properties +# +# Full reference is available at: https://www.jhipster.tech/common-application-properties/ +# =================================================================== + +jhipster: + http: + version: V_1_1 # To use HTTP/2 you will need SSL support (see above the "server.ssl" configuration) + cache: # Used by the CachingHttpHeadersFilter + timeToLiveInDays: 1461 + security: + authentication: + jwt: + # This token must be encoded using Base64 and be at least 256 bits long (you can type `openssl rand -base64 64` on your command line to generate a 512 bits one) + # As this is the PRODUCTION configuration, you MUST change the default key, and store it securely: + # - In the JHipster Registry (which includes a Spring Cloud Config server) + # - In a separate `application-prod.yml` file, in the same folder as your executable WAR file + # - In the `JHIPSTER_SECURITY_AUTHENTICATION_JWT_BASE64_SECRET` environment variable + base64-secret: NDJmOTVlZjI2NzhlZDRjNmVkNTM1NDE2NjkyNDljZDJiNzBlMjI5YmZjMjY3MzdjZmZlMjI3NjE4OTRkNzc5MWYzNDNlYWMzYmJjOWRmMjc5ZWQyZTZmOWZkOTMxZWZhNWE1MTVmM2U2NjFmYjhlNDc2Y2Q3NzliMGY0YzFkNmI= + # Token is valid 24 hours + token-validity-in-seconds: 86400 + token-validity-in-seconds-for-remember-me: 2592000 + mail: # specific JHipster mail property, for standard properties see MailProperties + from: Bookstore@localhost + base-url: http://my-server-url-to-change # Modify according to your server's URL + metrics: + logs: # Reports metrics in the logs + enabled: false + report-frequency: 60 # in seconds + logging: + logstash: # Forward logs to logstash over a socket, used by LoggingConfiguration + enabled: false + host: localhost + port: 5000 + queue-size: 512 + +# =================================================================== +# Application specific properties +# Add your own application properties here, see the ApplicationProperties class +# to have type-safe configuration, like in the JHipsterProperties above +# +# More documentation is available at: +# https://www.jhipster.tech/common-application-properties/ +# =================================================================== + +# application: diff --git a/jhipster-6/bookstore-monolith/src/main/resources/config/application-tls.yml b/jhipster-6/bookstore-monolith/src/main/resources/config/application-tls.yml new file mode 100644 index 000000000000..c4e0565cc770 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/resources/config/application-tls.yml @@ -0,0 +1,20 @@ +# =================================================================== +# Activate this profile to enable TLS and HTTP/2. +# +# JHipster has generated a self-signed certificate, which will be used to encrypt traffic. +# As your browser will not understand this certificate, you will need to import it. +# +# Another (easiest) solution with Chrome is to enable the "allow-insecure-localhost" flag +# at chrome://flags/#allow-insecure-localhost +# =================================================================== +server: + ssl: + key-store: classpath:config/tls/keystore.p12 + key-store-password: password + key-store-type: PKCS12 + key-alias: selfsigned + ciphers: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, TLS_DHE_RSA_WITH_AES_128_GCM_SHA256, TLS_DHE_RSA_WITH_AES_256_GCM_SHA384, TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_RSA_WITH_AES_256_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA256, TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 + enabled-protocols: TLSv1.2 +jhipster: + http: + version: V_2_0 diff --git a/jhipster-6/bookstore-monolith/src/main/resources/config/application.yml b/jhipster-6/bookstore-monolith/src/main/resources/config/application.yml new file mode 100644 index 000000000000..5b28b7f00d25 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/resources/config/application.yml @@ -0,0 +1,140 @@ +# =================================================================== +# Spring Boot configuration. +# +# This configuration will be overridden by the Spring profile you use, +# for example application-dev.yml if you use the "dev" profile. +# +# More information on profiles: https://www.jhipster.tech/profiles/ +# More information on configuration properties: https://www.jhipster.tech/common-application-properties/ +# =================================================================== + +# =================================================================== +# Standard Spring Boot properties. +# Full reference is available at: +# http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html +# =================================================================== + +management: + endpoints: + web: + base-path: /management + exposure: + include: ["configprops", "env", "health", "info", "threaddump", "logfile", "jhi-metrics", "prometheus" ] + endpoint: + health: + show-details: when-authorized + jhi-metrics: + enabled: true + info: + git: + mode: full + health: + mail: + enabled: false # When using the MailService, configure an SMTP server and set this to true + metrics: + export: + # Prometheus is the default metrics backend + prometheus: + enabled: true + step: 60 + binders: + jvm: + enabled: true + processor: + enabled: true + uptime: + enabled: true + logback: + enabled: true + files: + enabled: true + integration: + enabled: true + distribution: + percentiles-histogram: + all: true + percentiles: + all: 0, 0.5, 0.75, 0.95, 0.99, 1.0 + web: + server: + auto-time-requests: true + +spring: + application: + name: Bookstore + profiles: + # The commented value for `active` can be replaced with valid Spring profiles to load. + # Otherwise, it will be filled in by maven when building the WAR file + # Either way, it can be overridden by `--spring.profiles.active` value passed in the commandline or `-Dspring.profiles.active` set in `JAVA_OPTS` + active: #spring.profiles.active# + jpa: + open-in-view: false + properties: + hibernate.jdbc.time_zone: UTC + hibernate: + ddl-auto: none + naming: + physical-strategy: org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy + implicit-strategy: org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy + messages: + basename: i18n/messages + mvc: + favicon: + enabled: false + thymeleaf: + mode: HTML + +server: + servlet: + session: + cookie: + http-only: true + +# Properties to be exposed on the /info management endpoint +info: + # Comma separated list of profiles that will trigger the ribbon to show + display-ribbon-on-profiles: "dev" + +# =================================================================== +# JHipster specific properties +# +# Full reference is available at: https://www.jhipster.tech/common-application-properties/ +# =================================================================== + +jhipster: + async: + core-pool-size: 2 + max-pool-size: 50 + queue-capacity: 10000 + # By default CORS is disabled. Uncomment to enable. + #cors: + #allowed-origins: "*" + #allowed-methods: "*" + #allowed-headers: "*" + #exposed-headers: "Authorization,Link,X-Total-Count" + #allow-credentials: true + #max-age: 1800 + mail: + from: Bookstore@localhost + swagger: + default-include-pattern: /api/.* + title: Bookstore API + description: Bookstore API documentation + version: 0.0.1 + terms-of-service-url: + contact-name: + contact-url: + contact-email: + license: + license-url: + +# =================================================================== +# Application specific properties +# Add your own application properties here, see the ApplicationProperties class +# to have type-safe configuration, like in the JHipsterProperties above +# +# More documentation is available at: +# https://www.jhipster.tech/common-application-properties/ +# =================================================================== + +# application: diff --git a/jhipster-6/bookstore-monolith/src/main/resources/config/liquibase/authorities.csv b/jhipster-6/bookstore-monolith/src/main/resources/config/liquibase/authorities.csv new file mode 100644 index 000000000000..af5c6dfa186d --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/resources/config/liquibase/authorities.csv @@ -0,0 +1,3 @@ +name +ROLE_ADMIN +ROLE_USER diff --git a/jhipster-6/bookstore-monolith/src/main/resources/config/liquibase/changelog/00000000000000_initial_schema.xml b/jhipster-6/bookstore-monolith/src/main/resources/config/liquibase/changelog/00000000000000_initial_schema.xml new file mode 100644 index 000000000000..dd4b01d48744 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/resources/config/liquibase/changelog/00000000000000_initial_schema.xml @@ -0,0 +1,152 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/jhipster-6/bookstore-monolith/src/main/resources/config/liquibase/changelog/20190319124041_added_entity_Book.xml b/jhipster-6/bookstore-monolith/src/main/resources/config/liquibase/changelog/20190319124041_added_entity_Book.xml new file mode 100644 index 000000000000..f040387cf155 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/resources/config/liquibase/changelog/20190319124041_added_entity_Book.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/jhipster-6/bookstore-monolith/src/main/resources/config/liquibase/data/authority.csv b/jhipster-6/bookstore-monolith/src/main/resources/config/liquibase/data/authority.csv new file mode 100644 index 000000000000..af5c6dfa186d --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/resources/config/liquibase/data/authority.csv @@ -0,0 +1,3 @@ +name +ROLE_ADMIN +ROLE_USER diff --git a/jhipster-6/bookstore-monolith/src/main/resources/config/liquibase/data/user.csv b/jhipster-6/bookstore-monolith/src/main/resources/config/liquibase/data/user.csv new file mode 100644 index 000000000000..b25922b69906 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/resources/config/liquibase/data/user.csv @@ -0,0 +1,5 @@ +id;login;password_hash;first_name;last_name;email;image_url;activated;lang_key;created_by;last_modified_by +1;system;$2a$10$mE.qmcV0mFU5NcKh73TZx.z4ueI/.bDWbj0T1BYyqP481kGGarKLG;System;System;system@localhost;;true;en;system;system +2;anonymoususer;$2a$10$j8S5d7Sr7.8VTOYNviDPOeWX8KcYILUVJBsYV83Y5NtECayypx9lO;Anonymous;User;anonymous@localhost;;true;en;system;system +3;admin;$2a$10$gSAhZrxMllrbgj/kkK9UceBPpChGWJA7SYIb1Mqo.n5aNLq1/oRrC;Administrator;Administrator;admin@localhost;;true;en;system;system +4;user;$2a$10$VEjxo0jq2YG9Rbk2HmX9S.k1uZBGYUHdUcid3g/vfiEl7lwWgOH/K;User;User;user@localhost;;true;en;system;system diff --git a/jhipster-6/bookstore-monolith/src/main/resources/config/liquibase/data/user_authority.csv b/jhipster-6/bookstore-monolith/src/main/resources/config/liquibase/data/user_authority.csv new file mode 100644 index 000000000000..06c5feeeeace --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/resources/config/liquibase/data/user_authority.csv @@ -0,0 +1,6 @@ +user_id;authority_name +1;ROLE_ADMIN +1;ROLE_USER +3;ROLE_ADMIN +3;ROLE_USER +4;ROLE_USER diff --git a/jhipster-6/bookstore-monolith/src/main/resources/config/liquibase/master.xml b/jhipster-6/bookstore-monolith/src/main/resources/config/liquibase/master.xml new file mode 100644 index 000000000000..e045ee01000b --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/resources/config/liquibase/master.xml @@ -0,0 +1,11 @@ + + + + + + + + diff --git a/jhipster-6/bookstore-monolith/src/main/resources/config/liquibase/users.csv b/jhipster-6/bookstore-monolith/src/main/resources/config/liquibase/users.csv new file mode 100644 index 000000000000..b25922b69906 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/resources/config/liquibase/users.csv @@ -0,0 +1,5 @@ +id;login;password_hash;first_name;last_name;email;image_url;activated;lang_key;created_by;last_modified_by +1;system;$2a$10$mE.qmcV0mFU5NcKh73TZx.z4ueI/.bDWbj0T1BYyqP481kGGarKLG;System;System;system@localhost;;true;en;system;system +2;anonymoususer;$2a$10$j8S5d7Sr7.8VTOYNviDPOeWX8KcYILUVJBsYV83Y5NtECayypx9lO;Anonymous;User;anonymous@localhost;;true;en;system;system +3;admin;$2a$10$gSAhZrxMllrbgj/kkK9UceBPpChGWJA7SYIb1Mqo.n5aNLq1/oRrC;Administrator;Administrator;admin@localhost;;true;en;system;system +4;user;$2a$10$VEjxo0jq2YG9Rbk2HmX9S.k1uZBGYUHdUcid3g/vfiEl7lwWgOH/K;User;User;user@localhost;;true;en;system;system diff --git a/jhipster-6/bookstore-monolith/src/main/resources/config/liquibase/users_authorities.csv b/jhipster-6/bookstore-monolith/src/main/resources/config/liquibase/users_authorities.csv new file mode 100644 index 000000000000..06c5feeeeace --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/resources/config/liquibase/users_authorities.csv @@ -0,0 +1,6 @@ +user_id;authority_name +1;ROLE_ADMIN +1;ROLE_USER +3;ROLE_ADMIN +3;ROLE_USER +4;ROLE_USER diff --git a/jhipster-6/bookstore-monolith/src/main/resources/config/tls/keystore.p12 b/jhipster-6/bookstore-monolith/src/main/resources/config/tls/keystore.p12 new file mode 100644 index 0000000000000000000000000000000000000000..364fad7435e01dddac14970a653b7a82c9e83089 GIT binary patch literal 2607 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 C+svr| literal 0 HcmV?d00001 diff --git a/jhipster-6/bookstore-monolith/src/main/resources/i18n/messages.properties b/jhipster-6/bookstore-monolith/src/main/resources/i18n/messages.properties new file mode 100644 index 000000000000..52a60093c5aa --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/resources/i18n/messages.properties @@ -0,0 +1,21 @@ +# Error page +error.title=Your request cannot be processed +error.subtitle=Sorry, an error has occurred. +error.status=Status: +error.message=Message: + +# Activation email +email.activation.title=Bookstore account activation +email.activation.greeting=Dear {0} +email.activation.text1=Your Bookstore account has been created, please click on the URL below to activate it: +email.activation.text2=Regards, +email.signature=Bookstore Team. + +# Creation email +email.creation.text1=Your Bookstore account has been created, please click on the URL below to access it: + +# Reset email +email.reset.title=Bookstore password reset +email.reset.greeting=Dear {0} +email.reset.text1=For your Bookstore account a password reset was requested, please click on the URL below to reset it: +email.reset.text2=Regards, diff --git a/jhipster-6/bookstore-monolith/src/main/resources/logback-spring.xml b/jhipster-6/bookstore-monolith/src/main/resources/logback-spring.xml new file mode 100644 index 000000000000..b0e2d9aa957f --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/resources/logback-spring.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + diff --git a/jhipster-6/bookstore-monolith/src/main/resources/templates/error.html b/jhipster-6/bookstore-monolith/src/main/resources/templates/error.html new file mode 100644 index 000000000000..08616bcf1ed2 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/resources/templates/error.html @@ -0,0 +1,163 @@ + + + + + + Your request cannot be processed + + + +

+

Your request cannot be processed :(

+ +

Sorry, an error has occurred.

+ + Status:  ()
+ + Message: 
+
+ + + +
+ + diff --git a/jhipster-6/bookstore-monolith/src/main/resources/templates/mail/activationEmail.html b/jhipster-6/bookstore-monolith/src/main/resources/templates/mail/activationEmail.html new file mode 100644 index 000000000000..cb021d8e6a13 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/resources/templates/mail/activationEmail.html @@ -0,0 +1,25 @@ + + + + JHipster activation + + + + +

+ Dear +

+

+ Your JHipster account has been created, please click on the URL below to activate it: +

+

+ Activation link +

+

+ Regards, +
+ JHipster. +

+ + diff --git a/jhipster-6/bookstore-monolith/src/main/resources/templates/mail/creationEmail.html b/jhipster-6/bookstore-monolith/src/main/resources/templates/mail/creationEmail.html new file mode 100644 index 000000000000..dc0cff588380 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/resources/templates/mail/creationEmail.html @@ -0,0 +1,25 @@ + + + + JHipster creation + + + + +

+ Dear +

+

+ Your JHipster account has been created, please click on the URL below to access it: +

+

+ Login link +

+

+ Regards, +
+ JHipster. +

+ + diff --git a/jhipster-6/bookstore-monolith/src/main/resources/templates/mail/passwordResetEmail.html b/jhipster-6/bookstore-monolith/src/main/resources/templates/mail/passwordResetEmail.html new file mode 100644 index 000000000000..f44511265b7f --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/resources/templates/mail/passwordResetEmail.html @@ -0,0 +1,25 @@ + + + + JHipster password reset + + + + +

+ Dear +

+

+ For your JHipster account a password reset was requested, please click on the URL below to reset it: +

+

+ Login link +

+

+ Regards, +
+ JHipster. +

+ + diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/404.html b/jhipster-6/bookstore-monolith/src/main/webapp/404.html new file mode 100644 index 000000000000..3fdc0bee1a87 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/404.html @@ -0,0 +1,61 @@ + + + + + Page Not Found + + + + + +

Page Not Found

+

Sorry, but the page you were trying to view does not exist.

+ + + diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/WEB-INF/web.xml b/jhipster-6/bookstore-monolith/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 000000000000..f1611b515aed --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,13 @@ + + + + + html + text/html;charset=utf-8 + + + diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/account/account.module.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/account/account.module.ts new file mode 100644 index 000000000000..a167cab1c24f --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/account/account.module.ts @@ -0,0 +1,30 @@ +import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; +import { RouterModule } from '@angular/router'; + +import { BookstoreSharedModule } from 'app/shared'; + +import { + PasswordStrengthBarComponent, + RegisterComponent, + ActivateComponent, + PasswordComponent, + PasswordResetInitComponent, + PasswordResetFinishComponent, + SettingsComponent, + accountState +} from './'; + +@NgModule({ + imports: [BookstoreSharedModule, RouterModule.forChild(accountState)], + declarations: [ + ActivateComponent, + RegisterComponent, + PasswordComponent, + PasswordStrengthBarComponent, + PasswordResetInitComponent, + PasswordResetFinishComponent, + SettingsComponent + ], + schemas: [CUSTOM_ELEMENTS_SCHEMA] +}) +export class BookstoreAccountModule {} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/account/account.route.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/account/account.route.ts new file mode 100644 index 000000000000..cba5d407160c --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/account/account.route.ts @@ -0,0 +1,12 @@ +import { Routes } from '@angular/router'; + +import { settingsRoute } from './'; + +const ACCOUNT_ROUTES = [settingsRoute]; + +export const accountState: Routes = [ + { + path: '', + children: ACCOUNT_ROUTES + } +]; diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/account/activate/activate.component.html b/jhipster-6/bookstore-monolith/src/main/webapp/app/account/activate/activate.component.html new file mode 100644 index 000000000000..c7078ede8682 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/account/activate/activate.component.html @@ -0,0 +1,17 @@ +
+
+
+

Activation

+ +
+ Your user account has been activated. Please + sign in. +
+ +
+ Your user could not be activated. Please use the registration form to sign up. +
+ +
+
+
diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/account/activate/activate.component.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/account/activate/activate.component.ts new file mode 100644 index 000000000000..5c398073c3a4 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/account/activate/activate.component.ts @@ -0,0 +1,37 @@ +import { Component, OnInit } from '@angular/core'; +import { NgbModalRef } from '@ng-bootstrap/ng-bootstrap'; +import { ActivatedRoute } from '@angular/router'; + +import { LoginModalService } from 'app/core'; +import { ActivateService } from './activate.service'; + +@Component({ + selector: 'jhi-activate', + templateUrl: './activate.component.html' +}) +export class ActivateComponent implements OnInit { + error: string; + success: string; + modalRef: NgbModalRef; + + constructor(private activateService: ActivateService, private loginModalService: LoginModalService, private route: ActivatedRoute) {} + + ngOnInit() { + this.route.queryParams.subscribe(params => { + this.activateService.get(params['key']).subscribe( + () => { + this.error = null; + this.success = 'OK'; + }, + () => { + this.success = null; + this.error = 'ERROR'; + } + ); + }); + } + + login() { + this.modalRef = this.loginModalService.open(); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/account/activate/activate.route.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/account/activate/activate.route.ts new file mode 100644 index 000000000000..b415b17a1839 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/account/activate/activate.route.ts @@ -0,0 +1,12 @@ +import { Route } from '@angular/router'; + +import { ActivateComponent } from './activate.component'; + +export const activateRoute: Route = { + path: 'activate', + component: ActivateComponent, + data: { + authorities: [], + pageTitle: 'Activation' + } +}; diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/account/activate/activate.service.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/account/activate/activate.service.ts new file mode 100644 index 000000000000..adade9efada7 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/account/activate/activate.service.ts @@ -0,0 +1,16 @@ +import { Injectable } from '@angular/core'; +import { HttpClient, HttpParams } from '@angular/common/http'; +import { Observable } from 'rxjs'; + +import { SERVER_API_URL } from 'app/app.constants'; + +@Injectable({ providedIn: 'root' }) +export class ActivateService { + constructor(private http: HttpClient) {} + + get(key: string): Observable { + return this.http.get(SERVER_API_URL + 'api/activate', { + params: new HttpParams().set('key', key) + }); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/account/index.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/account/index.ts new file mode 100644 index 000000000000..aeada0551ce1 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/account/index.ts @@ -0,0 +1,19 @@ +export * from './activate/activate.component'; +export * from './activate/activate.service'; +export * from './activate/activate.route'; +export * from './password/password.component'; +export * from './password/password-strength-bar.component'; +export * from './password/password.service'; +export * from './password/password.route'; +export * from './password-reset/finish/password-reset-finish.component'; +export * from './password-reset/finish/password-reset-finish.service'; +export * from './password-reset/finish/password-reset-finish.route'; +export * from './password-reset/init/password-reset-init.component'; +export * from './password-reset/init/password-reset-init.service'; +export * from './password-reset/init/password-reset-init.route'; +export * from './register/register.component'; +export * from './register/register.service'; +export * from './register/register.route'; +export * from './settings/settings.component'; +export * from './settings/settings.route'; +export * from './account.route'; diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.html b/jhipster-6/bookstore-monolith/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.html new file mode 100644 index 000000000000..6d6baea694a8 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.html @@ -0,0 +1,77 @@ +
+
+
+

Reset password

+ +
+ The password reset key is missing. +
+ +
+

Choose a new password

+
+ +
+

Your password couldn't be reset. Remember a password request is only valid for 24 hours.

+
+ +

+ Your password has been reset. Please + sign in. +

+ +
+ The password and its confirmation do not match! +
+ +
+
+
+ + +
+ + Your password is required. + + + Your password is required to be at least 4 characters. + + + Your password cannot be longer than 50 characters. + +
+ +
+ +
+ + +
+ + Your password confirmation is required. + + + Your password confirmation is required to be at least 4 characters. + + + Your password confirmation cannot be longer than 50 characters. + +
+
+ +
+
+ +
+
+
diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.ts new file mode 100644 index 000000000000..72aac25c962c --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.ts @@ -0,0 +1,65 @@ +import { Component, OnInit, AfterViewInit, Renderer, ElementRef } from '@angular/core'; +import { NgbModalRef } from '@ng-bootstrap/ng-bootstrap'; +import { ActivatedRoute } from '@angular/router'; + +import { LoginModalService } from 'app/core'; +import { PasswordResetFinishService } from './password-reset-finish.service'; + +@Component({ + selector: 'jhi-password-reset-finish', + templateUrl: './password-reset-finish.component.html' +}) +export class PasswordResetFinishComponent implements OnInit, AfterViewInit { + confirmPassword: string; + doNotMatch: string; + error: string; + keyMissing: boolean; + resetAccount: any; + success: string; + modalRef: NgbModalRef; + key: string; + + constructor( + private passwordResetFinishService: PasswordResetFinishService, + private loginModalService: LoginModalService, + private route: ActivatedRoute, + private elementRef: ElementRef, + private renderer: Renderer + ) {} + + ngOnInit() { + this.route.queryParams.subscribe(params => { + this.key = params['key']; + }); + this.resetAccount = {}; + this.keyMissing = !this.key; + } + + ngAfterViewInit() { + if (this.elementRef.nativeElement.querySelector('#password') != null) { + this.renderer.invokeElementMethod(this.elementRef.nativeElement.querySelector('#password'), 'focus', []); + } + } + + finishReset() { + this.doNotMatch = null; + this.error = null; + if (this.resetAccount.password !== this.confirmPassword) { + this.doNotMatch = 'ERROR'; + } else { + this.passwordResetFinishService.save({ key: this.key, newPassword: this.resetAccount.password }).subscribe( + () => { + this.success = 'OK'; + }, + () => { + this.success = null; + this.error = 'ERROR'; + } + ); + } + } + + login() { + this.modalRef = this.loginModalService.open(); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/account/password-reset/finish/password-reset-finish.route.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/account/password-reset/finish/password-reset-finish.route.ts new file mode 100644 index 000000000000..a09cba937769 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/account/password-reset/finish/password-reset-finish.route.ts @@ -0,0 +1,12 @@ +import { Route } from '@angular/router'; + +import { PasswordResetFinishComponent } from './password-reset-finish.component'; + +export const passwordResetFinishRoute: Route = { + path: 'reset/finish', + component: PasswordResetFinishComponent, + data: { + authorities: [], + pageTitle: 'Password' + } +}; diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/account/password-reset/finish/password-reset-finish.service.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/account/password-reset/finish/password-reset-finish.service.ts new file mode 100644 index 000000000000..706bdaa5b146 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/account/password-reset/finish/password-reset-finish.service.ts @@ -0,0 +1,14 @@ +import { Injectable } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import { Observable } from 'rxjs'; + +import { SERVER_API_URL } from 'app/app.constants'; + +@Injectable({ providedIn: 'root' }) +export class PasswordResetFinishService { + constructor(private http: HttpClient) {} + + save(keyAndPassword: any): Observable { + return this.http.post(SERVER_API_URL + 'api/account/reset-password/finish', keyAndPassword); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/account/password-reset/init/password-reset-init.component.html b/jhipster-6/bookstore-monolith/src/main/webapp/app/account/password-reset/init/password-reset-init.component.html new file mode 100644 index 000000000000..7fe7b0bdecf9 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/account/password-reset/init/password-reset-init.component.html @@ -0,0 +1,46 @@ +
+
+
+

Reset your password

+ +
+ Email address isn't registered! Please check and try again. +
+ +
+

Enter the email address you used to register.

+
+ +
+

Check your emails for details on how to reset your password.

+
+ +
+
+ + +
+ + Your email is required. + + + Your email is invalid. + + + Your email is required to be at least 5 characters. + + + Your email cannot be longer than 100 characters. + +
+
+ +
+
+
+
diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/account/password-reset/init/password-reset-init.component.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/account/password-reset/init/password-reset-init.component.ts new file mode 100644 index 000000000000..e32617341c7e --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/account/password-reset/init/password-reset-init.component.ts @@ -0,0 +1,43 @@ +import { Component, OnInit, AfterViewInit, Renderer, ElementRef } from '@angular/core'; +import { EMAIL_NOT_FOUND_TYPE } from 'app/shared'; +import { PasswordResetInitService } from './password-reset-init.service'; + +@Component({ + selector: 'jhi-password-reset-init', + templateUrl: './password-reset-init.component.html' +}) +export class PasswordResetInitComponent implements OnInit, AfterViewInit { + error: string; + errorEmailNotExists: string; + resetAccount: any; + success: string; + + constructor(private passwordResetInitService: PasswordResetInitService, private elementRef: ElementRef, private renderer: Renderer) {} + + ngOnInit() { + this.resetAccount = {}; + } + + ngAfterViewInit() { + this.renderer.invokeElementMethod(this.elementRef.nativeElement.querySelector('#email'), 'focus', []); + } + + requestReset() { + this.error = null; + this.errorEmailNotExists = null; + + this.passwordResetInitService.save(this.resetAccount.email).subscribe( + () => { + this.success = 'OK'; + }, + response => { + this.success = null; + if (response.status === 400 && response.error.type === EMAIL_NOT_FOUND_TYPE) { + this.errorEmailNotExists = 'ERROR'; + } else { + this.error = 'ERROR'; + } + } + ); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/account/password-reset/init/password-reset-init.route.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/account/password-reset/init/password-reset-init.route.ts new file mode 100644 index 000000000000..a1708c98b30b --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/account/password-reset/init/password-reset-init.route.ts @@ -0,0 +1,12 @@ +import { Route } from '@angular/router'; + +import { PasswordResetInitComponent } from './password-reset-init.component'; + +export const passwordResetInitRoute: Route = { + path: 'reset/request', + component: PasswordResetInitComponent, + data: { + authorities: [], + pageTitle: 'Password' + } +}; diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/account/password-reset/init/password-reset-init.service.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/account/password-reset/init/password-reset-init.service.ts new file mode 100644 index 000000000000..c24ccf94d2d4 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/account/password-reset/init/password-reset-init.service.ts @@ -0,0 +1,14 @@ +import { Injectable } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import { Observable } from 'rxjs'; + +import { SERVER_API_URL } from 'app/app.constants'; + +@Injectable({ providedIn: 'root' }) +export class PasswordResetInitService { + constructor(private http: HttpClient) {} + + save(mail: string): Observable { + return this.http.post(SERVER_API_URL + 'api/account/reset-password/init', mail); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/account/password/password-strength-bar.component.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/account/password/password-strength-bar.component.ts new file mode 100644 index 000000000000..4159fde88239 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/account/password/password-strength-bar.component.ts @@ -0,0 +1,85 @@ +import { Component, ElementRef, Input, Renderer } from '@angular/core'; + +@Component({ + selector: 'jhi-password-strength-bar', + template: ` +
+ Password strength: +
    +
  • +
  • +
  • +
  • +
  • +
+
+ `, + styleUrls: ['password-strength-bar.scss'] +}) +export class PasswordStrengthBarComponent { + colors = ['#F00', '#F90', '#FF0', '#9F0', '#0F0']; + + constructor(private renderer: Renderer, private elementRef: ElementRef) {} + + measureStrength(p: string): number { + let force = 0; + const regex = /[$-/:-?{-~!"^_`\[\]]/g; // " + const lowerLetters = /[a-z]+/.test(p); + const upperLetters = /[A-Z]+/.test(p); + const numbers = /[0-9]+/.test(p); + const symbols = regex.test(p); + + const flags = [lowerLetters, upperLetters, numbers, symbols]; + const passedMatches = flags.filter((isMatchedFlag: boolean) => { + return isMatchedFlag === true; + }).length; + + force += 2 * p.length + (p.length >= 10 ? 1 : 0); + force += passedMatches * 10; + + // penalty (short password) + force = p.length <= 6 ? Math.min(force, 10) : force; + + // penalty (poor variety of characters) + force = passedMatches === 1 ? Math.min(force, 10) : force; + force = passedMatches === 2 ? Math.min(force, 20) : force; + force = passedMatches === 3 ? Math.min(force, 40) : force; + + return force; + } + + getColor(s: number): any { + let idx = 0; + if (s <= 10) { + idx = 0; + } else if (s <= 20) { + idx = 1; + } else if (s <= 30) { + idx = 2; + } else if (s <= 40) { + idx = 3; + } else { + idx = 4; + } + return { idx: idx + 1, col: this.colors[idx] }; + } + + @Input() + set passwordToCheck(password: string) { + if (password) { + const c = this.getColor(this.measureStrength(password)); + const element = this.elementRef.nativeElement; + if (element.className) { + this.renderer.setElementClass(element, element.className, false); + } + const lis = element.getElementsByTagName('li'); + for (let i = 0; i < lis.length; i++) { + if (i < c.idx) { + this.renderer.setElementStyle(lis[i], 'backgroundColor', c.col); + } else { + this.renderer.setElementStyle(lis[i], 'backgroundColor', '#DDD'); + } + } + } + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/account/password/password-strength-bar.scss b/jhipster-6/bookstore-monolith/src/main/webapp/app/account/password/password-strength-bar.scss new file mode 100644 index 000000000000..9744b9b78478 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/account/password/password-strength-bar.scss @@ -0,0 +1,23 @@ +/* ========================================================================== +start Password strength bar style +========================================================================== */ +ul#strength { + display: inline; + list-style: none; + margin: 0; + margin-left: 15px; + padding: 0; + vertical-align: 2px; +} + +.point { + background: #ddd; + border-radius: 2px; + display: inline-block; + height: 5px; + margin-right: 1px; + width: 20px; + &:last-child { + margin: 0 !important; + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/account/password/password.component.html b/jhipster-6/bookstore-monolith/src/main/webapp/app/account/password/password.component.html new file mode 100644 index 000000000000..79fb60c3bc2e --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/account/password/password.component.html @@ -0,0 +1,77 @@ +
+
+
+

Password for [{{account.login}}]

+ +
+ Password changed! +
+
+ An error has occurred! The password could not be changed. +
+ +
+ The password and its confirmation do not match! +
+ +
+ +
+ + +
+ + Your password is required. + +
+
+
+ + +
+ + Your password is required. + + + Your password is required to be at least 4 characters. + + + Your password cannot be longer than 50 characters. + +
+ +
+
+ + +
+ + Your confirmation password is required. + + + Your confirmation password is required to be at least 4 characters. + + + Your confirmation password cannot be longer than 50 characters. + +
+
+ + +
+
+
+
diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/account/password/password.component.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/account/password/password.component.ts new file mode 100644 index 000000000000..3004effa57b4 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/account/password/password.component.ts @@ -0,0 +1,46 @@ +import { Component, OnInit } from '@angular/core'; + +import { AccountService } from 'app/core'; +import { PasswordService } from './password.service'; + +@Component({ + selector: 'jhi-password', + templateUrl: './password.component.html' +}) +export class PasswordComponent implements OnInit { + doNotMatch: string; + error: string; + success: string; + account: any; + currentPassword: string; + newPassword: string; + confirmPassword: string; + + constructor(private passwordService: PasswordService, private accountService: AccountService) {} + + ngOnInit() { + this.accountService.identity().then(account => { + this.account = account; + }); + } + + changePassword() { + if (this.newPassword !== this.confirmPassword) { + this.error = null; + this.success = null; + this.doNotMatch = 'ERROR'; + } else { + this.doNotMatch = null; + this.passwordService.save(this.newPassword, this.currentPassword).subscribe( + () => { + this.error = null; + this.success = 'OK'; + }, + () => { + this.success = null; + this.error = 'ERROR'; + } + ); + } + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/account/password/password.route.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/account/password/password.route.ts new file mode 100644 index 000000000000..4bb115fd4408 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/account/password/password.route.ts @@ -0,0 +1,14 @@ +import { Route } from '@angular/router'; + +import { UserRouteAccessService } from 'app/core'; +import { PasswordComponent } from './password.component'; + +export const passwordRoute: Route = { + path: 'password', + component: PasswordComponent, + data: { + authorities: ['ROLE_USER'], + pageTitle: 'Password' + }, + canActivate: [UserRouteAccessService] +}; diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/account/password/password.service.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/account/password/password.service.ts new file mode 100644 index 000000000000..028df7b0e453 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/account/password/password.service.ts @@ -0,0 +1,14 @@ +import { Injectable } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import { Observable } from 'rxjs'; + +import { SERVER_API_URL } from 'app/app.constants'; + +@Injectable({ providedIn: 'root' }) +export class PasswordService { + constructor(private http: HttpClient) {} + + save(newPassword: string, currentPassword: string): Observable { + return this.http.post(SERVER_API_URL + 'api/account/change-password', { currentPassword, newPassword }); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/account/register/register.component.html b/jhipster-6/bookstore-monolith/src/main/webapp/app/account/register/register.component.html new file mode 100644 index 000000000000..596f782828dd --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/account/register/register.component.html @@ -0,0 +1,124 @@ +
+
+
+

Registration

+ +
+ Registration saved! Please check your email for confirmation. +
+ +
+ Registration failed! Please try again later. +
+ +
+ Login name already registered! Please choose another one. +
+ +
+ Email is already in use! Please choose another one. +
+ +
+ The password and its confirmation do not match! +
+
+
+
+
+
+
+ + +
+ + Your username is required. + + + Your username is required to be at least 1 character. + + + Your username cannot be longer than 50 characters. + + + Your username can only contain letters and digits. + +
+
+
+ + +
+ + Your email is required. + + + Your email is invalid. + + + Your email is required to be at least 5 characters. + + + Your email cannot be longer than 100 characters. + +
+
+
+ + +
+ + Your password is required. + + + Your password is required to be at least 4 characters. + + + Your password cannot be longer than 50 characters. + +
+ +
+
+ + +
+ + Your confirmation password is required. + + + Your confirmation password is required to be at least 4 characters. + + + Your confirmation password cannot be longer than 50 characters. + +
+
+ + +
+

+
+ If you want to + sign in, you can try the default accounts:
- Administrator (login="admin" and password="admin")
- User (login="user" and password="user").
+
+
+
+
diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/account/register/register.component.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/account/register/register.component.ts new file mode 100644 index 000000000000..85244d2970b1 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/account/register/register.component.ts @@ -0,0 +1,71 @@ +import { Component, OnInit, AfterViewInit, Renderer, ElementRef } from '@angular/core'; +import { HttpErrorResponse } from '@angular/common/http'; +import { NgbModalRef } from '@ng-bootstrap/ng-bootstrap'; + +import { EMAIL_ALREADY_USED_TYPE, LOGIN_ALREADY_USED_TYPE } from 'app/shared'; +import { LoginModalService } from 'app/core'; +import { Register } from './register.service'; + +@Component({ + selector: 'jhi-register', + templateUrl: './register.component.html' +}) +export class RegisterComponent implements OnInit, AfterViewInit { + confirmPassword: string; + doNotMatch: string; + error: string; + errorEmailExists: string; + errorUserExists: string; + registerAccount: any; + success: boolean; + modalRef: NgbModalRef; + + constructor( + private loginModalService: LoginModalService, + private registerService: Register, + private elementRef: ElementRef, + private renderer: Renderer + ) {} + + ngOnInit() { + this.success = false; + this.registerAccount = {}; + } + + ngAfterViewInit() { + this.renderer.invokeElementMethod(this.elementRef.nativeElement.querySelector('#login'), 'focus', []); + } + + register() { + if (this.registerAccount.password !== this.confirmPassword) { + this.doNotMatch = 'ERROR'; + } else { + this.doNotMatch = null; + this.error = null; + this.errorUserExists = null; + this.errorEmailExists = null; + this.registerAccount.langKey = 'en'; + this.registerService.save(this.registerAccount).subscribe( + () => { + this.success = true; + }, + response => this.processError(response) + ); + } + } + + openLogin() { + this.modalRef = this.loginModalService.open(); + } + + private processError(response: HttpErrorResponse) { + this.success = null; + if (response.status === 400 && response.error.type === LOGIN_ALREADY_USED_TYPE) { + this.errorUserExists = 'ERROR'; + } else if (response.status === 400 && response.error.type === EMAIL_ALREADY_USED_TYPE) { + this.errorEmailExists = 'ERROR'; + } else { + this.error = 'ERROR'; + } + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/account/register/register.route.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/account/register/register.route.ts new file mode 100644 index 000000000000..626cd32ff928 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/account/register/register.route.ts @@ -0,0 +1,12 @@ +import { Route } from '@angular/router'; + +import { RegisterComponent } from './register.component'; + +export const registerRoute: Route = { + path: 'register', + component: RegisterComponent, + data: { + authorities: [], + pageTitle: 'Registration' + } +}; diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/account/register/register.service.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/account/register/register.service.ts new file mode 100644 index 000000000000..dfe6f1da6a4a --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/account/register/register.service.ts @@ -0,0 +1,14 @@ +import { Injectable } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import { Observable } from 'rxjs'; + +import { SERVER_API_URL } from 'app/app.constants'; + +@Injectable({ providedIn: 'root' }) +export class Register { + constructor(private http: HttpClient) {} + + save(account: any): Observable { + return this.http.post(SERVER_API_URL + 'api/register', account); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/account/settings/settings.component.html b/jhipster-6/bookstore-monolith/src/main/webapp/app/account/settings/settings.component.html new file mode 100644 index 000000000000..bae1bb67e68d --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/account/settings/settings.component.html @@ -0,0 +1,80 @@ +
+
+
+

User settings for [{{settingsAccount.login}}]

+ +
+ Settings saved! +
+ + + +
+ +
+ + +
+ + Your first name is required. + + + Your first name is required to be at least 1 character. + + + Your first name cannot be longer than 50 characters. + +
+
+
+ + +
+ + Your last name is required. + + + Your last name is required to be at least 1 character. + + + Your last name cannot be longer than 50 characters. + +
+
+
+ + +
+ + Your email is required. + + + Your email is invalid. + + + Your email is required to be at least 5 characters. + + + Your email cannot be longer than 100 characters. + +
+
+ +
+
+
+ +
diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/account/settings/settings.component.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/account/settings/settings.component.ts new file mode 100644 index 000000000000..92afaca79359 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/account/settings/settings.component.ts @@ -0,0 +1,50 @@ +import { Component, OnInit } from '@angular/core'; + +import { AccountService } from 'app/core'; + +@Component({ + selector: 'jhi-settings', + templateUrl: './settings.component.html' +}) +export class SettingsComponent implements OnInit { + error: string; + success: string; + settingsAccount: any; + languages: any[]; + + constructor(private accountService: AccountService) {} + + ngOnInit() { + this.accountService.identity().then(account => { + this.settingsAccount = this.copyAccount(account); + }); + } + + save() { + this.accountService.save(this.settingsAccount).subscribe( + () => { + this.error = null; + this.success = 'OK'; + this.accountService.identity(true).then(account => { + this.settingsAccount = this.copyAccount(account); + }); + }, + () => { + this.success = null; + this.error = 'ERROR'; + } + ); + } + + copyAccount(account) { + return { + activated: account.activated, + email: account.email, + firstName: account.firstName, + langKey: account.langKey, + lastName: account.lastName, + login: account.login, + imageUrl: account.imageUrl + }; + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/account/settings/settings.route.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/account/settings/settings.route.ts new file mode 100644 index 000000000000..3c9cf18e15a1 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/account/settings/settings.route.ts @@ -0,0 +1,14 @@ +import { Route } from '@angular/router'; + +import { UserRouteAccessService } from 'app/core'; +import { SettingsComponent } from './settings.component'; + +export const settingsRoute: Route = { + path: 'settings', + component: SettingsComponent, + data: { + authorities: ['ROLE_USER'], + pageTitle: 'Settings' + }, + canActivate: [UserRouteAccessService] +}; diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/admin.module.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/admin.module.ts new file mode 100644 index 000000000000..4e46e0fe13e2 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/admin.module.ts @@ -0,0 +1,43 @@ +import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { BookstoreSharedModule } from 'app/shared'; +/* jhipster-needle-add-admin-module-import - JHipster will add admin modules imports here */ + +import { + adminState, + AuditsComponent, + UserMgmtComponent, + UserMgmtDetailComponent, + UserMgmtUpdateComponent, + UserMgmtDeleteDialogComponent, + LogsComponent, + JhiMetricsMonitoringComponent, + JhiHealthModalComponent, + JhiHealthCheckComponent, + JhiConfigurationComponent, + JhiDocsComponent +} from './'; + +@NgModule({ + imports: [ + BookstoreSharedModule, + RouterModule.forChild(adminState) + /* jhipster-needle-add-admin-module - JHipster will add admin modules here */ + ], + declarations: [ + AuditsComponent, + UserMgmtComponent, + UserMgmtDetailComponent, + UserMgmtUpdateComponent, + UserMgmtDeleteDialogComponent, + LogsComponent, + JhiConfigurationComponent, + JhiHealthCheckComponent, + JhiHealthModalComponent, + JhiDocsComponent, + JhiMetricsMonitoringComponent + ], + entryComponents: [UserMgmtDeleteDialogComponent, JhiHealthModalComponent], + schemas: [CUSTOM_ELEMENTS_SCHEMA] +}) +export class BookstoreAdminModule {} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/admin.route.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/admin.route.ts new file mode 100644 index 000000000000..88c7e575f049 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/admin.route.ts @@ -0,0 +1,18 @@ +import { Routes } from '@angular/router'; + +import { auditsRoute, configurationRoute, docsRoute, healthRoute, logsRoute, metricsRoute, userMgmtRoute } from './'; + +import { UserRouteAccessService } from 'app/core'; + +const ADMIN_ROUTES = [auditsRoute, configurationRoute, docsRoute, healthRoute, logsRoute, ...userMgmtRoute, metricsRoute]; + +export const adminState: Routes = [ + { + path: '', + data: { + authorities: ['ROLE_ADMIN'] + }, + canActivate: [UserRouteAccessService], + children: ADMIN_ROUTES + } +]; diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/audits/audit-data.model.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/audits/audit-data.model.ts new file mode 100644 index 000000000000..a2506c4090df --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/audits/audit-data.model.ts @@ -0,0 +1,3 @@ +export class AuditData { + constructor(public remoteAddress: string, public sessionId: string) {} +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/audits/audit.model.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/audits/audit.model.ts new file mode 100644 index 000000000000..6497fb444e35 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/audits/audit.model.ts @@ -0,0 +1,5 @@ +import { AuditData } from './audit-data.model'; + +export class Audit { + constructor(public data: AuditData, public principal: string, public timestamp: string, public type: string) {} +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/audits/audits.component.html b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/audits/audits.component.html new file mode 100644 index 000000000000..38af44044a46 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/audits/audits.component.html @@ -0,0 +1,52 @@ +
+

Audits

+ +
+
+

Filter by date

+
+
+ from +
+ + +
+ To +
+ +
+
+
+ +
+ + + + + + + + + + + + + + + + + +
DateUserStateExtra data
{{audit.timestamp| date:'medium'}}{{audit.principal}}{{audit.type}} + {{audit.data.message}} + Remote Address {{audit.data.remoteAddress}} +
+
+
+
+ +
+
+ +
+
+
diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/audits/audits.component.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/audits/audits.component.ts new file mode 100644 index 000000000000..21739275f250 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/audits/audits.component.ts @@ -0,0 +1,126 @@ +import { Component, OnInit, OnDestroy } from '@angular/core'; +import { HttpResponse } from '@angular/common/http'; +import { DatePipe } from '@angular/common'; +import { ActivatedRoute, Router } from '@angular/router'; +import { JhiParseLinks, JhiAlertService } from 'ng-jhipster'; + +import { ITEMS_PER_PAGE } from 'app/shared'; +import { Audit } from './audit.model'; +import { AuditsService } from './audits.service'; + +@Component({ + selector: 'jhi-audit', + templateUrl: './audits.component.html' +}) +export class AuditsComponent implements OnInit, OnDestroy { + audits: Audit[]; + fromDate: string; + itemsPerPage: any; + links: any; + page: number; + routeData: any; + predicate: any; + previousPage: any; + reverse: boolean; + toDate: string; + totalItems: number; + + constructor( + private auditsService: AuditsService, + private alertService: JhiAlertService, + private parseLinks: JhiParseLinks, + private activatedRoute: ActivatedRoute, + private datePipe: DatePipe, + private router: Router + ) { + this.itemsPerPage = ITEMS_PER_PAGE; + this.routeData = this.activatedRoute.data.subscribe(data => { + this.page = data['pagingParams'].page; + this.previousPage = data['pagingParams'].page; + this.reverse = data['pagingParams'].ascending; + this.predicate = data['pagingParams'].predicate; + }); + } + + ngOnInit() { + this.today(); + this.previousMonth(); + this.loadAll(); + } + + ngOnDestroy() { + this.routeData.unsubscribe(); + } + + previousMonth() { + const dateFormat = 'yyyy-MM-dd'; + let fromDate: Date = new Date(); + + if (fromDate.getMonth() === 0) { + fromDate = new Date(fromDate.getFullYear() - 1, 11, fromDate.getDate()); + } else { + fromDate = new Date(fromDate.getFullYear(), fromDate.getMonth() - 1, fromDate.getDate()); + } + + this.fromDate = this.datePipe.transform(fromDate, dateFormat); + } + + today() { + const dateFormat = 'yyyy-MM-dd'; + // Today + 1 day - needed if the current day must be included + const today: Date = new Date(); + today.setDate(today.getDate() + 1); + const date = new Date(today.getFullYear(), today.getMonth(), today.getDate()); + this.toDate = this.datePipe.transform(date, dateFormat); + } + + loadAll() { + this.auditsService + .query({ + page: this.page - 1, + size: this.itemsPerPage, + sort: this.sort(), + fromDate: this.fromDate, + toDate: this.toDate + }) + .subscribe( + (res: HttpResponse) => this.onSuccess(res.body, res.headers), + (res: HttpResponse) => this.onError(res.body) + ); + } + + sort() { + const result = [this.predicate + ',' + (this.reverse ? 'asc' : 'desc')]; + if (this.predicate !== 'id') { + result.push('id'); + } + return result; + } + + loadPage(page: number) { + if (page !== this.previousPage) { + this.previousPage = page; + this.transition(); + } + } + + transition() { + this.router.navigate(['/admin/audits'], { + queryParams: { + page: this.page, + sort: this.predicate + ',' + (this.reverse ? 'asc' : 'desc') + } + }); + this.loadAll(); + } + + private onSuccess(data, headers) { + this.links = this.parseLinks.parse(headers.get('link')); + this.totalItems = headers.get('X-Total-Count'); + this.audits = data; + } + + private onError(error) { + this.alertService.error(error.error, error.message, null); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/audits/audits.route.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/audits/audits.route.ts new file mode 100644 index 000000000000..87af5c6e8cf7 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/audits/audits.route.ts @@ -0,0 +1,17 @@ +import { Injectable } from '@angular/core'; +import { Resolve, ActivatedRouteSnapshot, RouterStateSnapshot, Route } from '@angular/router'; +import { JhiPaginationUtil, JhiResolvePagingParams } from 'ng-jhipster'; + +import { AuditsComponent } from './audits.component'; + +export const auditsRoute: Route = { + path: 'audits', + component: AuditsComponent, + resolve: { + pagingParams: JhiResolvePagingParams + }, + data: { + pageTitle: 'Audits', + defaultSort: 'auditEventDate,desc' + } +}; diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/audits/audits.service.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/audits/audits.service.ts new file mode 100644 index 000000000000..78e8cca7e2ed --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/audits/audits.service.ts @@ -0,0 +1,25 @@ +import { Injectable } from '@angular/core'; +import { HttpClient, HttpParams, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; + +import { createRequestOption } from 'app/shared'; +import { SERVER_API_URL } from 'app/app.constants'; +import { Audit } from './audit.model'; + +@Injectable({ providedIn: 'root' }) +export class AuditsService { + constructor(private http: HttpClient) {} + + query(req: any): Observable> { + const params: HttpParams = createRequestOption(req); + params.set('fromDate', req.fromDate); + params.set('toDate', req.toDate); + + const requestURL = SERVER_API_URL + 'management/audits'; + + return this.http.get(requestURL, { + params, + observe: 'response' + }); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/configuration/configuration.component.html b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/configuration/configuration.component.html new file mode 100644 index 000000000000..02a4a9643301 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/configuration/configuration.component.html @@ -0,0 +1,46 @@ +
+

Configuration

+ + Filter (by prefix) +

Spring configuration

+ + + + + + + + + + + + + +
PrefixProperties
{{entry.prefix}} +
+
{{key}}
+
+ {{entry.properties[key] | json}} +
+
+
+
+

{{key}}

+ + + + + + + + + + + + + +
PropertyValue
{{item.key}} + {{item.val}} +
+
+
diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/configuration/configuration.component.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/configuration/configuration.component.ts new file mode 100644 index 000000000000..6867210c91e9 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/configuration/configuration.component.ts @@ -0,0 +1,43 @@ +import { Component, OnInit } from '@angular/core'; + +import { JhiConfigurationService } from './configuration.service'; + +@Component({ + selector: 'jhi-configuration', + templateUrl: './configuration.component.html' +}) +export class JhiConfigurationComponent implements OnInit { + allConfiguration: any = null; + configuration: any = null; + configKeys: any[]; + filter: string; + orderProp: string; + reverse: boolean; + + constructor(private configurationService: JhiConfigurationService) { + this.configKeys = []; + this.filter = ''; + this.orderProp = 'prefix'; + this.reverse = false; + } + + keys(dict): Array { + return dict === undefined ? [] : Object.keys(dict); + } + + ngOnInit() { + this.configurationService.get().subscribe(configuration => { + this.configuration = configuration; + + for (const config of configuration) { + if (config.properties !== undefined) { + this.configKeys.push(Object.keys(config.properties)); + } + } + }); + + this.configurationService.getEnv().subscribe(configuration => { + this.allConfiguration = configuration; + }); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/configuration/configuration.route.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/configuration/configuration.route.ts new file mode 100644 index 000000000000..f4ad9c3688fa --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/configuration/configuration.route.ts @@ -0,0 +1,11 @@ +import { Route } from '@angular/router'; + +import { JhiConfigurationComponent } from './configuration.component'; + +export const configurationRoute: Route = { + path: 'jhi-configuration', + component: JhiConfigurationComponent, + data: { + pageTitle: 'Configuration' + } +}; diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/configuration/configuration.service.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/configuration/configuration.service.ts new file mode 100644 index 000000000000..5f9dfd491c56 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/configuration/configuration.service.ts @@ -0,0 +1,67 @@ +import { Injectable } from '@angular/core'; +import { HttpClient, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; + +import { SERVER_API_URL } from 'app/app.constants'; + +@Injectable({ providedIn: 'root' }) +export class JhiConfigurationService { + constructor(private http: HttpClient) {} + + get(): Observable { + return this.http.get(SERVER_API_URL + 'management/configprops', { observe: 'response' }).pipe( + map((res: HttpResponse) => { + const properties: any[] = []; + const propertiesObject = this.getConfigPropertiesObjects(res.body); + for (const key in propertiesObject) { + if (propertiesObject.hasOwnProperty(key)) { + properties.push(propertiesObject[key]); + } + } + + return properties.sort((propertyA, propertyB) => { + return propertyA.prefix === propertyB.prefix ? 0 : propertyA.prefix < propertyB.prefix ? -1 : 1; + }); + }) + ); + } + + getConfigPropertiesObjects(res: Object) { + // This code is for Spring Boot 2 + if (res['contexts'] !== undefined) { + for (const key in res['contexts']) { + // If the key is not bootstrap, it will be the ApplicationContext Id + // For default app, it is baseName + // For microservice, it is baseName-1 + if (!key.startsWith('bootstrap')) { + return res['contexts'][key]['beans']; + } + } + } + // by default, use the default ApplicationContext Id + return res['contexts']['Bookstore']['beans']; + } + + getEnv(): Observable { + return this.http.get(SERVER_API_URL + 'management/env', { observe: 'response' }).pipe( + map((res: HttpResponse) => { + const properties: any = {}; + const propertySources = res.body['propertySources']; + + for (const propertyObject of propertySources) { + const name = propertyObject['name']; + const detailProperties = propertyObject['properties']; + const vals: any[] = []; + for (const keyDetail in detailProperties) { + if (detailProperties.hasOwnProperty(keyDetail)) { + vals.push({ key: keyDetail, val: detailProperties[keyDetail]['value'] }); + } + } + properties[name] = vals; + } + return properties; + }) + ); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/docs/docs.component.html b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/docs/docs.component.html new file mode 100644 index 000000000000..30efbbb93ee5 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/docs/docs.component.html @@ -0,0 +1,2 @@ + diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/docs/docs.component.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/docs/docs.component.ts new file mode 100644 index 000000000000..b338e7c3a669 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/docs/docs.component.ts @@ -0,0 +1,9 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'jhi-docs', + templateUrl: './docs.component.html' +}) +export class JhiDocsComponent { + constructor() {} +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/docs/docs.route.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/docs/docs.route.ts new file mode 100644 index 000000000000..d7df51b9356b --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/docs/docs.route.ts @@ -0,0 +1,11 @@ +import { Route } from '@angular/router'; + +import { JhiDocsComponent } from './docs.component'; + +export const docsRoute: Route = { + path: 'docs', + component: JhiDocsComponent, + data: { + pageTitle: 'API' + } +}; diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/health/health-modal.component.html b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/health/health-modal.component.html new file mode 100644 index 000000000000..efc125e3a08e --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/health/health-modal.component.html @@ -0,0 +1,35 @@ + + + diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/health/health-modal.component.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/health/health-modal.component.ts new file mode 100644 index 000000000000..28128bf32158 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/health/health-modal.component.ts @@ -0,0 +1,41 @@ +import { Component } from '@angular/core'; +import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; + +import { JhiHealthService } from './health.service'; + +@Component({ + selector: 'jhi-health-modal', + templateUrl: './health-modal.component.html' +}) +export class JhiHealthModalComponent { + currentHealth: any; + + constructor(private healthService: JhiHealthService, public activeModal: NgbActiveModal) {} + + baseName(name) { + return this.healthService.getBaseName(name); + } + + subSystemName(name) { + return this.healthService.getSubSystemName(name); + } + + readableValue(value: number) { + if (this.currentHealth.name === 'diskSpace') { + // Should display storage space in an human readable unit + const val = value / 1073741824; + if (val > 1) { + // Value + return val.toFixed(2) + ' GB'; + } else { + return (value / 1048576).toFixed(2) + ' MB'; + } + } + + if (typeof value === 'object') { + return JSON.stringify(value); + } else { + return value.toString(); + } + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/health/health.component.html b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/health/health.component.html new file mode 100644 index 000000000000..b314daa0ba18 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/health/health.component.html @@ -0,0 +1,34 @@ +
+

+ Health Checks + +

+
+ + + + + + + + + + + + + + + +
Service NameStatusDetails
{{ baseName(health.name) }} {{subSystemName(health.name)}} + + {{health.status}} + + + + + +
+
+
diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/health/health.component.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/health/health.component.ts new file mode 100644 index 000000000000..ada3ef62f496 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/health/health.component.ts @@ -0,0 +1,66 @@ +import { Component, OnInit } from '@angular/core'; +import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; + +import { JhiHealthService } from './health.service'; +import { JhiHealthModalComponent } from './health-modal.component'; + +@Component({ + selector: 'jhi-health', + templateUrl: './health.component.html' +}) +export class JhiHealthCheckComponent implements OnInit { + healthData: any; + updatingHealth: boolean; + + constructor(private modalService: NgbModal, private healthService: JhiHealthService) {} + + ngOnInit() { + this.refresh(); + } + + baseName(name: string) { + return this.healthService.getBaseName(name); + } + + getBadgeClass(statusState) { + if (statusState === 'UP') { + return 'badge-success'; + } else { + return 'badge-danger'; + } + } + + refresh() { + this.updatingHealth = true; + + this.healthService.checkHealth().subscribe( + health => { + this.healthData = this.healthService.transformHealthData(health); + this.updatingHealth = false; + }, + error => { + if (error.status === 503) { + this.healthData = this.healthService.transformHealthData(error.error); + this.updatingHealth = false; + } + } + ); + } + + showHealth(health: any) { + const modalRef = this.modalService.open(JhiHealthModalComponent); + modalRef.componentInstance.currentHealth = health; + modalRef.result.then( + result => { + // Left blank intentionally, nothing to do here + }, + reason => { + // Left blank intentionally, nothing to do here + } + ); + } + + subSystemName(name: string) { + return this.healthService.getSubSystemName(name); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/health/health.route.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/health/health.route.ts new file mode 100644 index 000000000000..0b6777565110 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/health/health.route.ts @@ -0,0 +1,11 @@ +import { Route } from '@angular/router'; + +import { JhiHealthCheckComponent } from './health.component'; + +export const healthRoute: Route = { + path: 'jhi-health', + component: JhiHealthCheckComponent, + data: { + pageTitle: 'Health Checks' + } +}; diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/health/health.service.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/health/health.service.ts new file mode 100644 index 000000000000..4c1b0e5ec869 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/health/health.service.ts @@ -0,0 +1,133 @@ +import { Injectable } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import { Observable } from 'rxjs'; + +import { SERVER_API_URL } from 'app/app.constants'; + +@Injectable({ providedIn: 'root' }) +export class JhiHealthService { + separator: string; + + constructor(private http: HttpClient) { + this.separator = '.'; + } + + checkHealth(): Observable { + return this.http.get(SERVER_API_URL + 'management/health'); + } + + transformHealthData(data): any { + const response = []; + this.flattenHealthData(response, null, data.details); + return response; + } + + getBaseName(name): string { + if (name) { + const split = name.split('.'); + return split[0]; + } + } + + getSubSystemName(name): string { + if (name) { + const split = name.split('.'); + split.splice(0, 1); + const remainder = split.join('.'); + return remainder ? ' - ' + remainder : ''; + } + } + + /* private methods */ + private addHealthObject(result, isLeaf, healthObject, name): any { + const healthData: any = { + name + }; + + const details = {}; + let hasDetails = false; + + for (const key in healthObject) { + if (healthObject.hasOwnProperty(key)) { + const value = healthObject[key]; + if (key === 'status' || key === 'error') { + healthData[key] = value; + } else { + if (!this.isHealthObject(value)) { + details[key] = value; + hasDetails = true; + } + } + } + } + + // Add the details + if (hasDetails) { + healthData.details = details; + } + + // Only add nodes if they provide additional information + if (isLeaf || hasDetails || healthData.error) { + result.push(healthData); + } + return healthData; + } + + private flattenHealthData(result, path, data): any { + for (const key in data) { + if (data.hasOwnProperty(key)) { + const value = data[key]; + if (this.isHealthObject(value)) { + if (this.hasSubSystem(value)) { + this.addHealthObject(result, false, value, this.getModuleName(path, key)); + this.flattenHealthData(result, this.getModuleName(path, key), value); + } else { + this.addHealthObject(result, true, value, this.getModuleName(path, key)); + } + } + } + } + return result; + } + + private getModuleName(path, name): string { + let result; + if (path && name) { + result = path + this.separator + name; + } else if (path) { + result = path; + } else if (name) { + result = name; + } else { + result = ''; + } + return result; + } + + private hasSubSystem(healthObject): boolean { + let result = false; + + for (const key in healthObject) { + if (healthObject.hasOwnProperty(key)) { + const value = healthObject[key]; + if (value && value.status) { + result = true; + } + } + } + return result; + } + + private isHealthObject(healthObject): boolean { + let result = false; + + for (const key in healthObject) { + if (healthObject.hasOwnProperty(key)) { + if (key === 'status') { + result = true; + } + } + } + return result; + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/index.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/index.ts new file mode 100644 index 000000000000..7f631ffb9b08 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/index.ts @@ -0,0 +1,27 @@ +export * from './audits/audits.component'; +export * from './audits/audits.service'; +export * from './audits/audits.route'; +export * from './audits/audit.model'; +export * from './audits/audit-data.model'; +export * from './configuration/configuration.component'; +export * from './configuration/configuration.service'; +export * from './configuration/configuration.route'; +export * from './docs/docs.component'; +export * from './docs/docs.route'; +export * from './health/health.component'; +export * from './health/health-modal.component'; +export * from './health/health.service'; +export * from './health/health.route'; +export * from './logs/logs.component'; +export * from './logs/logs.service'; +export * from './logs/logs.route'; +export * from './logs/log.model'; +export * from './metrics/metrics.component'; +export * from './metrics/metrics.service'; +export * from './metrics/metrics.route'; +export * from './user-management/user-management-update.component'; +export * from './user-management/user-management-delete-dialog.component'; +export * from './user-management/user-management-detail.component'; +export * from './user-management/user-management.component'; +export * from './user-management/user-management.route'; +export * from './admin.route'; diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/logs/log.model.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/logs/log.model.ts new file mode 100644 index 000000000000..3f27b6728cfa --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/logs/log.model.ts @@ -0,0 +1,3 @@ +export class Log { + constructor(public name: string, public level: string) {} +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/logs/logs.component.html b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/logs/logs.component.html new file mode 100644 index 000000000000..cf5d6a046fa0 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/logs/logs.component.html @@ -0,0 +1,28 @@ +
+

Logs

+ +

There are {{ loggers.length }} loggers.

+ + Filter + + + + + + + + + + + + + +
NameLevel
{{logger.name | slice:0:140}} + + + + + + +
+
diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/logs/logs.component.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/logs/logs.component.ts new file mode 100644 index 000000000000..28547f9ae631 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/logs/logs.component.ts @@ -0,0 +1,32 @@ +import { Component, OnInit } from '@angular/core'; + +import { Log } from './log.model'; +import { LogsService } from './logs.service'; + +@Component({ + selector: 'jhi-logs', + templateUrl: './logs.component.html' +}) +export class LogsComponent implements OnInit { + loggers: Log[]; + filter: string; + orderProp: string; + reverse: boolean; + + constructor(private logsService: LogsService) { + this.filter = ''; + this.orderProp = 'name'; + this.reverse = false; + } + + ngOnInit() { + this.logsService.findAll().subscribe(response => (this.loggers = response.body)); + } + + changeLevel(name: string, level: string) { + const log = new Log(name, level); + this.logsService.changeLevel(log).subscribe(() => { + this.logsService.findAll().subscribe(response => (this.loggers = response.body)); + }); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/logs/logs.route.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/logs/logs.route.ts new file mode 100644 index 000000000000..cfa87715d816 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/logs/logs.route.ts @@ -0,0 +1,11 @@ +import { Route } from '@angular/router'; + +import { LogsComponent } from './logs.component'; + +export const logsRoute: Route = { + path: 'logs', + component: LogsComponent, + data: { + pageTitle: 'Logs' + } +}; diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/logs/logs.service.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/logs/logs.service.ts new file mode 100644 index 000000000000..71a596b0abd7 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/logs/logs.service.ts @@ -0,0 +1,19 @@ +import { Injectable } from '@angular/core'; +import { HttpClient, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; + +import { SERVER_API_URL } from 'app/app.constants'; +import { Log } from './log.model'; + +@Injectable({ providedIn: 'root' }) +export class LogsService { + constructor(private http: HttpClient) {} + + changeLevel(log: Log): Observable> { + return this.http.put(SERVER_API_URL + 'management/logs', log, { observe: 'response' }); + } + + findAll(): Observable> { + return this.http.get(SERVER_API_URL + 'management/logs', { observe: 'response' }); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/metrics/metrics.component.html b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/metrics/metrics.component.html new file mode 100644 index 000000000000..75902d8fb393 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/metrics/metrics.component.html @@ -0,0 +1,56 @@ +
+

+ Application Metrics + +

+ +

JVM Metrics

+
+ + + + + +
+ +
+

Garbage collector statistics

+ +
+ +
Updating...
+ + + + +
+ + + + + + + + + +
diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/metrics/metrics.component.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/metrics/metrics.component.ts new file mode 100644 index 000000000000..ed508c818705 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/metrics/metrics.component.ts @@ -0,0 +1,42 @@ +import { Component, OnInit } from '@angular/core'; +import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; + +import { JhiMetricsService } from './metrics.service'; + +@Component({ + selector: 'jhi-metrics', + templateUrl: './metrics.component.html' +}) +export class JhiMetricsMonitoringComponent implements OnInit { + metrics: any = {}; + threadData: any = {}; + updatingMetrics = true; + JCACHE_KEY: string; + + constructor(private modalService: NgbModal, private metricsService: JhiMetricsService) { + this.JCACHE_KEY = 'jcache.statistics'; + } + + ngOnInit() { + this.refresh(); + } + + refresh() { + this.updatingMetrics = true; + this.metricsService.getMetrics().subscribe(metrics => { + this.metrics = metrics; + this.metricsService.threadDump().subscribe(data => { + this.threadData = data.threads; + this.updatingMetrics = false; + }); + }); + } + + isObjectExisting(metrics: any, key: string) { + return metrics && metrics[key]; + } + + isObjectExistingAndNotEmpty(metrics: any, key: string) { + return this.isObjectExisting(metrics, key) && JSON.stringify(metrics[key]) !== '{}'; + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/metrics/metrics.route.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/metrics/metrics.route.ts new file mode 100644 index 000000000000..abc18b825405 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/metrics/metrics.route.ts @@ -0,0 +1,11 @@ +import { Route } from '@angular/router'; + +import { JhiMetricsMonitoringComponent } from './metrics.component'; + +export const metricsRoute: Route = { + path: 'jhi-metrics', + component: JhiMetricsMonitoringComponent, + data: { + pageTitle: 'Application Metrics' + } +}; diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/metrics/metrics.service.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/metrics/metrics.service.ts new file mode 100644 index 000000000000..15cfe3536ca5 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/metrics/metrics.service.ts @@ -0,0 +1,18 @@ +import { Injectable } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import { Observable } from 'rxjs'; + +import { SERVER_API_URL } from 'app/app.constants'; + +@Injectable({ providedIn: 'root' }) +export class JhiMetricsService { + constructor(private http: HttpClient) {} + + getMetrics(): Observable { + return this.http.get(SERVER_API_URL + 'management/jhi-metrics'); + } + + threadDump(): Observable { + return this.http.get(SERVER_API_URL + 'management/threaddump'); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-delete-dialog.component.html b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-delete-dialog.component.html new file mode 100644 index 000000000000..adb1a908dad8 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-delete-dialog.component.html @@ -0,0 +1,19 @@ +
+ + + +
diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-delete-dialog.component.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-delete-dialog.component.ts new file mode 100644 index 000000000000..d7674f6cd9d1 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-delete-dialog.component.ts @@ -0,0 +1,29 @@ +import { Component } from '@angular/core'; +import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; +import { JhiEventManager } from 'ng-jhipster'; + +import { User, UserService } from 'app/core'; + +@Component({ + selector: 'jhi-user-mgmt-delete-dialog', + templateUrl: './user-management-delete-dialog.component.html' +}) +export class UserMgmtDeleteDialogComponent { + user: User; + + constructor(private userService: UserService, public activeModal: NgbActiveModal, private eventManager: JhiEventManager) {} + + clear() { + this.activeModal.dismiss('cancel'); + } + + confirmDelete(login) { + this.userService.delete(login).subscribe(response => { + this.eventManager.broadcast({ + name: 'userListModification', + content: 'Deleted a user' + }); + this.activeModal.dismiss(true); + }); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-detail.component.html b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-detail.component.html new file mode 100644 index 000000000000..051f335ded55 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-detail.component.html @@ -0,0 +1,47 @@ +
+
+
+

+ User [{{user.login}}] +

+
+
Login
+
+ {{user.login}} + + +
+
First Name
+
{{user.firstName}}
+
Last Name
+
{{user.lastName}}
+
Email
+
{{user.email}}
+
Created By
+
{{user.createdBy}}
+
Created Date
+
{{user.createdDate | date:'dd/MM/yy HH:mm' }}
+
Last Modified By
+
{{user.lastModifiedBy}}
+
Last Modified Date
+
{{user.lastModifiedDate | date:'dd/MM/yy HH:mm'}}
+
Profiles
+
+
    +
  • + {{authority}} +
  • +
+
+
+ +
+
+
diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-detail.component.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-detail.component.ts new file mode 100644 index 000000000000..0b323d89a0e9 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-detail.component.ts @@ -0,0 +1,20 @@ +import { Component, OnInit, OnDestroy } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; + +import { User } from 'app/core'; + +@Component({ + selector: 'jhi-user-mgmt-detail', + templateUrl: './user-management-detail.component.html' +}) +export class UserMgmtDetailComponent implements OnInit { + user: User; + + constructor(private route: ActivatedRoute) {} + + ngOnInit() { + this.route.data.subscribe(({ user }) => { + this.user = user.body ? user.body : user; + }); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-update.component.html b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-update.component.html new file mode 100644 index 000000000000..b2d04b42278c --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-update.component.html @@ -0,0 +1,118 @@ +
+
+
+

+ Create or edit a User +

+
+ +
+ + +
+ +
+ + + +
+ + This field is required. + + + + This field cannot be longer than 50 characters. + + + + This field can only contain letters, digits and e-mail addresses. + +
+
+
+ + + +
+ + This field cannot be longer than 50 characters. + +
+
+
+ + + +
+ + This field cannot be longer than 50 characters. + +
+
+
+ + + +
+ + This field is required. + + + + This field cannot be longer than 100 characters. + + + + This field is required to be at least 5 characters. + + + + Your email is invalid. + +
+
+
+ +
+ +
+ + +
+
+
+ + +
+
+
+
diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-update.component.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-update.component.ts new file mode 100644 index 000000000000..e51e4f4a331f --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-update.component.ts @@ -0,0 +1,51 @@ +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; + +import { User, UserService } from 'app/core'; + +@Component({ + selector: 'jhi-user-mgmt-update', + templateUrl: './user-management-update.component.html' +}) +export class UserMgmtUpdateComponent implements OnInit { + user: User; + languages: any[]; + authorities: any[]; + isSaving: boolean; + + constructor(private userService: UserService, private route: ActivatedRoute, private router: Router) {} + + ngOnInit() { + this.isSaving = false; + this.route.data.subscribe(({ user }) => { + this.user = user.body ? user.body : user; + }); + this.authorities = []; + this.userService.authorities().subscribe(authorities => { + this.authorities = authorities; + }); + } + + previousState() { + window.history.back(); + } + + save() { + this.isSaving = true; + if (this.user.id !== null) { + this.userService.update(this.user).subscribe(response => this.onSaveSuccess(response), () => this.onSaveError()); + } else { + this.user.langKey = 'en'; + this.userService.create(this.user).subscribe(response => this.onSaveSuccess(response), () => this.onSaveError()); + } + } + + private onSaveSuccess(result) { + this.isSaving = false; + this.previousState(); + } + + private onSaveError() { + this.isSaving = false; + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management.component.html b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management.component.html new file mode 100644 index 000000000000..4592998c1f1a --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management.component.html @@ -0,0 +1,78 @@ +
+

+ Users + +

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ID Login Email ProfilesCreated Date Last Modified By Last Modified Date
{{user.id}}{{user.login}}{{user.email}} + + + +
+ {{ authority }} +
+
{{user.createdDate | date:'dd/MM/yy HH:mm'}}{{user.lastModifiedBy}}{{user.lastModifiedDate | date:'dd/MM/yy HH:mm'}} +
+ + + +
+
+
+
+
+ +
+
+ +
+
+
diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management.component.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management.component.ts new file mode 100644 index 000000000000..439442e3b670 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management.component.ts @@ -0,0 +1,144 @@ +import { Component, OnInit, OnDestroy } from '@angular/core'; +import { HttpResponse } from '@angular/common/http'; +import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; + +import { ActivatedRoute, Router } from '@angular/router'; +import { JhiEventManager, JhiParseLinks, JhiAlertService } from 'ng-jhipster'; + +import { ITEMS_PER_PAGE } from 'app/shared'; +import { AccountService, UserService, User } from 'app/core'; +import { UserMgmtDeleteDialogComponent } from 'app/admin'; + +@Component({ + selector: 'jhi-user-mgmt', + templateUrl: './user-management.component.html' +}) +export class UserMgmtComponent implements OnInit, OnDestroy { + currentAccount: any; + users: User[]; + error: any; + success: any; + routeData: any; + links: any; + totalItems: any; + itemsPerPage: any; + page: any; + predicate: any; + previousPage: any; + reverse: any; + + constructor( + private userService: UserService, + private alertService: JhiAlertService, + private accountService: AccountService, + private parseLinks: JhiParseLinks, + private activatedRoute: ActivatedRoute, + private router: Router, + private eventManager: JhiEventManager, + private modalService: NgbModal + ) { + this.itemsPerPage = ITEMS_PER_PAGE; + this.routeData = this.activatedRoute.data.subscribe(data => { + this.page = data['pagingParams'].page; + this.previousPage = data['pagingParams'].page; + this.reverse = data['pagingParams'].ascending; + this.predicate = data['pagingParams'].predicate; + }); + } + + ngOnInit() { + this.accountService.identity().then(account => { + this.currentAccount = account; + this.loadAll(); + this.registerChangeInUsers(); + }); + } + + ngOnDestroy() { + this.routeData.unsubscribe(); + } + + registerChangeInUsers() { + this.eventManager.subscribe('userListModification', response => this.loadAll()); + } + + setActive(user, isActivated) { + user.activated = isActivated; + + this.userService.update(user).subscribe(response => { + if (response.status === 200) { + this.error = null; + this.success = 'OK'; + this.loadAll(); + } else { + this.success = null; + this.error = 'ERROR'; + } + }); + } + + loadAll() { + this.userService + .query({ + page: this.page - 1, + size: this.itemsPerPage, + sort: this.sort() + }) + .subscribe( + (res: HttpResponse) => this.onSuccess(res.body, res.headers), + (res: HttpResponse) => this.onError(res.body) + ); + } + + trackIdentity(index, item: User) { + return item.id; + } + + sort() { + const result = [this.predicate + ',' + (this.reverse ? 'asc' : 'desc')]; + if (this.predicate !== 'id') { + result.push('id'); + } + return result; + } + + loadPage(page: number) { + if (page !== this.previousPage) { + this.previousPage = page; + this.transition(); + } + } + + transition() { + this.router.navigate(['/admin/user-management'], { + queryParams: { + page: this.page, + sort: this.predicate + ',' + (this.reverse ? 'asc' : 'desc') + } + }); + this.loadAll(); + } + + deleteUser(user: User) { + const modalRef = this.modalService.open(UserMgmtDeleteDialogComponent, { size: 'lg', backdrop: 'static' }); + modalRef.componentInstance.user = user; + modalRef.result.then( + result => { + // Left blank intentionally, nothing to do here + }, + reason => { + // Left blank intentionally, nothing to do here + } + ); + } + + private onSuccess(data, headers) { + this.links = this.parseLinks.parse(headers.get('link')); + this.totalItems = headers.get('X-Total-Count'); + this.users = data; + } + + private onError(error) { + this.alertService.error(error.error, error.message, null); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management.route.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management.route.ts new file mode 100644 index 000000000000..bf1115516f0a --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management.route.ts @@ -0,0 +1,68 @@ +import { Injectable } from '@angular/core'; +import { Resolve, ActivatedRouteSnapshot, RouterStateSnapshot, Routes, CanActivate } from '@angular/router'; +import { JhiPaginationUtil, JhiResolvePagingParams } from 'ng-jhipster'; + +import { AccountService, User, UserService } from 'app/core'; +import { UserMgmtComponent } from './user-management.component'; +import { UserMgmtDetailComponent } from './user-management-detail.component'; +import { UserMgmtUpdateComponent } from './user-management-update.component'; + +@Injectable({ providedIn: 'root' }) +export class UserResolve implements CanActivate { + constructor(private accountService: AccountService) {} + + canActivate() { + return this.accountService.identity().then(account => this.accountService.hasAnyAuthority(['ROLE_ADMIN'])); + } +} + +@Injectable({ providedIn: 'root' }) +export class UserMgmtResolve implements Resolve { + constructor(private service: UserService) {} + + resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) { + const id = route.params['login'] ? route.params['login'] : null; + if (id) { + return this.service.find(id); + } + return new User(); + } +} + +export const userMgmtRoute: Routes = [ + { + path: 'user-management', + component: UserMgmtComponent, + resolve: { + pagingParams: JhiResolvePagingParams + }, + data: { + pageTitle: 'Users', + defaultSort: 'id,asc' + } + }, + { + path: 'user-management/:login/view', + component: UserMgmtDetailComponent, + resolve: { + user: UserMgmtResolve + }, + data: { + pageTitle: 'Users' + } + }, + { + path: 'user-management/new', + component: UserMgmtUpdateComponent, + resolve: { + user: UserMgmtResolve + } + }, + { + path: 'user-management/:login/edit', + component: UserMgmtUpdateComponent, + resolve: { + user: UserMgmtResolve + } + } +]; diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/app-routing.module.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/app-routing.module.ts new file mode 100644 index 000000000000..c40d4df774b0 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/app-routing.module.ts @@ -0,0 +1,23 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { errorRoute, navbarRoute } from './layouts'; +import { DEBUG_INFO_ENABLED } from 'app/app.constants'; + +const LAYOUT_ROUTES = [navbarRoute, ...errorRoute]; + +@NgModule({ + imports: [ + RouterModule.forRoot( + [ + { + path: 'admin', + loadChildren: './admin/admin.module#BookstoreAdminModule' + }, + ...LAYOUT_ROUTES + ], + { useHash: true, enableTracing: DEBUG_INFO_ENABLED } + ) + ], + exports: [RouterModule] +}) +export class BookstoreAppRoutingModule {} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/app.constants.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/app.constants.ts new file mode 100644 index 000000000000..9760a49a9158 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/app.constants.ts @@ -0,0 +1,8 @@ +// These constants are injected via webpack environment variables. +// You can add more variables in webpack.common.js or in profile specific webpack..js files. +// If you change the values in the webpack config files, you need to re run webpack to update the application + +export const VERSION = process.env.VERSION; +export const DEBUG_INFO_ENABLED: boolean = !!process.env.DEBUG_INFO_ENABLED; +export const SERVER_API_URL = process.env.SERVER_API_URL; +export const BUILD_TIMESTAMP = process.env.BUILD_TIMESTAMP; diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/app.main.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/app.main.ts new file mode 100644 index 000000000000..7695bb8571e5 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/app.main.ts @@ -0,0 +1,14 @@ +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { ProdConfig } from './blocks/config/prod.config'; +import { BookstoreAppModule } from './app.module'; + +ProdConfig(); + +if (module['hot']) { + module['hot'].accept(); +} + +platformBrowserDynamic() + .bootstrapModule(BookstoreAppModule, { preserveWhitespaces: true }) + .then(success => console.log(`Application started`)) + .catch(err => console.error(err)); diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/app.module.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/app.module.ts new file mode 100644 index 000000000000..5fb96ed8c5b4 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/app.module.ts @@ -0,0 +1,70 @@ +import './vendor.ts'; + +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { HTTP_INTERCEPTORS } from '@angular/common/http'; +import { NgbDatepickerConfig } from '@ng-bootstrap/ng-bootstrap'; +import { Ng2Webstorage } from 'ngx-webstorage'; +import { NgJhipsterModule } from 'ng-jhipster'; + +import { AuthInterceptor } from './blocks/interceptor/auth.interceptor'; +import { AuthExpiredInterceptor } from './blocks/interceptor/auth-expired.interceptor'; +import { ErrorHandlerInterceptor } from './blocks/interceptor/errorhandler.interceptor'; +import { NotificationInterceptor } from './blocks/interceptor/notification.interceptor'; +import { BookstoreSharedModule } from 'app/shared'; +import { BookstoreCoreModule } from 'app/core'; +import { BookstoreAppRoutingModule } from './app-routing.module'; +import { BookstoreHomeModule } from './home/home.module'; +import { BookstoreAccountModule } from './account/account.module'; +import { BookstoreEntityModule } from './entities/entity.module'; +import * as moment from 'moment'; +// jhipster-needle-angular-add-module-import JHipster will add new module here +import { JhiMainComponent, NavbarComponent, FooterComponent, PageRibbonComponent, ErrorComponent } from './layouts'; + +@NgModule({ + imports: [ + BrowserModule, + Ng2Webstorage.forRoot({ prefix: 'jhi', separator: '-' }), + NgJhipsterModule.forRoot({ + // set below to true to make alerts look like toast + alertAsToast: false, + alertTimeout: 5000 + }), + BookstoreSharedModule.forRoot(), + BookstoreCoreModule, + BookstoreHomeModule, + BookstoreAccountModule, + // jhipster-needle-angular-add-module JHipster will add new module here + BookstoreEntityModule, + BookstoreAppRoutingModule + ], + declarations: [JhiMainComponent, NavbarComponent, ErrorComponent, PageRibbonComponent, FooterComponent], + providers: [ + { + provide: HTTP_INTERCEPTORS, + useClass: AuthInterceptor, + multi: true + }, + { + provide: HTTP_INTERCEPTORS, + useClass: AuthExpiredInterceptor, + multi: true + }, + { + provide: HTTP_INTERCEPTORS, + useClass: ErrorHandlerInterceptor, + multi: true + }, + { + provide: HTTP_INTERCEPTORS, + useClass: NotificationInterceptor, + multi: true + } + ], + bootstrap: [JhiMainComponent] +}) +export class BookstoreAppModule { + constructor(private dpConfig: NgbDatepickerConfig) { + this.dpConfig.minDate = { year: moment().year() - 100, month: 1, day: 1 }; + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/blocks/config/prod.config.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/blocks/config/prod.config.ts new file mode 100644 index 000000000000..c6221c1eaf8b --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/blocks/config/prod.config.ts @@ -0,0 +1,9 @@ +import { enableProdMode } from '@angular/core'; +import { DEBUG_INFO_ENABLED } from 'app/app.constants'; + +export function ProdConfig() { + // disable debug data on prod profile to improve performance + if (!DEBUG_INFO_ENABLED) { + enableProdMode(); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/blocks/config/uib-pagination.config.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/blocks/config/uib-pagination.config.ts new file mode 100644 index 000000000000..0c2ea9480861 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/blocks/config/uib-pagination.config.ts @@ -0,0 +1,14 @@ +import { Injectable } from '@angular/core'; +import { NgbPaginationConfig } from '@ng-bootstrap/ng-bootstrap'; +import { ITEMS_PER_PAGE } from 'app/shared'; + +@Injectable({ providedIn: 'root' }) +export class PaginationConfig { + // tslint:disable-next-line: no-unused-variable + constructor(private config: NgbPaginationConfig) { + config.boundaryLinks = true; + config.maxSize = 5; + config.pageSize = ITEMS_PER_PAGE; + config.size = 'sm'; + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/blocks/interceptor/auth-expired.interceptor.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/blocks/interceptor/auth-expired.interceptor.ts new file mode 100644 index 000000000000..bc1b70cfef82 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/blocks/interceptor/auth-expired.interceptor.ts @@ -0,0 +1,25 @@ +import { Injectable } from '@angular/core'; +import { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent, HttpErrorResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { tap } from 'rxjs/operators'; +import { LoginService } from 'app/core/login/login.service'; + +@Injectable() +export class AuthExpiredInterceptor implements HttpInterceptor { + constructor(private loginService: LoginService) {} + + intercept(request: HttpRequest, next: HttpHandler): Observable> { + return next.handle(request).pipe( + tap( + (event: HttpEvent) => {}, + (err: any) => { + if (err instanceof HttpErrorResponse) { + if (err.status === 401) { + this.loginService.logout(); + } + } + } + ) + ); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/blocks/interceptor/auth.interceptor.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/blocks/interceptor/auth.interceptor.ts new file mode 100644 index 000000000000..23cdeaf66b4c --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/blocks/interceptor/auth.interceptor.ts @@ -0,0 +1,27 @@ +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; +import { LocalStorageService, SessionStorageService } from 'ngx-webstorage'; +import { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent } from '@angular/common/http'; + +import { SERVER_API_URL } from 'app/app.constants'; + +@Injectable() +export class AuthInterceptor implements HttpInterceptor { + constructor(private localStorage: LocalStorageService, private sessionStorage: SessionStorageService) {} + + intercept(request: HttpRequest, next: HttpHandler): Observable> { + if (!request || !request.url || (/^http/.test(request.url) && !(SERVER_API_URL && request.url.startsWith(SERVER_API_URL)))) { + return next.handle(request); + } + + const token = this.localStorage.retrieve('authenticationToken') || this.sessionStorage.retrieve('authenticationToken'); + if (!!token) { + request = request.clone({ + setHeaders: { + Authorization: 'Bearer ' + token + } + }); + } + return next.handle(request); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/blocks/interceptor/errorhandler.interceptor.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/blocks/interceptor/errorhandler.interceptor.ts new file mode 100644 index 000000000000..e464f66cd31a --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/blocks/interceptor/errorhandler.interceptor.ts @@ -0,0 +1,25 @@ +import { Injectable } from '@angular/core'; +import { JhiEventManager } from 'ng-jhipster'; +import { HttpInterceptor, HttpRequest, HttpErrorResponse, HttpHandler, HttpEvent } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { tap } from 'rxjs/operators'; + +@Injectable() +export class ErrorHandlerInterceptor implements HttpInterceptor { + constructor(private eventManager: JhiEventManager) {} + + intercept(request: HttpRequest, next: HttpHandler): Observable> { + return next.handle(request).pipe( + tap( + (event: HttpEvent) => {}, + (err: any) => { + if (err instanceof HttpErrorResponse) { + if (!(err.status === 401 && (err.message === '' || (err.url && err.url.includes('/api/account'))))) { + this.eventManager.broadcast({ name: 'bookstoreApp.httpError', content: err }); + } + } + } + ) + ); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/blocks/interceptor/notification.interceptor.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/blocks/interceptor/notification.interceptor.ts new file mode 100644 index 000000000000..34af81d482af --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/blocks/interceptor/notification.interceptor.ts @@ -0,0 +1,34 @@ +import { JhiAlertService } from 'ng-jhipster'; +import { HttpInterceptor, HttpRequest, HttpResponse, HttpHandler, HttpEvent } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; +import { tap } from 'rxjs/operators'; + +@Injectable() +export class NotificationInterceptor implements HttpInterceptor { + constructor(private alertService: JhiAlertService) {} + + intercept(request: HttpRequest, next: HttpHandler): Observable> { + return next.handle(request).pipe( + tap( + (event: HttpEvent) => { + if (event instanceof HttpResponse) { + const arr = event.headers.keys(); + let alert = null; + arr.forEach(entry => { + if (entry.toLowerCase().endsWith('app-alert')) { + alert = event.headers.get(entry); + } + }); + if (alert) { + if (typeof alert === 'string') { + this.alertService.success(alert, null, null); + } + } + } + }, + (err: any) => {} + ) + ); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/core/auth/account.service.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/core/auth/account.service.ts new file mode 100644 index 000000000000..a6548f6dd9f9 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/core/auth/account.service.ts @@ -0,0 +1,108 @@ +import { Injectable } from '@angular/core'; +import { HttpClient, HttpResponse } from '@angular/common/http'; +import { Observable, Subject } from 'rxjs'; + +import { SERVER_API_URL } from 'app/app.constants'; +import { Account } from 'app/core/user/account.model'; + +@Injectable({ providedIn: 'root' }) +export class AccountService { + private userIdentity: any; + private authenticated = false; + private authenticationState = new Subject(); + + constructor(private http: HttpClient) {} + + fetch(): Observable> { + return this.http.get(SERVER_API_URL + 'api/account', { observe: 'response' }); + } + + save(account: any): Observable> { + return this.http.post(SERVER_API_URL + 'api/account', account, { observe: 'response' }); + } + + authenticate(identity) { + this.userIdentity = identity; + this.authenticated = identity !== null; + this.authenticationState.next(this.userIdentity); + } + + hasAnyAuthority(authorities: string[]): boolean { + if (!this.authenticated || !this.userIdentity || !this.userIdentity.authorities) { + return false; + } + + for (let i = 0; i < authorities.length; i++) { + if (this.userIdentity.authorities.includes(authorities[i])) { + return true; + } + } + + return false; + } + + hasAuthority(authority: string): Promise { + if (!this.authenticated) { + return Promise.resolve(false); + } + + return this.identity().then( + id => { + return Promise.resolve(id.authorities && id.authorities.includes(authority)); + }, + () => { + return Promise.resolve(false); + } + ); + } + + identity(force?: boolean): Promise { + if (force) { + this.userIdentity = undefined; + } + + // check and see if we have retrieved the userIdentity data from the server. + // if we have, reuse it by immediately resolving + if (this.userIdentity) { + return Promise.resolve(this.userIdentity); + } + + // retrieve the userIdentity data from the server, update the identity object, and then resolve. + return this.fetch() + .toPromise() + .then(response => { + const account = response.body; + if (account) { + this.userIdentity = account; + this.authenticated = true; + } else { + this.userIdentity = null; + this.authenticated = false; + } + this.authenticationState.next(this.userIdentity); + return this.userIdentity; + }) + .catch(err => { + this.userIdentity = null; + this.authenticated = false; + this.authenticationState.next(this.userIdentity); + return null; + }); + } + + isAuthenticated(): boolean { + return this.authenticated; + } + + isIdentityResolved(): boolean { + return this.userIdentity !== undefined; + } + + getAuthenticationState(): Observable { + return this.authenticationState.asObservable(); + } + + getImageUrl(): string { + return this.isIdentityResolved() ? this.userIdentity.imageUrl : null; + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/core/auth/auth-jwt.service.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/core/auth/auth-jwt.service.ts new file mode 100644 index 000000000000..5ad53e3dfedb --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/core/auth/auth-jwt.service.ts @@ -0,0 +1,59 @@ +import { Injectable } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; +import { LocalStorageService, SessionStorageService } from 'ngx-webstorage'; + +import { SERVER_API_URL } from 'app/app.constants'; + +@Injectable({ providedIn: 'root' }) +export class AuthServerProvider { + constructor(private http: HttpClient, private $localStorage: LocalStorageService, private $sessionStorage: SessionStorageService) {} + + getToken() { + return this.$localStorage.retrieve('authenticationToken') || this.$sessionStorage.retrieve('authenticationToken'); + } + + login(credentials): Observable { + const data = { + username: credentials.username, + password: credentials.password, + rememberMe: credentials.rememberMe + }; + return this.http.post(SERVER_API_URL + 'api/authenticate', data, { observe: 'response' }).pipe(map(authenticateSuccess.bind(this))); + + function authenticateSuccess(resp) { + const bearerToken = resp.headers.get('Authorization'); + if (bearerToken && bearerToken.slice(0, 7) === 'Bearer ') { + const jwt = bearerToken.slice(7, bearerToken.length); + this.storeAuthenticationToken(jwt, credentials.rememberMe); + return jwt; + } + } + } + + loginWithToken(jwt, rememberMe) { + if (jwt) { + this.storeAuthenticationToken(jwt, rememberMe); + return Promise.resolve(jwt); + } else { + return Promise.reject('auth-jwt-service Promise reject'); // Put appropriate error message here + } + } + + storeAuthenticationToken(jwt, rememberMe) { + if (rememberMe) { + this.$localStorage.store('authenticationToken', jwt); + } else { + this.$sessionStorage.store('authenticationToken', jwt); + } + } + + logout(): Observable { + return new Observable(observer => { + this.$localStorage.clear('authenticationToken'); + this.$sessionStorage.clear('authenticationToken'); + observer.complete(); + }); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/core/auth/csrf.service.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/core/auth/csrf.service.ts new file mode 100644 index 000000000000..01fdccb02ac3 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/core/auth/csrf.service.ts @@ -0,0 +1,11 @@ +import { Injectable } from '@angular/core'; +import { CookieService } from 'ngx-cookie'; + +@Injectable({ providedIn: 'root' }) +export class CSRFService { + constructor(private cookieService: CookieService) {} + + getCSRF(name = 'XSRF-TOKEN') { + return this.cookieService.get(name); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/core/auth/state-storage.service.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/core/auth/state-storage.service.ts new file mode 100644 index 000000000000..0e5befbfc35e --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/core/auth/state-storage.service.ts @@ -0,0 +1,46 @@ +import { Injectable } from '@angular/core'; +import { SessionStorageService } from 'ngx-webstorage'; + +@Injectable({ providedIn: 'root' }) +export class StateStorageService { + constructor(private $sessionStorage: SessionStorageService) {} + + getPreviousState() { + return this.$sessionStorage.retrieve('previousState'); + } + + resetPreviousState() { + this.$sessionStorage.clear('previousState'); + } + + storePreviousState(previousStateName, previousStateParams) { + const previousState = { name: previousStateName, params: previousStateParams }; + this.$sessionStorage.store('previousState', previousState); + } + + getDestinationState() { + return this.$sessionStorage.retrieve('destinationState'); + } + + storeUrl(url: string) { + this.$sessionStorage.store('previousUrl', url); + } + + getUrl() { + return this.$sessionStorage.retrieve('previousUrl'); + } + + storeDestinationState(destinationState, destinationStateParams, fromState) { + const destinationInfo = { + destination: { + name: destinationState.name, + data: destinationState.data + }, + params: destinationStateParams, + from: { + name: fromState.name + } + }; + this.$sessionStorage.store('destinationState', destinationInfo); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/core/auth/user-route-access-service.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/core/auth/user-route-access-service.ts new file mode 100644 index 000000000000..a55b0bc0351e --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/core/auth/user-route-access-service.ts @@ -0,0 +1,52 @@ +import { Injectable, isDevMode } from '@angular/core'; +import { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot } from '@angular/router'; + +import { AccountService } from '../'; +import { LoginModalService } from '../login/login-modal.service'; +import { StateStorageService } from './state-storage.service'; + +@Injectable({ providedIn: 'root' }) +export class UserRouteAccessService implements CanActivate { + constructor( + private router: Router, + private loginModalService: LoginModalService, + private accountService: AccountService, + private stateStorageService: StateStorageService + ) {} + + canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean | Promise { + const authorities = route.data['authorities']; + // We need to call the checkLogin / and so the accountService.identity() function, to ensure, + // that the client has a principal too, if they already logged in by the server. + // This could happen on a page refresh. + return this.checkLogin(authorities, state.url); + } + + checkLogin(authorities: string[], url: string): Promise { + return this.accountService.identity().then(account => { + if (!authorities || authorities.length === 0) { + return true; + } + + if (account) { + const hasAnyAuthority = this.accountService.hasAnyAuthority(authorities); + if (hasAnyAuthority) { + return true; + } + if (isDevMode()) { + console.error('User has not any of required authorities: ', authorities); + } + return false; + } + + this.stateStorageService.storeUrl(url); + this.router.navigate(['accessdenied']).then(() => { + // only show the login dialog, if the user hasn't logged in yet + if (!account) { + this.loginModalService.open(); + } + }); + return false; + }); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/core/core.module.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/core/core.module.ts new file mode 100644 index 000000000000..7569b8f59e4b --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/core/core.module.ts @@ -0,0 +1,24 @@ +import { NgModule, LOCALE_ID } from '@angular/core'; +import { DatePipe, registerLocaleData } from '@angular/common'; +import { HttpClientModule } from '@angular/common/http'; +import { Title } from '@angular/platform-browser'; +import locale from '@angular/common/locales/en'; + +@NgModule({ + imports: [HttpClientModule], + exports: [], + declarations: [], + providers: [ + Title, + { + provide: LOCALE_ID, + useValue: 'en' + }, + DatePipe + ] +}) +export class BookstoreCoreModule { + constructor() { + registerLocaleData(locale); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/core/index.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/core/index.ts new file mode 100644 index 000000000000..38827443a593 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/core/index.ts @@ -0,0 +1,11 @@ +export * from './auth/csrf.service'; +export * from './auth/state-storage.service'; +export * from './auth/account.service'; +export * from './auth/auth-jwt.service'; +export * from './user/account.model'; +export * from './user/user.model'; +export * from './auth/user-route-access-service'; +export * from './login/login-modal.service'; +export * from './login/login.service'; +export * from './user/user.service'; +export * from './core.module'; diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/core/login/login-modal.service.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/core/login/login-modal.service.ts new file mode 100644 index 000000000000..a0002aa56b25 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/core/login/login-modal.service.ts @@ -0,0 +1,27 @@ +import { Injectable } from '@angular/core'; +import { NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap'; + +import { JhiLoginModalComponent } from 'app/shared/login/login.component'; + +@Injectable({ providedIn: 'root' }) +export class LoginModalService { + private isOpen = false; + constructor(private modalService: NgbModal) {} + + open(): NgbModalRef { + if (this.isOpen) { + return; + } + this.isOpen = true; + const modalRef = this.modalService.open(JhiLoginModalComponent); + modalRef.result.then( + result => { + this.isOpen = false; + }, + reason => { + this.isOpen = false; + } + ); + return modalRef; + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/core/login/login.service.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/core/login/login.service.ts new file mode 100644 index 000000000000..e91508ff442c --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/core/login/login.service.ts @@ -0,0 +1,38 @@ +import { Injectable } from '@angular/core'; + +import { AccountService } from 'app/core/auth/account.service'; +import { AuthServerProvider } from 'app/core/auth/auth-jwt.service'; + +@Injectable({ providedIn: 'root' }) +export class LoginService { + constructor(private accountService: AccountService, private authServerProvider: AuthServerProvider) {} + + login(credentials, callback?) { + const cb = callback || function() {}; + + return new Promise((resolve, reject) => { + this.authServerProvider.login(credentials).subscribe( + data => { + this.accountService.identity(true).then(account => { + resolve(data); + }); + return cb(); + }, + err => { + this.logout(); + reject(err); + return cb(err); + } + ); + }); + } + + loginWithToken(jwt, rememberMe) { + return this.authServerProvider.loginWithToken(jwt, rememberMe); + } + + logout() { + this.authServerProvider.logout().subscribe(); + this.accountService.authenticate(null); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/core/user/account.model.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/core/user/account.model.ts new file mode 100644 index 000000000000..35679657e3b0 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/core/user/account.model.ts @@ -0,0 +1,12 @@ +export class Account { + constructor( + public activated: boolean, + public authorities: string[], + public email: string, + public firstName: string, + public langKey: string, + public lastName: string, + public login: string, + public imageUrl: string + ) {} +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/core/user/user.model.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/core/user/user.model.ts new file mode 100644 index 000000000000..e82da11ac542 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/core/user/user.model.ts @@ -0,0 +1,47 @@ +export interface IUser { + id?: any; + login?: string; + firstName?: string; + lastName?: string; + email?: string; + activated?: boolean; + langKey?: string; + authorities?: any[]; + createdBy?: string; + createdDate?: Date; + lastModifiedBy?: string; + lastModifiedDate?: Date; + password?: string; +} + +export class User implements IUser { + constructor( + public id?: any, + public login?: string, + public firstName?: string, + public lastName?: string, + public email?: string, + public activated?: boolean, + public langKey?: string, + public authorities?: any[], + public createdBy?: string, + public createdDate?: Date, + public lastModifiedBy?: string, + public lastModifiedDate?: Date, + public password?: string + ) { + this.id = id ? id : null; + this.login = login ? login : null; + this.firstName = firstName ? firstName : null; + this.lastName = lastName ? lastName : null; + this.email = email ? email : null; + this.activated = activated ? activated : false; + this.langKey = langKey ? langKey : null; + this.authorities = authorities ? authorities : null; + this.createdBy = createdBy ? createdBy : null; + this.createdDate = createdDate ? createdDate : null; + this.lastModifiedBy = lastModifiedBy ? lastModifiedBy : null; + this.lastModifiedDate = lastModifiedDate ? lastModifiedDate : null; + this.password = password ? password : null; + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/core/user/user.service.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/core/user/user.service.ts new file mode 100644 index 000000000000..5c8065bedd3d --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/core/user/user.service.ts @@ -0,0 +1,39 @@ +import { Injectable } from '@angular/core'; +import { HttpClient, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; + +import { SERVER_API_URL } from 'app/app.constants'; +import { createRequestOption } from 'app/shared/util/request-util'; +import { IUser } from './user.model'; + +@Injectable({ providedIn: 'root' }) +export class UserService { + public resourceUrl = SERVER_API_URL + 'api/users'; + + constructor(private http: HttpClient) {} + + create(user: IUser): Observable> { + return this.http.post(this.resourceUrl, user, { observe: 'response' }); + } + + update(user: IUser): Observable> { + return this.http.put(this.resourceUrl, user, { observe: 'response' }); + } + + find(login: string): Observable> { + return this.http.get(`${this.resourceUrl}/${login}`, { observe: 'response' }); + } + + query(req?: any): Observable> { + const options = createRequestOption(req); + return this.http.get(this.resourceUrl, { params: options, observe: 'response' }); + } + + delete(login: string): Observable> { + return this.http.delete(`${this.resourceUrl}/${login}`, { observe: 'response' }); + } + + authorities(): Observable { + return this.http.get(SERVER_API_URL + 'api/users/authorities'); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/entities/book/book-delete-dialog.component.html b/jhipster-6/bookstore-monolith/src/main/webapp/app/entities/book/book-delete-dialog.component.html new file mode 100644 index 000000000000..be3647e9df56 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/entities/book/book-delete-dialog.component.html @@ -0,0 +1,19 @@ +
+ + + +
diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/entities/book/book-delete-dialog.component.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/entities/book/book-delete-dialog.component.ts new file mode 100644 index 000000000000..7992a5d26df5 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/entities/book/book-delete-dialog.component.ts @@ -0,0 +1,65 @@ +import { Component, OnInit, OnDestroy } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; + +import { NgbActiveModal, NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap'; +import { JhiEventManager } from 'ng-jhipster'; + +import { IBook } from 'app/shared/model/book.model'; +import { BookService } from './book.service'; + +@Component({ + selector: 'jhi-book-delete-dialog', + templateUrl: './book-delete-dialog.component.html' +}) +export class BookDeleteDialogComponent { + book: IBook; + + constructor(protected bookService: BookService, public activeModal: NgbActiveModal, protected eventManager: JhiEventManager) {} + + clear() { + this.activeModal.dismiss('cancel'); + } + + confirmDelete(id: number) { + this.bookService.delete(id).subscribe(response => { + this.eventManager.broadcast({ + name: 'bookListModification', + content: 'Deleted an book' + }); + this.activeModal.dismiss(true); + }); + } +} + +@Component({ + selector: 'jhi-book-delete-popup', + template: '' +}) +export class BookDeletePopupComponent implements OnInit, OnDestroy { + protected ngbModalRef: NgbModalRef; + + constructor(protected activatedRoute: ActivatedRoute, protected router: Router, protected modalService: NgbModal) {} + + ngOnInit() { + this.activatedRoute.data.subscribe(({ book }) => { + setTimeout(() => { + this.ngbModalRef = this.modalService.open(BookDeleteDialogComponent as Component, { size: 'lg', backdrop: 'static' }); + this.ngbModalRef.componentInstance.book = book; + this.ngbModalRef.result.then( + result => { + this.router.navigate(['/book', { outlets: { popup: null } }]); + this.ngbModalRef = null; + }, + reason => { + this.router.navigate(['/book', { outlets: { popup: null } }]); + this.ngbModalRef = null; + } + ); + }, 0); + }); + } + + ngOnDestroy() { + this.ngbModalRef = null; + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/entities/book/book-detail.component.html b/jhipster-6/bookstore-monolith/src/main/webapp/app/entities/book/book-detail.component.html new file mode 100644 index 000000000000..4a3c20e8410b --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/entities/book/book-detail.component.html @@ -0,0 +1,49 @@ +
+
+
+

Book {{book.id}}

+
+ +
+
Title
+
+ {{book.title}} +
+
Author
+
+ {{book.author}} +
+
Published
+
+ {{book.published}} +
+
Quantity
+
+ {{book.quantity}} +
+
Price
+
+ {{book.price}} +
+
+ + + + + + +
+
+
diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/entities/book/book-detail.component.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/entities/book/book-detail.component.ts new file mode 100644 index 000000000000..6b84c0ba73bc --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/entities/book/book-detail.component.ts @@ -0,0 +1,36 @@ +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; + +import { IBook } from 'app/shared/model/book.model'; +import { BookService } from 'app/entities/book/book.service'; +import { HttpErrorResponse, HttpResponse } from '@angular/common/http'; + +@Component({ + selector: 'jhi-book-detail', + templateUrl: './book-detail.component.html' +}) +export class BookDetailComponent implements OnInit { + book: IBook; + + constructor(protected activatedRoute: ActivatedRoute, protected bookService: BookService) {} + + ngOnInit() { + this.activatedRoute.data.subscribe(({ book }) => { + this.book = book; + }); + } + + previousState() { + window.history.back(); + } + + purchase(id: number) { + console.log('Purchasing book ' + id); + this.bookService.purchase(id).subscribe( + (res: HttpResponse) => { + this.book = res.body; + }, + (res: HttpErrorResponse) => console.log(res.message) + ); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/entities/book/book-update.component.html b/jhipster-6/bookstore-monolith/src/main/webapp/app/entities/book/book-update.component.html new file mode 100644 index 000000000000..3b41c6e1e0aa --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/entities/book/book-update.component.html @@ -0,0 +1,100 @@ +
+
+
+

Create or edit a Book

+
+ +
+ + +
+
+ + +
+ + This field is required. + +
+
+
+ + +
+ + This field is required. + +
+
+
+ +
+ + + + +
+
+ + This field is required. + +
+
+
+ + +
+ + This field is required. + + + This field should be at least 0. + + + This field should be a number. + +
+
+
+ + +
+ + This field is required. + + + This field should be at least 0. + + + This field should be a number. + +
+
+ +
+
+ + +
+
+
+
diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/entities/book/book-update.component.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/entities/book/book-update.component.ts new file mode 100644 index 000000000000..67f46a67c251 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/entities/book/book-update.component.ts @@ -0,0 +1,53 @@ +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; +import { HttpResponse, HttpErrorResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import * as moment from 'moment'; +import { IBook } from 'app/shared/model/book.model'; +import { BookService } from './book.service'; + +@Component({ + selector: 'jhi-book-update', + templateUrl: './book-update.component.html' +}) +export class BookUpdateComponent implements OnInit { + book: IBook; + isSaving: boolean; + publishedDp: any; + + constructor(protected bookService: BookService, protected activatedRoute: ActivatedRoute) {} + + ngOnInit() { + this.isSaving = false; + this.activatedRoute.data.subscribe(({ book }) => { + this.book = book; + }); + } + + previousState() { + window.history.back(); + } + + save() { + this.isSaving = true; + if (this.book.id !== undefined) { + this.subscribeToSaveResponse(this.bookService.update(this.book)); + } else { + this.subscribeToSaveResponse(this.bookService.create(this.book)); + } + } + + protected subscribeToSaveResponse(result: Observable>) { + result.subscribe((res: HttpResponse) => this.onSaveSuccess(), (res: HttpErrorResponse) => this.onSaveError()); + } + + protected onSaveSuccess() { + this.isSaving = false; + this.previousState(); + } + + protected onSaveError() { + this.isSaving = false; + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/entities/book/book.component.html b/jhipster-6/bookstore-monolith/src/main/webapp/app/entities/book/book.component.html new file mode 100644 index 000000000000..74ad02a8e3b4 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/entities/book/book.component.html @@ -0,0 +1,62 @@ +
+

+ Books + +

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + +
IDTitleAuthorPublishedQuantityPrice
{{book.id}}{{book.title}}{{book.author}}{{book.published | date:'mediumDate'}}{{book.quantity}}{{book.price}} +
+ + + +
+
+
+
diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/entities/book/book.component.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/entities/book/book.component.ts new file mode 100644 index 000000000000..91a71c2f5c0e --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/entities/book/book.component.ts @@ -0,0 +1,65 @@ +import { Component, OnInit, OnDestroy } from '@angular/core'; +import { HttpErrorResponse, HttpResponse } from '@angular/common/http'; +import { Subscription } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { JhiEventManager, JhiAlertService } from 'ng-jhipster'; + +import { IBook } from 'app/shared/model/book.model'; +import { AccountService } from 'app/core'; +import { BookService } from './book.service'; + +@Component({ + selector: 'jhi-book', + templateUrl: './book.component.html' +}) +export class BookComponent implements OnInit, OnDestroy { + books: IBook[]; + currentAccount: any; + eventSubscriber: Subscription; + + constructor( + protected bookService: BookService, + protected jhiAlertService: JhiAlertService, + protected eventManager: JhiEventManager, + protected accountService: AccountService + ) {} + + loadAll() { + this.bookService + .query() + .pipe( + filter((res: HttpResponse) => res.ok), + map((res: HttpResponse) => res.body) + ) + .subscribe( + (res: IBook[]) => { + this.books = res; + }, + (res: HttpErrorResponse) => this.onError(res.message) + ); + } + + ngOnInit() { + this.loadAll(); + this.accountService.identity().then(account => { + this.currentAccount = account; + }); + this.registerChangeInBooks(); + } + + ngOnDestroy() { + this.eventManager.destroy(this.eventSubscriber); + } + + trackId(index: number, item: IBook) { + return item.id; + } + + registerChangeInBooks() { + this.eventSubscriber = this.eventManager.subscribe('bookListModification', response => this.loadAll()); + } + + protected onError(errorMessage: string) { + this.jhiAlertService.error(errorMessage, null, null); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/entities/book/book.module.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/entities/book/book.module.ts new file mode 100644 index 000000000000..fe221a0eb936 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/entities/book/book.module.ts @@ -0,0 +1,23 @@ +import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; +import { RouterModule } from '@angular/router'; + +import { BookstoreSharedModule } from 'app/shared'; +import { + BookComponent, + BookDetailComponent, + BookUpdateComponent, + BookDeletePopupComponent, + BookDeleteDialogComponent, + bookRoute, + bookPopupRoute +} from './'; + +const ENTITY_STATES = [...bookRoute, ...bookPopupRoute]; + +@NgModule({ + imports: [BookstoreSharedModule, RouterModule.forChild(ENTITY_STATES)], + declarations: [BookComponent, BookDetailComponent, BookUpdateComponent, BookDeleteDialogComponent, BookDeletePopupComponent], + entryComponents: [BookComponent, BookUpdateComponent, BookDeleteDialogComponent, BookDeletePopupComponent], + schemas: [CUSTOM_ELEMENTS_SCHEMA] +}) +export class BookstoreBookModule {} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/entities/book/book.route.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/entities/book/book.route.ts new file mode 100644 index 000000000000..154fa89a5cbc --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/entities/book/book.route.ts @@ -0,0 +1,93 @@ +import { Injectable } from '@angular/core'; +import { HttpResponse } from '@angular/common/http'; +import { Resolve, ActivatedRouteSnapshot, RouterStateSnapshot, Routes } from '@angular/router'; +import { UserRouteAccessService } from 'app/core'; +import { Observable, of } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { Book } from 'app/shared/model/book.model'; +import { BookService } from './book.service'; +import { BookComponent } from './book.component'; +import { BookDetailComponent } from './book-detail.component'; +import { BookUpdateComponent } from './book-update.component'; +import { BookDeletePopupComponent } from './book-delete-dialog.component'; +import { IBook } from 'app/shared/model/book.model'; + +@Injectable({ providedIn: 'root' }) +export class BookResolve implements Resolve { + constructor(private service: BookService) {} + + resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { + const id = route.params['id'] ? route.params['id'] : null; + if (id) { + return this.service.find(id).pipe( + filter((response: HttpResponse) => response.ok), + map((book: HttpResponse) => book.body) + ); + } + return of(new Book()); + } +} + +export const bookRoute: Routes = [ + { + path: '', + component: BookComponent, + data: { + authorities: ['ROLE_USER'], + pageTitle: 'Books' + }, + canActivate: [UserRouteAccessService] + }, + { + path: ':id/view', + component: BookDetailComponent, + resolve: { + book: BookResolve + }, + data: { + authorities: ['ROLE_USER'], + pageTitle: 'Books' + }, + canActivate: [UserRouteAccessService] + }, + { + path: 'new', + component: BookUpdateComponent, + resolve: { + book: BookResolve + }, + data: { + authorities: ['ROLE_USER'], + pageTitle: 'Books' + }, + canActivate: [UserRouteAccessService] + }, + { + path: ':id/edit', + component: BookUpdateComponent, + resolve: { + book: BookResolve + }, + data: { + authorities: ['ROLE_USER'], + pageTitle: 'Books' + }, + canActivate: [UserRouteAccessService] + } +]; + +export const bookPopupRoute: Routes = [ + { + path: ':id/delete', + component: BookDeletePopupComponent, + resolve: { + book: BookResolve + }, + data: { + authorities: ['ROLE_USER'], + pageTitle: 'Books' + }, + canActivate: [UserRouteAccessService], + outlet: 'popup' + } +]; diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/entities/book/book.service.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/entities/book/book.service.ts new file mode 100644 index 000000000000..bff511f7e671 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/entities/book/book.service.ts @@ -0,0 +1,81 @@ +import { Injectable } from '@angular/core'; +import { HttpClient, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import * as moment from 'moment'; +import { DATE_FORMAT } from 'app/shared/constants/input.constants'; +import { map } from 'rxjs/operators'; + +import { SERVER_API_URL } from 'app/app.constants'; +import { createRequestOption } from 'app/shared'; +import { IBook } from 'app/shared/model/book.model'; + +type EntityResponseType = HttpResponse; +type EntityArrayResponseType = HttpResponse; + +@Injectable({ providedIn: 'root' }) +export class BookService { + public resourceUrl = SERVER_API_URL + 'api/books'; + + constructor(protected http: HttpClient) {} + + create(book: IBook): Observable { + const copy = this.convertDateFromClient(book); + return this.http + .post(this.resourceUrl, copy, { observe: 'response' }) + .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); + } + + update(book: IBook): Observable { + const copy = this.convertDateFromClient(book); + return this.http + .put(this.resourceUrl, copy, { observe: 'response' }) + .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); + } + + find(id: number): Observable { + return this.http + .get(`${this.resourceUrl}/${id}`, { observe: 'response' }) + .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); + } + + purchase(id: number): Observable { + console.log('Calling /api/books/purchase/ ' + id); + return this.http + .get(`${this.resourceUrl}/purchase/${id}`, { observe: 'response' }) + .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); + } + + query(req?: any): Observable { + const options = createRequestOption(req); + return this.http + .get(this.resourceUrl, { params: options, observe: 'response' }) + .pipe(map((res: EntityArrayResponseType) => this.convertDateArrayFromServer(res))); + } + + delete(id: number): Observable> { + return this.http.delete(`${this.resourceUrl}/${id}`, { observe: 'response' }); + } + + protected convertDateFromClient(book: IBook): IBook { + const copy: IBook = Object.assign({}, book, { + published: book.published != null && book.published.isValid() ? book.published.format(DATE_FORMAT) : null + }); + return copy; + } + + protected convertDateFromServer(res: EntityResponseType): EntityResponseType { + if (res.body) { + res.body.published = res.body.published != null ? moment(res.body.published) : null; + } + return res; + } + + protected convertDateArrayFromServer(res: EntityArrayResponseType): EntityArrayResponseType { + if (res.body) { + res.body.forEach((book: IBook) => { + book.published = book.published != null ? moment(book.published) : null; + }); + } + return res; + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/entities/book/index.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/entities/book/index.ts new file mode 100644 index 000000000000..603cf68f9f79 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/entities/book/index.ts @@ -0,0 +1,6 @@ +export * from './book.service'; +export * from './book-update.component'; +export * from './book-delete-dialog.component'; +export * from './book-detail.component'; +export * from './book.component'; +export * from './book.route'; diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/entities/entity.module.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/entities/entity.module.ts new file mode 100644 index 000000000000..fba1f55ef744 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/entities/entity.module.ts @@ -0,0 +1,19 @@ +import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; +import { RouterModule } from '@angular/router'; + +@NgModule({ + imports: [ + RouterModule.forChild([ + { + path: 'book', + loadChildren: './book/book.module#BookstoreBookModule' + } + /* jhipster-needle-add-entity-route - JHipster will add entity modules routes here */ + ]) + ], + declarations: [], + entryComponents: [], + providers: [], + schemas: [CUSTOM_ELEMENTS_SCHEMA] +}) +export class BookstoreEntityModule {} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/home/home.component.html b/jhipster-6/bookstore-monolith/src/main/webapp/app/home/home.component.html new file mode 100644 index 000000000000..0c595b9d7446 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/home/home.component.html @@ -0,0 +1,41 @@ +
+
+ +
+
+

Welcome, Java Hipster!

+

This is your homepage

+ +
+
+ You are logged in as user "{{account.login}}". +
+ +
+ If you want to + sign in, you can try the default accounts:
- Administrator (login="admin" and password="admin")
- User (login="user" and password="user").
+
+
+ You don't have an account yet?  + Register a new account +
+
+ +

+ If you have any question on JHipster: +

+ + + +

+ If you like JHipster, don't forget to give us a star on GitHub! +

+
+
diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/home/home.component.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/home/home.component.ts new file mode 100644 index 000000000000..f1410c2cf51a --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/home/home.component.ts @@ -0,0 +1,44 @@ +import { Component, OnInit } from '@angular/core'; +import { NgbModalRef } from '@ng-bootstrap/ng-bootstrap'; +import { JhiEventManager } from 'ng-jhipster'; + +import { LoginModalService, AccountService, Account } from 'app/core'; + +@Component({ + selector: 'jhi-home', + templateUrl: './home.component.html', + styleUrls: ['home.scss'] +}) +export class HomeComponent implements OnInit { + account: Account; + modalRef: NgbModalRef; + + constructor( + private accountService: AccountService, + private loginModalService: LoginModalService, + private eventManager: JhiEventManager + ) {} + + ngOnInit() { + this.accountService.identity().then((account: Account) => { + this.account = account; + }); + this.registerAuthenticationSuccess(); + } + + registerAuthenticationSuccess() { + this.eventManager.subscribe('authenticationSuccess', message => { + this.accountService.identity().then(account => { + this.account = account; + }); + }); + } + + isAuthenticated() { + return this.accountService.isAuthenticated(); + } + + login() { + this.modalRef = this.loginModalService.open(); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/home/home.module.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/home/home.module.ts new file mode 100644 index 000000000000..c1004a6dd979 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/home/home.module.ts @@ -0,0 +1,12 @@ +import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; +import { RouterModule } from '@angular/router'; + +import { BookstoreSharedModule } from 'app/shared'; +import { HOME_ROUTE, HomeComponent } from './'; + +@NgModule({ + imports: [BookstoreSharedModule, RouterModule.forChild([HOME_ROUTE])], + declarations: [HomeComponent], + schemas: [CUSTOM_ELEMENTS_SCHEMA] +}) +export class BookstoreHomeModule {} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/home/home.route.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/home/home.route.ts new file mode 100644 index 000000000000..a59993f8f08a --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/home/home.route.ts @@ -0,0 +1,12 @@ +import { Route } from '@angular/router'; + +import { HomeComponent } from './'; + +export const HOME_ROUTE: Route = { + path: '', + component: HomeComponent, + data: { + authorities: [], + pageTitle: 'Welcome, Java Hipster!' + } +}; diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/home/home.scss b/jhipster-6/bookstore-monolith/src/main/webapp/app/home/home.scss new file mode 100644 index 000000000000..7fe48ff5fab8 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/home/home.scss @@ -0,0 +1,23 @@ +/* ========================================================================== +Main page styles +========================================================================== */ + +.hipster { + display: inline-block; + width: 347px; + height: 497px; + background: url('../../content/images/jhipster_family_member_0.svg') no-repeat center top; + background-size: contain; +} + +/* wait autoprefixer update to allow simple generation of high pixel density media query */ +@media only screen and (-webkit-min-device-pixel-ratio: 2), + only screen and (-moz-min-device-pixel-ratio: 2), + only screen and (-o-min-device-pixel-ratio: 2/1), + only screen and (min-resolution: 192dpi), + only screen and (min-resolution: 2dppx) { + .hipster { + background: url('../../content/images/jhipster_family_member_0.svg') no-repeat center top; + background-size: contain; + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/home/index.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/home/index.ts new file mode 100644 index 000000000000..d76285b27776 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/home/index.ts @@ -0,0 +1,3 @@ +export * from './home.component'; +export * from './home.route'; +export * from './home.module'; diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/layouts/error/error.component.html b/jhipster-6/bookstore-monolith/src/main/webapp/app/layouts/error/error.component.html new file mode 100644 index 000000000000..b79392173ef4 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/layouts/error/error.component.html @@ -0,0 +1,19 @@ +
+
+
+ +
+
+

Error Page!

+ +
+
{{errorMessage}} +
+
+
You are not authorized to access this page. +
+
The page asked was not found. +
+
+
+
diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/layouts/error/error.component.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/layouts/error/error.component.ts new file mode 100644 index 000000000000..faa965816163 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/layouts/error/error.component.ts @@ -0,0 +1,28 @@ +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; + +@Component({ + selector: 'jhi-error', + templateUrl: './error.component.html' +}) +export class ErrorComponent implements OnInit { + errorMessage: string; + error403: boolean; + error404: boolean; + + constructor(private route: ActivatedRoute) {} + + ngOnInit() { + this.route.data.subscribe(routeData => { + if (routeData.error403) { + this.error403 = routeData.error403; + } + if (routeData.error404) { + this.error404 = routeData.error404; + } + if (routeData.errorMessage) { + this.errorMessage = routeData.errorMessage; + } + }); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/layouts/error/error.route.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/layouts/error/error.route.ts new file mode 100644 index 000000000000..85ab257ca9f1 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/layouts/error/error.route.ts @@ -0,0 +1,36 @@ +import { Routes } from '@angular/router'; + +import { ErrorComponent } from './error.component'; + +export const errorRoute: Routes = [ + { + path: 'error', + component: ErrorComponent, + data: { + authorities: [], + pageTitle: 'Bookstore' + } + }, + { + path: 'accessdenied', + component: ErrorComponent, + data: { + authorities: [], + pageTitle: 'Bookstore', + error403: true + } + }, + { + path: '404', + component: ErrorComponent, + data: { + authorities: [], + pageTitle: 'Bookstore', + error404: true + } + }, + { + path: '**', + redirectTo: '/404' + } +]; diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/layouts/footer/footer.component.html b/jhipster-6/bookstore-monolith/src/main/webapp/app/layouts/footer/footer.component.html new file mode 100644 index 000000000000..b3ba632e02c3 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/layouts/footer/footer.component.html @@ -0,0 +1,3 @@ + diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/layouts/footer/footer.component.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/layouts/footer/footer.component.ts new file mode 100644 index 000000000000..37da8bca7544 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/layouts/footer/footer.component.ts @@ -0,0 +1,7 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'jhi-footer', + templateUrl: './footer.component.html' +}) +export class FooterComponent {} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/layouts/index.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/layouts/index.ts new file mode 100644 index 000000000000..8cbf6368d7aa --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/layouts/index.ts @@ -0,0 +1,9 @@ +export * from './error/error.component'; +export * from './error/error.route'; +export * from './main/main.component'; +export * from './footer/footer.component'; +export * from './navbar/navbar.component'; +export * from './navbar/navbar.route'; +export * from './profiles/page-ribbon.component'; +export * from './profiles/profile.service'; +export * from './profiles/profile-info.model'; diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/layouts/main/main.component.html b/jhipster-6/bookstore-monolith/src/main/webapp/app/layouts/main/main.component.html new file mode 100644 index 000000000000..5bcd12ab0b84 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/layouts/main/main.component.html @@ -0,0 +1,11 @@ + +
+ +
+
+
+ + +
+ +
diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/layouts/main/main.component.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/layouts/main/main.component.ts new file mode 100644 index 000000000000..e1f2c8134e6a --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/layouts/main/main.component.ts @@ -0,0 +1,31 @@ +import { Component, OnInit } from '@angular/core'; +import { Router, ActivatedRouteSnapshot, NavigationEnd, NavigationError } from '@angular/router'; + +import { Title } from '@angular/platform-browser'; + +@Component({ + selector: 'jhi-main', + templateUrl: './main.component.html' +}) +export class JhiMainComponent implements OnInit { + constructor(private titleService: Title, private router: Router) {} + + private getPageTitle(routeSnapshot: ActivatedRouteSnapshot) { + let title: string = routeSnapshot.data && routeSnapshot.data['pageTitle'] ? routeSnapshot.data['pageTitle'] : 'bookstoreApp'; + if (routeSnapshot.firstChild) { + title = this.getPageTitle(routeSnapshot.firstChild) || title; + } + return title; + } + + ngOnInit() { + this.router.events.subscribe(event => { + if (event instanceof NavigationEnd) { + this.titleService.setTitle(this.getPageTitle(this.router.routerState.snapshot.root)); + } + if (event instanceof NavigationError && event.error.status === 404) { + this.router.navigate(['/404']); + } + }); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/layouts/navbar/navbar.component.html b/jhipster-6/bookstore-monolith/src/main/webapp/app/layouts/navbar/navbar.component.html new file mode 100644 index 000000000000..4fab5c76acb6 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/layouts/navbar/navbar.component.html @@ -0,0 +1,133 @@ + diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/layouts/navbar/navbar.component.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/layouts/navbar/navbar.component.ts new file mode 100644 index 000000000000..6e00d7a1cbbc --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/layouts/navbar/navbar.component.ts @@ -0,0 +1,65 @@ +import { Component, OnInit } from '@angular/core'; +import { Router } from '@angular/router'; +import { NgbModalRef } from '@ng-bootstrap/ng-bootstrap'; + +import { VERSION } from 'app/app.constants'; +import { AccountService, LoginModalService, LoginService } from 'app/core'; +import { ProfileService } from 'app/layouts/profiles/profile.service'; + +@Component({ + selector: 'jhi-navbar', + templateUrl: './navbar.component.html', + styleUrls: ['navbar.scss'] +}) +export class NavbarComponent implements OnInit { + inProduction: boolean; + isNavbarCollapsed: boolean; + languages: any[]; + swaggerEnabled: boolean; + modalRef: NgbModalRef; + version: string; + + constructor( + private loginService: LoginService, + private accountService: AccountService, + private loginModalService: LoginModalService, + private profileService: ProfileService, + private router: Router + ) { + this.version = VERSION ? 'v' + VERSION : ''; + this.isNavbarCollapsed = true; + } + + ngOnInit() { + this.profileService.getProfileInfo().then(profileInfo => { + this.inProduction = profileInfo.inProduction; + this.swaggerEnabled = profileInfo.swaggerEnabled; + }); + } + + collapseNavbar() { + this.isNavbarCollapsed = true; + } + + isAuthenticated() { + return this.accountService.isAuthenticated(); + } + + login() { + this.modalRef = this.loginModalService.open(); + } + + logout() { + this.collapseNavbar(); + this.loginService.logout(); + this.router.navigate(['']); + } + + toggleNavbar() { + this.isNavbarCollapsed = !this.isNavbarCollapsed; + } + + getImageUrl() { + return this.isAuthenticated() ? this.accountService.getImageUrl() : null; + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/layouts/navbar/navbar.route.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/layouts/navbar/navbar.route.ts new file mode 100644 index 000000000000..317d99604b26 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/layouts/navbar/navbar.route.ts @@ -0,0 +1,9 @@ +import { Route } from '@angular/router'; + +import { NavbarComponent } from './navbar.component'; + +export const navbarRoute: Route = { + path: '', + component: NavbarComponent, + outlet: 'navbar' +}; diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/layouts/navbar/navbar.scss b/jhipster-6/bookstore-monolith/src/main/webapp/app/layouts/navbar/navbar.scss new file mode 100644 index 000000000000..9a5f92929366 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/layouts/navbar/navbar.scss @@ -0,0 +1,53 @@ +@import '~bootstrap/scss/functions'; +@import '~bootstrap/scss/variables'; + +/* ========================================================================== +Navbar +========================================================================== */ + +.navbar-version { + font-size: 0.65em; + color: $navbar-dark-color; +} + +.profile-image { + height: 1.75em; + width: 1.75em; +} + +.navbar { + padding: 0.2rem 1rem; + .dropdown-item.active, + .dropdown-item.active:focus, + .dropdown-item.active:hover { + background-color: $dark; + } + + ul.navbar-nav { + .nav-item { + margin-left: 0.5em; + } + } + + a.nav-link { + font-weight: 400; + } + + .navbar-toggler { + &:hover { + color: $navbar-dark-hover-color; + } + } +} + +/* ========================================================================== +Logo styles +========================================================================== */ +.logo-img { + height: 45px; + width: 45px; + display: inline-block; + vertical-align: middle; + background: url('../../../content/images/logo-jhipster.png') no-repeat center center; + background-size: contain; +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/layouts/profiles/page-ribbon.component.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/layouts/profiles/page-ribbon.component.ts new file mode 100644 index 000000000000..00fe76075d4c --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/layouts/profiles/page-ribbon.component.ts @@ -0,0 +1,26 @@ +import { Component, OnInit } from '@angular/core'; +import { ProfileService } from './profile.service'; +import { ProfileInfo } from './profile-info.model'; + +@Component({ + selector: 'jhi-page-ribbon', + template: ` + + `, + styleUrls: ['page-ribbon.scss'] +}) +export class PageRibbonComponent implements OnInit { + profileInfo: ProfileInfo; + ribbonEnv: string; + + constructor(private profileService: ProfileService) {} + + ngOnInit() { + this.profileService.getProfileInfo().then(profileInfo => { + this.profileInfo = profileInfo; + this.ribbonEnv = profileInfo.ribbonEnv; + }); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/layouts/profiles/page-ribbon.scss b/jhipster-6/bookstore-monolith/src/main/webapp/app/layouts/profiles/page-ribbon.scss new file mode 100644 index 000000000000..90125b70cb95 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/layouts/profiles/page-ribbon.scss @@ -0,0 +1,31 @@ +/* ========================================================================== +Developement Ribbon +========================================================================== */ +.ribbon { + background-color: rgba(170, 0, 0, 0.5); + left: -3.5em; + -moz-transform: rotate(-45deg); + -ms-transform: rotate(-45deg); + -o-transform: rotate(-45deg); + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); + overflow: hidden; + position: absolute; + top: 40px; + white-space: nowrap; + width: 15em; + z-index: 9999; + pointer-events: none; + opacity: 0.75; + a { + color: #fff; + display: block; + font-weight: 400; + margin: 1px 0; + padding: 10px 50px; + text-align: center; + text-decoration: none; + text-shadow: 0 0 5px #444; + pointer-events: none; + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/layouts/profiles/profile-info.model.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/layouts/profiles/profile-info.model.ts new file mode 100644 index 000000000000..f1adc52c7bf2 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/layouts/profiles/profile-info.model.ts @@ -0,0 +1,6 @@ +export class ProfileInfo { + activeProfiles: string[]; + ribbonEnv: string; + inProduction: boolean; + swaggerEnabled: boolean; +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/layouts/profiles/profile.service.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/layouts/profiles/profile.service.ts new file mode 100644 index 000000000000..d07fad7e7fa2 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/layouts/profiles/profile.service.ts @@ -0,0 +1,40 @@ +import { Injectable } from '@angular/core'; +import { HttpClient, HttpResponse } from '@angular/common/http'; + +import { SERVER_API_URL } from 'app/app.constants'; +import { ProfileInfo } from './profile-info.model'; +import { map } from 'rxjs/operators'; + +@Injectable({ providedIn: 'root' }) +export class ProfileService { + private infoUrl = SERVER_API_URL + 'management/info'; + private profileInfo: Promise; + + constructor(private http: HttpClient) {} + + getProfileInfo(): Promise { + if (!this.profileInfo) { + this.profileInfo = this.http + .get(this.infoUrl, { observe: 'response' }) + .pipe( + map((res: HttpResponse) => { + const data = res.body; + const pi = new ProfileInfo(); + pi.activeProfiles = data['activeProfiles']; + const displayRibbonOnProfiles = data['display-ribbon-on-profiles'].split(','); + if (pi.activeProfiles) { + const ribbonProfiles = displayRibbonOnProfiles.filter(profile => pi.activeProfiles.includes(profile)); + if (ribbonProfiles.length !== 0) { + pi.ribbonEnv = ribbonProfiles[0]; + } + pi.inProduction = pi.activeProfiles.includes('prod'); + pi.swaggerEnabled = pi.activeProfiles.includes('swagger'); + } + return pi; + }) + ) + .toPromise(); + } + return this.profileInfo; + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/polyfills.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/polyfills.ts new file mode 100644 index 000000000000..cf38f3221bce --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/polyfills.ts @@ -0,0 +1,70 @@ +/** + * This file includes polyfills needed by Angular and is loaded before the app. + * You can add your own extra polyfills to this file. + * + * This file is divided into 2 sections: + * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers. + * 2. Application imports. Files imported after ZoneJS that should be loaded before your main + * file. + * + * The current setup is for so-called "evergreen" browsers; the last versions of browsers that + * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera), + * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile. + * + * Learn more in https://angular.io/docs/ts/latest/guide/browser-support.html + */ + +/*************************************************************************************************** + * BROWSER POLYFILLS + */ + +/** IE9, IE10 and IE11 requires all of the following polyfills. **/ +import 'core-js/es6/symbol'; +import 'core-js/es6/object'; +import 'core-js/es6/function'; +import 'core-js/es6/parse-int'; +import 'core-js/es6/parse-float'; +import 'core-js/es6/number'; +import 'core-js/es6/math'; +import 'core-js/es6/string'; +import 'core-js/es6/date'; +import 'core-js/es6/array'; +import 'core-js/es7/array'; +import 'core-js/es6/regexp'; +import 'core-js/es6/map'; +import 'core-js/es6/weak-map'; +import 'core-js/es6/set'; + +/** IE10 and IE11 requires the following for NgClass support on SVG elements */ +// import 'classlist.js'; // Run `npm install --save classlist.js`. + +/** Evergreen browsers require these. **/ +import 'core-js/es6/reflect'; +import 'core-js/es7/reflect'; + +/** + * Required to support Web Animations `@angular/animation`. + * Needed for: All but Chrome, Firefox and Opera. http://caniuse.com/#feat=web-animation + **/ +// import 'web-animations-js'; // Run `npm install --save web-animations-js`. + +/*************************************************************************************************** + * Zone JS is required by Angular itself. + */ +import 'zone.js/dist/zone'; // Included with Angular CLI. + +/*************************************************************************************************** + * APPLICATION IMPORTS + */ + +/** + * Date, currency, decimal and percent pipes. + * Needed for: All but Chrome, Firefox, Edge, IE11 and Safari 10 + */ +// import 'intl'; // Run `npm install --save intl`. +/** + * Need to import at least one locale-data with intl. + */ +// import 'intl/locale-data/jsonp/en'; + +require('../manifest.webapp'); diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/shared/alert/alert-error.component.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/shared/alert/alert-error.component.ts new file mode 100644 index 000000000000..892e2d828cb0 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/shared/alert/alert-error.component.ts @@ -0,0 +1,110 @@ +import { Component, OnDestroy } from '@angular/core'; +import { JhiEventManager, JhiAlert, JhiAlertService } from 'ng-jhipster'; +import { Subscription } from 'rxjs'; + +@Component({ + selector: 'jhi-alert-error', + template: ` + + ` +}) +export class JhiAlertErrorComponent implements OnDestroy { + alerts: any[]; + cleanHttpErrorListener: Subscription; + /* tslint:disable */ + constructor(private alertService: JhiAlertService, private eventManager: JhiEventManager) { + /* tslint:enable */ + this.alerts = []; + + this.cleanHttpErrorListener = eventManager.subscribe('bookstoreApp.httpError', response => { + let i; + const httpErrorResponse = response.content; + switch (httpErrorResponse.status) { + // connection refused, server not reachable + case 0: + this.addErrorAlert('Server not reachable', 'error.server.not.reachable'); + break; + + case 400: + const arr = httpErrorResponse.headers.keys(); + let errorHeader = null; + let entityKey = null; + arr.forEach(entry => { + if (entry.toLowerCase().endsWith('app-error')) { + errorHeader = httpErrorResponse.headers.get(entry); + } else if (entry.toLowerCase().endsWith('app-params')) { + entityKey = httpErrorResponse.headers.get(entry); + } + }); + if (errorHeader) { + const entityName = entityKey; + this.addErrorAlert(errorHeader, errorHeader, { entityName }); + } else if (httpErrorResponse.error !== '' && httpErrorResponse.error.fieldErrors) { + const fieldErrors = httpErrorResponse.error.fieldErrors; + for (i = 0; i < fieldErrors.length; i++) { + const fieldError = fieldErrors[i]; + if (['Min', 'Max', 'DecimalMin', 'DecimalMax'].includes(fieldError.message)) { + fieldError.message = 'Size'; + } + // convert 'something[14].other[4].id' to 'something[].other[].id' so translations can be written to it + const convertedField = fieldError.field.replace(/\[\d*\]/g, '[]'); + const fieldName = convertedField.charAt(0).toUpperCase() + convertedField.slice(1); + this.addErrorAlert('Error on field "' + fieldName + '"', 'error.' + fieldError.message, { fieldName }); + } + } else if (httpErrorResponse.error !== '' && httpErrorResponse.error.message) { + this.addErrorAlert( + httpErrorResponse.error.message, + httpErrorResponse.error.message, + httpErrorResponse.error.params + ); + } else { + this.addErrorAlert(httpErrorResponse.error); + } + break; + + case 404: + this.addErrorAlert('Not found', 'error.url.not.found'); + break; + + default: + if (httpErrorResponse.error !== '' && httpErrorResponse.error.message) { + this.addErrorAlert(httpErrorResponse.error.message); + } else { + this.addErrorAlert(httpErrorResponse.error); + } + } + }); + } + + setClasses(alert) { + return { + toast: !!alert.toast, + [alert.position]: true + }; + } + + ngOnDestroy() { + if (this.cleanHttpErrorListener !== undefined && this.cleanHttpErrorListener !== null) { + this.eventManager.destroy(this.cleanHttpErrorListener); + this.alerts = []; + } + } + + addErrorAlert(message, key?, data?) { + const newAlert: JhiAlert = { + type: 'danger', + msg: message, + timeout: 5000, + toast: this.alertService.isToast(), + scoped: true + }; + + this.alerts.push(this.alertService.addAlert(newAlert, this.alerts)); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/shared/alert/alert.component.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/shared/alert/alert.component.ts new file mode 100644 index 000000000000..a77c3e72c566 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/shared/alert/alert.component.ts @@ -0,0 +1,35 @@ +import { Component, OnDestroy, OnInit } from '@angular/core'; +import { JhiAlertService } from 'ng-jhipster'; + +@Component({ + selector: 'jhi-alert', + template: ` + + ` +}) +export class JhiAlertComponent implements OnInit, OnDestroy { + alerts: any[]; + + constructor(private alertService: JhiAlertService) {} + + ngOnInit() { + this.alerts = this.alertService.get(); + } + + setClasses(alert) { + return { + toast: !!alert.toast, + [alert.position]: true + }; + } + + ngOnDestroy() { + this.alerts = []; + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/shared/auth/has-any-authority.directive.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/shared/auth/has-any-authority.directive.ts new file mode 100644 index 000000000000..0f8cefb28ee4 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/shared/auth/has-any-authority.directive.ts @@ -0,0 +1,42 @@ +import { Directive, Input, TemplateRef, ViewContainerRef } from '@angular/core'; +import { AccountService } from 'app/core/auth/account.service'; + +/** + * @whatItDoes Conditionally includes an HTML element if current user has any + * of the authorities passed as the `expression`. + * + * @howToUse + * ``` + * ... + * + * ... + * ``` + */ +@Directive({ + selector: '[jhiHasAnyAuthority]' +}) +export class HasAnyAuthorityDirective { + private authorities: string[]; + + constructor( + private accountService: AccountService, + private templateRef: TemplateRef, + private viewContainerRef: ViewContainerRef + ) {} + + @Input() + set jhiHasAnyAuthority(value: string | string[]) { + this.authorities = typeof value === 'string' ? [value] : value; + this.updateView(); + // Get notified each time authentication state changes. + this.accountService.getAuthenticationState().subscribe(identity => this.updateView()); + } + + private updateView(): void { + const hasAnyAuthority = this.accountService.hasAnyAuthority(this.authorities); + this.viewContainerRef.clear(); + if (hasAnyAuthority) { + this.viewContainerRef.createEmbeddedView(this.templateRef); + } + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/shared/constants/error.constants.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/shared/constants/error.constants.ts new file mode 100644 index 000000000000..2ebea942204c --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/shared/constants/error.constants.ts @@ -0,0 +1,4 @@ +export const PROBLEM_BASE_URL = 'https://www.jhipster.tech/problem'; +export const EMAIL_ALREADY_USED_TYPE = PROBLEM_BASE_URL + '/email-already-used'; +export const LOGIN_ALREADY_USED_TYPE = PROBLEM_BASE_URL + '/login-already-used'; +export const EMAIL_NOT_FOUND_TYPE = PROBLEM_BASE_URL + '/email-not-found'; diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/shared/constants/input.constants.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/shared/constants/input.constants.ts new file mode 100644 index 000000000000..1e3978a9b3c5 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/shared/constants/input.constants.ts @@ -0,0 +1,2 @@ +export const DATE_FORMAT = 'YYYY-MM-DD'; +export const DATE_TIME_FORMAT = 'YYYY-MM-DDTHH:mm'; diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/shared/constants/pagination.constants.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/shared/constants/pagination.constants.ts new file mode 100644 index 000000000000..a148d4579ba3 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/shared/constants/pagination.constants.ts @@ -0,0 +1 @@ +export const ITEMS_PER_PAGE = 20; diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/shared/index.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/shared/index.ts new file mode 100644 index 000000000000..92a8ccef73d7 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/shared/index.ts @@ -0,0 +1,12 @@ +export * from './constants/error.constants'; +export * from './constants/pagination.constants'; +export * from './constants/input.constants'; +export * from './alert/alert.component'; +export * from './alert/alert-error.component'; +export * from './auth/has-any-authority.directive'; +export * from './login/login.component'; +export * from './util/request-util'; +export * from './shared-libs.module'; +export * from './shared-common.module'; +export * from './shared.module'; +export * from './util/datepicker-adapter'; diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/shared/login/login.component.html b/jhipster-6/bookstore-monolith/src/main/webapp/app/shared/login/login.component.html new file mode 100644 index 000000000000..7eb35364b48b --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/shared/login/login.component.html @@ -0,0 +1,35 @@ + + diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/shared/login/login.component.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/shared/login/login.component.ts new file mode 100644 index 000000000000..46711a06192d --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/shared/login/login.component.ts @@ -0,0 +1,87 @@ +import { Component, AfterViewInit, Renderer, ElementRef } from '@angular/core'; +import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; +import { Router } from '@angular/router'; +import { JhiEventManager } from 'ng-jhipster'; + +import { LoginService } from 'app/core/login/login.service'; +import { StateStorageService } from 'app/core/auth/state-storage.service'; + +@Component({ + selector: 'jhi-login-modal', + templateUrl: './login.component.html' +}) +export class JhiLoginModalComponent implements AfterViewInit { + authenticationError: boolean; + password: string; + rememberMe: boolean; + username: string; + credentials: any; + + constructor( + private eventManager: JhiEventManager, + private loginService: LoginService, + private stateStorageService: StateStorageService, + private elementRef: ElementRef, + private renderer: Renderer, + private router: Router, + public activeModal: NgbActiveModal + ) { + this.credentials = {}; + } + + ngAfterViewInit() { + setTimeout(() => this.renderer.invokeElementMethod(this.elementRef.nativeElement.querySelector('#username'), 'focus', []), 0); + } + + cancel() { + this.credentials = { + username: null, + password: null, + rememberMe: true + }; + this.authenticationError = false; + this.activeModal.dismiss('cancel'); + } + + login() { + this.loginService + .login({ + username: this.username, + password: this.password, + rememberMe: this.rememberMe + }) + .then(() => { + this.authenticationError = false; + this.activeModal.dismiss('login success'); + if (this.router.url === '/register' || /^\/activate\//.test(this.router.url) || /^\/reset\//.test(this.router.url)) { + this.router.navigate(['']); + } + + this.eventManager.broadcast({ + name: 'authenticationSuccess', + content: 'Sending Authentication Success' + }); + + // previousState was set in the authExpiredInterceptor before being redirected to login modal. + // since login is successful, go to stored previousState and clear previousState + const redirect = this.stateStorageService.getUrl(); + if (redirect) { + this.stateStorageService.storeUrl(null); + this.router.navigate([redirect]); + } + }) + .catch(() => { + this.authenticationError = true; + }); + } + + register() { + this.activeModal.dismiss('to state register'); + this.router.navigate(['/register']); + } + + requestResetPassword() { + this.activeModal.dismiss('to state requestReset'); + this.router.navigate(['/reset', 'request']); + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/shared/model/book.model.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/shared/model/book.model.ts new file mode 100644 index 000000000000..ee943a4127e0 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/shared/model/book.model.ts @@ -0,0 +1,21 @@ +import { Moment } from 'moment'; + +export interface IBook { + id?: number; + title?: string; + author?: string; + published?: Moment; + quantity?: number; + price?: number; +} + +export class Book implements IBook { + constructor( + public id?: number, + public title?: string, + public author?: string, + public published?: Moment, + public quantity?: number, + public price?: number + ) {} +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/shared/shared-common.module.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/shared/shared-common.module.ts new file mode 100644 index 000000000000..c6e52d67c561 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/shared/shared-common.module.ts @@ -0,0 +1,10 @@ +import { NgModule } from '@angular/core'; + +import { BookstoreSharedLibsModule, JhiAlertComponent, JhiAlertErrorComponent } from './'; + +@NgModule({ + imports: [BookstoreSharedLibsModule], + declarations: [JhiAlertComponent, JhiAlertErrorComponent], + exports: [BookstoreSharedLibsModule, JhiAlertComponent, JhiAlertErrorComponent] +}) +export class BookstoreSharedCommonModule {} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/shared/shared-libs.module.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/shared/shared-libs.module.ts new file mode 100644 index 000000000000..79ac658edbe9 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/shared/shared-libs.module.ts @@ -0,0 +1,20 @@ +import { NgModule } from '@angular/core'; +import { FormsModule } from '@angular/forms'; +import { CommonModule } from '@angular/common'; +import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; +import { NgJhipsterModule } from 'ng-jhipster'; +import { InfiniteScrollModule } from 'ngx-infinite-scroll'; +import { CookieModule } from 'ngx-cookie'; +import { FontAwesomeModule } from '@fortawesome/angular-fontawesome'; + +@NgModule({ + imports: [NgbModule.forRoot(), InfiniteScrollModule, CookieModule.forRoot(), FontAwesomeModule], + exports: [FormsModule, CommonModule, NgbModule, NgJhipsterModule, InfiniteScrollModule, FontAwesomeModule] +}) +export class BookstoreSharedLibsModule { + static forRoot() { + return { + ngModule: BookstoreSharedLibsModule + }; + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/shared/shared.module.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/shared/shared.module.ts new file mode 100644 index 000000000000..695b16679316 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/shared/shared.module.ts @@ -0,0 +1,21 @@ +import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; +import { NgbDateAdapter } from '@ng-bootstrap/ng-bootstrap'; + +import { NgbDateMomentAdapter } from './util/datepicker-adapter'; +import { BookstoreSharedLibsModule, BookstoreSharedCommonModule, JhiLoginModalComponent, HasAnyAuthorityDirective } from './'; + +@NgModule({ + imports: [BookstoreSharedLibsModule, BookstoreSharedCommonModule], + declarations: [JhiLoginModalComponent, HasAnyAuthorityDirective], + providers: [{ provide: NgbDateAdapter, useClass: NgbDateMomentAdapter }], + entryComponents: [JhiLoginModalComponent], + exports: [BookstoreSharedCommonModule, JhiLoginModalComponent, HasAnyAuthorityDirective], + schemas: [CUSTOM_ELEMENTS_SCHEMA] +}) +export class BookstoreSharedModule { + static forRoot() { + return { + ngModule: BookstoreSharedModule + }; + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/shared/util/datepicker-adapter.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/shared/util/datepicker-adapter.ts new file mode 100644 index 000000000000..524a38c83438 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/shared/util/datepicker-adapter.ts @@ -0,0 +1,21 @@ +/** + * Angular bootstrap Date adapter + */ +import { Injectable } from '@angular/core'; +import { NgbDateAdapter, NgbDateStruct } from '@ng-bootstrap/ng-bootstrap'; +import { Moment } from 'moment'; +import * as moment from 'moment'; + +@Injectable() +export class NgbDateMomentAdapter extends NgbDateAdapter { + fromModel(date: Moment): NgbDateStruct { + if (date != null && moment.isMoment(date) && date.isValid()) { + return { year: date.year(), month: date.month() + 1, day: date.date() }; + } + return null; + } + + toModel(date: NgbDateStruct): Moment { + return date ? moment(date.year + '-' + date.month + '-' + date.day, 'YYYY-MM-DD') : null; + } +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/shared/util/request-util.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/shared/util/request-util.ts new file mode 100644 index 000000000000..6579c3cb2a1b --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/shared/util/request-util.ts @@ -0,0 +1,18 @@ +import { HttpParams } from '@angular/common/http'; + +export const createRequestOption = (req?: any): HttpParams => { + let options: HttpParams = new HttpParams(); + if (req) { + Object.keys(req).forEach(key => { + if (key !== 'sort') { + options = options.set(key, req[key]); + } + }); + if (req.sort) { + req.sort.forEach(val => { + options = options.append('sort', val); + }); + } + } + return options; +}; diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/app/vendor.ts b/jhipster-6/bookstore-monolith/src/main/webapp/app/vendor.ts new file mode 100644 index 000000000000..e8923d5c66b3 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/app/vendor.ts @@ -0,0 +1,81 @@ +/* after changing this file run 'npm run webpack:build' */ +/* tslint:disable */ +import '../content/scss/vendor.scss'; + +// Imports all fontawesome core and solid icons + +import { library } from '@fortawesome/fontawesome-svg-core'; +import { + faUser, + faSort, + faSortUp, + faSortDown, + faSync, + faEye, + faBan, + faTimes, + faArrowLeft, + faSave, + faPlus, + faPencilAlt, + faBars, + faThList, + faUserPlus, + faRoad, + faTachometerAlt, + faHeart, + faList, + faBell, + faBook, + faHdd, + faFlag, + faWrench, + faClock, + faCloud, + faSignOutAlt, + faSignInAlt, + faCalendarAlt, + faSearch, + faTrashAlt, + faAsterisk, + faTasks, + faHome +} from '@fortawesome/free-solid-svg-icons'; + +// Adds the SVG icon to the library so you can use it in your page +library.add(faUser); +library.add(faSort); +library.add(faSortUp); +library.add(faSortDown); +library.add(faSync); +library.add(faEye); +library.add(faBan); +library.add(faTimes); +library.add(faArrowLeft); +library.add(faSave); +library.add(faPlus); +library.add(faPencilAlt); +library.add(faBars); +library.add(faHome); +library.add(faThList); +library.add(faUserPlus); +library.add(faRoad); +library.add(faTachometerAlt); +library.add(faHeart); +library.add(faList); +library.add(faBell); +library.add(faTasks); +library.add(faBook); +library.add(faHdd); +library.add(faFlag); +library.add(faWrench); +library.add(faClock); +library.add(faCloud); +library.add(faSignOutAlt); +library.add(faSignInAlt); +library.add(faCalendarAlt); +library.add(faSearch); +library.add(faTrashAlt); +library.add(faAsterisk); + +// jhipster-needle-add-element-to-vendor - JHipster will add new menu items here diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/content/css/loading.css b/jhipster-6/bookstore-monolith/src/main/webapp/content/css/loading.css new file mode 100644 index 000000000000..a1e24615b4f6 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/content/css/loading.css @@ -0,0 +1,152 @@ +@keyframes lds-pacman-1 { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 50% { + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); + } + 100% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } +} +@-webkit-keyframes lds-pacman-1 { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 50% { + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); + } + 100% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } +} +@keyframes lds-pacman-2 { + 0% { + -webkit-transform: rotate(180deg); + transform: rotate(180deg); + } + 50% { + -webkit-transform: rotate(225deg); + transform: rotate(225deg); + } + 100% { + -webkit-transform: rotate(180deg); + transform: rotate(180deg); + } +} +@-webkit-keyframes lds-pacman-2 { + 0% { + -webkit-transform: rotate(180deg); + transform: rotate(180deg); + } + 50% { + -webkit-transform: rotate(225deg); + transform: rotate(225deg); + } + 100% { + -webkit-transform: rotate(180deg); + transform: rotate(180deg); + } +} +@keyframes lds-pacman-3 { + 0% { + -webkit-transform: translate(190px, 0); + transform: translate(190px, 0); + opacity: 0; + } + 20% { + opacity: 1; + } + 100% { + -webkit-transform: translate(70px, 0); + transform: translate(70px, 0); + opacity: 1; + } +} +@-webkit-keyframes lds-pacman-3 { + 0% { + -webkit-transform: translate(190px, 0); + transform: translate(190px, 0); + opacity: 0; + } + 20% { + opacity: 1; + } + 100% { + -webkit-transform: translate(70px, 0); + transform: translate(70px, 0); + opacity: 1; + } +} + +.app-loading { + font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; + position: relative; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + top: 10em; +} +.app-loading p { + display: block; + font-size: 1.17em; + margin-inline-start: 0px; + margin-inline-end: 0px; + font-weight: normal; +} + +.app-loading .lds-pacman { + position: relative; + margin: auto; + width: 200px !important; + height: 200px !important; + -webkit-transform: translate(-100px, -100px) scale(1) translate(100px, 100px); + transform: translate(-100px, -100px) scale(1) translate(100px, 100px); +} +.app-loading .lds-pacman > div:nth-child(2) div { + position: absolute; + top: 40px; + left: 40px; + width: 120px; + height: 60px; + border-radius: 120px 120px 0 0; + background: #bbcedd; + -webkit-animation: lds-pacman-1 1s linear infinite; + animation: lds-pacman-1 1s linear infinite; + -webkit-transform-origin: 60px 60px; + transform-origin: 60px 60px; +} +.app-loading .lds-pacman > div:nth-child(2) div:nth-child(2) { + -webkit-animation: lds-pacman-2 1s linear infinite; + animation: lds-pacman-2 1s linear infinite; +} +.app-loading .lds-pacman > div:nth-child(1) div { + position: absolute; + top: 97px; + left: -8px; + width: 24px; + height: 10px; + background-image: url('../images/logo-jhipster.png'); + background-size: contain; + -webkit-animation: lds-pacman-3 1s linear infinite; + animation: lds-pacman-3 1.5s linear infinite; +} +.app-loading .lds-pacman > div:nth-child(1) div:nth-child(1) { + -webkit-animation-delay: -0.67s; + animation-delay: -1s; +} +.app-loading .lds-pacman > div:nth-child(1) div:nth-child(2) { + -webkit-animation-delay: -0.33s; + animation-delay: -0.5s; +} +.app-loading .lds-pacman > div:nth-child(1) div:nth-child(3) { + -webkit-animation-delay: 0s; + animation-delay: 0s; +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_0.svg b/jhipster-6/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_0.svg new file mode 100644 index 000000000000..1f9ab527901d --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_0.svg @@ -0,0 +1,198 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_0_head-192.png b/jhipster-6/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_0_head-192.png new file mode 100644 index 0000000000000000000000000000000000000000..81330689211e5a082081222dcaf30c37ea6104cf GIT binary patch literal 13322 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 E2c#yGumAu6 literal 0 HcmV?d00001 diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_0_head-256.png b/jhipster-6/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_0_head-256.png new file mode 100644 index 0000000000000000000000000000000000000000..b4739ec3e47edbc81542888fd0fe7f9bb411c5b1 GIT binary patch literal 17812 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 literal 0 HcmV?d00001 diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_1.svg b/jhipster-6/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_1.svg new file mode 100644 index 000000000000..7a118f307712 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_1.svg @@ -0,0 +1,9387 @@ + + + +image/svg+xml \ No newline at end of file diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_1_head-192.png b/jhipster-6/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_1_head-192.png new file mode 100644 index 0000000000000000000000000000000000000000..dd2643c15dd3055d1ca3fc057e0e4f7b0b93b785 GIT binary patch literal 19660 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 literal 0 HcmV?d00001 diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_1_head-384.png b/jhipster-6/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_1_head-384.png new file mode 100644 index 0000000000000000000000000000000000000000..f930681c128095fb436ebc8b486e94baf6cfc186 GIT binary patch literal 48895 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 UO0?Ay3<5r~Qi_t*;zl9=2eGOgGynhq literal 0 HcmV?d00001 diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_1_head-512.png b/jhipster-6/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_1_head-512.png new file mode 100644 index 0000000000000000000000000000000000000000..9110dc8fe44bf6ed248a2723f15e900d87cec9a8 GIT binary patch literal 68803 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

Wv|Q)i4zQT>0V0j?|=lCiv9> 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 l0H^_Ab#1lF#l^+?e*r!59D4!FVj} + + +image/svg+xml \ No newline at end of file diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_2_head-192.png b/jhipster-6/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_2_head-192.png new file mode 100644 index 0000000000000000000000000000000000000000..2699ab447391d7a1dfb0fceb9f47e30183a731f9 GIT binary patch literal 11463 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 literal 0 HcmV?d00001 diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_2_head-384.png b/jhipster-6/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_2_head-384.png new file mode 100644 index 0000000000000000000000000000000000000000..da964fcb2e387f81a934f2dc669462aa4a6c85ea GIT binary patch literal 23850 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 literal 0 HcmV?d00001 diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_2_head-512.png b/jhipster-6/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_2_head-512.png new file mode 100644 index 0000000000000000000000000000000000000000..6337f5effb4ae653bf2daa4af71df885205dbd72 GIT binary patch literal 32300 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_3_head-192.png b/jhipster-6/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_3_head-192.png new file mode 100644 index 0000000000000000000000000000000000000000..35b91257fcce7a1664efa2979af2fa4ee4afb97a GIT binary patch literal 13573 zcmV+gHTuelP)vIUqe%r)2t=l9&G zeC|Ma6VMqzw+F#ICL#|h*LrC2ef#zX(B~>L^%NTQ@;JFVJvW2f7 z(<3ij`v~4#%P?DX5s)m!M^kZ-DUF8}5_ZV(%^jV3=F_}y&#A+G_$mjFq3q_1EkBO2`YEX z<(N~YAK2Ox6_0NV+&-(0Y#Y2&d;gR#6v*Zapv{vyWNtn8r=zFL*?-QIeqd|QJmr}m zf?PT4&O}N(sZ$)D=QEnkqP2d_^5v%WkEV8?Y?)w=lzwFE;x6skzXaCI#duX=4B8mX z*uRY_y+a}jr6A}(iPoBQCX4U;2aTn!-u&~C*8&}&3A9}4hu^v+W^DCy;IdYaH5I<^ znk^L_G#B85U8BSI`1p)C<75swiGhY2|jwq>0(g##!NlJOWK za&4ro?axn|AhgiZ58l4?S~2o7O1E1rgVq`mbu#tY5Q?tLXeR54lFLulIld*9eqd|Q zQZe#fTC8vYrA{A(1B4uhNF-t#ZN6kql5;F@rJHN8mB)90g+cdyrXUsx<2d%EFI|^x z*c%xH0$2Lsc|D&8-Vk)ZXBrZ*7`9S>_w*K=xgOgNva^G?FTEMVp9R@xJurap`S@Cw zj%8+I;xtB3YT}4?VkdvHR|F9u8jY^o8mcp`aY|FxNER?kLAX5?feBtHQ5B9B{%P|8}`k`BUzJ&16 zp!#bCj4^ngkL&w*u8Z&c7)pNx+qMaX9Ks=ox!qqGJlDHn`TfTpnyV25`R$Ipt#`dq z`Z>eguTQgqF$UN3C>C9co(INYDMd6IA>_>6uVReex70bjTJFN1i}3=P)3nn6aJnfR zO6zLKaY)2tbhIUiMI#skqnRw}(F|seE_FoI^26S;Kc17p2*A=0yuIhmO7lPv!kh{) zK%r0|mn$F&lJPi})pBB86gswnTC+Jbzk5U$o>0ho5cbAhWY{ z%_jqrqXEnJu#; zpxFnF$h(6Sq%JrP&N=I_mao8CF!zo>rRK(KCx)$NYwHZEso&!8ZQbjDIX5?F-3BBY z1%%MWm%&MLoz4L|4;PnQ(yGpz{Hv)uf)%4SB#|JzapFC*x)u`JH22f|T)`;o+E(@5 zl+q3AO+gD%9YW-atHB9P`qnw`0<1;TqnjigMZ(d!60Ri>F)a(*YFO#Vw{|7K%&Ccm zFSrnEard1Z$P!RP5Ryx@LSBLUyTSA%o*8k|k% zR{XhyBSdd_6B19BeQPjU6ZxH+Dq4K#!b=HXaTTF+FTgqb9IUQ|5IS|P4+NfXRo@LO zPf*L}%0XhUTuu1WD{8irWRln$-%R!=KgMLz0QiRv629_kVz=H-@#&{<_qK-#>tV>?nTUG4$X7=s9u2PJ%1$siSl-bHaVI&sj(0vdgL0ej?5tAXEXfh^;2)~q9P>E#Xc)WvadR-J`T zr_cj^Sc?{+lBM-tB2nyR%W>ANN40lg(j%DBQLIIasQO|l3)S9^y?h1E`i-S!05GYM zmc`R~zE8n*7kuUQ;=i<_|At*mhi>ipB*NdcLKpyND?e{Y0;YQtXVg%aO3;vqet-j zkD~_%(4(W6OcuN%#`i%$MPo=uC-$;l?A{efEI!_sea>1`wnpLtr9e$6-1t8J(Zl%r z_Tu*)$E4Gxu>c8$AQVO=5~%hL)cgg6)~>}_w}Ij_zrlMg@PJgomJb4d8hpnM;?V8O z-i0xNvp4PDgqx|I#KQIh$?MGjPId`hVTyT$3J`sj7Gv?qHnwz)j6-e z!Hp*Wi*0ygsp2G=#9pxqYtdpxEB{NCQFWvMWFv^1s|Rwmu5h;>9>CS7Y@q zM6IF6~2dea@6nE&ho`b;B zAOukJ7ZAJoZ5X$R`^w9xL;`D3_t?eCsSl$yy1x%S(1+^i#Ohv(w|^h`Z9kh;ze6Lb z6U5A88@HvqB|zs$bAC$0uAl@6Z#ox5kWiS=#?9C(R-HBq2N0#O7B0eBw-KwmWCwQd z@)_?08i6(8LSD4vns{ZGWD{sg>DqXKFg8Ugtff6cbal$XnI+M~Dx2bss2gW1PdS=W zdL~~C7`%bkDZcU;USD+&sffZ}z7qH4=6ox*Rc?>6si{sXpt<{W!$vOvFO-Vccb*Qd z*h2iO4`DA}Gp=v|2`31hbvf~CK8#8RN1u{Ng4i2ANO;|K6AA|q!CtVE*yZmdyuP;a z&E(s!7nW_88&&uAH@4Mz2Ca>TmHxzKM8Pa|-Pz~Kk!WqD+l$U7viat!)F>5gCwA!_ zh|~OZIw6!IcFB9N+N)<151)M{p_SF$#n!@wO>asCP-T%drfAkR)zJ)SSm}vyayg(1 z0W9khu95#&gvh3wCav8M|K?}>nSor<*+I_vUT%jEQ)i`6laQM`Y+ zk1zlG7x~+7eV$#f@0ip!yzaUhFPdQY^foPvU9NOPVByS-``#_OM1wIJ&-1YDS@0=p z+*4bfOHuKOS?%lh{7?Sk>;G;1^ZmcPmw)~I_s3()on@OT?0mR+c>t$pV%I$|($AYe zb}dKxONW)O-2ElK`-OYBWMk>&5+{Pa=p5XGFI4^=dU|npH%DQg97AUUJLWWO>9(FI zmr*RvZi+Wvb(gZ$HhGG@>9U*ov-f>w{PSba{el->d2al(inb$8UD?Cy8dHhl|NqOo zSkhHGe|w(G*M9Inr?jt5FR&IZYI?_89#~;S0&#{x6H3=IaR*;;-Pwin`Zbn_DeL&M z#ml*5)8r|fH0T>mW(i`W<88cG8vC0<Wue>c}&c*8_vt?`b&QnOEK_^NjTmJ&Q42+-0SUTt2yDzOerCT(Nel8H$>&3a+4 zTutPv>YV=2s*8zis!g*uUXjeUub{KT4a-puvBM;;{|FLE)@)nc^DFW%{iJrg7oMZ| z+vaYgQ|UC`SbV&8Vu^EqdTiDuEgGKQ)uPcoFu6ieKHnU1pq`Q(#n+y~-S^w-jkHJZ znIFtr;Q+=fkp1;{YkK&+<9o>O_<5b3HoxyFf7JNdU~V=WePFCK#Uy%e(RI;H{9Zae zQdhg&b3Y>g{Qa2xbaH|}u%FDM-^4o_Tx735e3;CmUoZ7JMPbIxQ`q@1*OD&1Fe6xOSOb4xP=Q%D8QnP<;Iviu<0$>R5t` z&%^jGdgN#z);$w+W{B*szl($uSe;7{JA%%Q;13z)3A~&~kVO4~#Qv8-+W?`DI{15Hd9# z;n#1{e+%+l`FHuETb7EmKKRFvH7mlY52Go**j#jy)*5%JrOQdQbbxCg!BfJAp`4y; z$QK$5`_X;Jnzn>f9p3I&&_jc@8_s}iEj3V4ll~0w_=(TP7`z58*FSn>wql%8 zFuqUjk%usa#@Rf^7&6(3=Va2)P7$SF`v@Ms_a0z;N9H!F^do1M(hE=g65ZcK$}?ja z&1CV*_C;#ag^md%%R(TXYk<(-UN`cG-d{w-EGns0?W^_d0Xno82%oZ^rqGW$oA4 z$x@hdM6(@xk}-%#Ae)~+ld|mWN`D&R{$_m5dhj$?x-k@f^(2i3q8MXHjb>-uxH*=E zU+&*FoO()s=UwQxIv8dO2;cK7tXa>K6A73doZNgMq&%z&E)=vb-Pq8-MaCD4)w@Uus^$3A9A%#;~Mzt0{tX2I65n zX)v|2UX&r5FQ9AOMTZ<`s=wozpo;RgMCoG8ibmR7U5lnA06hIr9|_6#eTv2Eu4)m% zveYC?H}KS~#4AIKk^st6_R7Pf=coE@lG48M*<1o=Ykl`j->rd_s(VRnT6GPFeLQwbK;;Q1bIKHsz; z#`AIi_FmLEOOVAKkc=Wl4?Ud0^rbNS`Y`+ZF!j`73E8M+3s5T-VqLQV>1u$w9E(GZ z%N1jw;MR@|3OgZk`AIKOIzhTlZdPpsuJq$uyArNfUkHu?Ml(4^fBGMEB@%?Y8{P__ zRxQH$zut&@*AwWUK3DsJYAAZ>Jx7rRZP1x$=uxYy3;)o8s%^Zn+HY0+u}Wn@r&#*k zD<7fxd?r&6_?qtdkqf9ZDPcC3M{AAtT>9?27k99^9JtaEC-nQjL+Fp*g7h{Yy($aa z3H{-laenVQq`|Ts^<qCdDZExh%);xtoQz zZ^dacDg;2SUW{737~XXyW+aO_JcvnUA@7!^*H{=yM35!(kd8X}c{Pyw%~SY=Le+Ae zl^iiA5DAAUy2VK=fP&8lB48N;&);$Aww~?4`WmBt?1-!XIh;=2i^#M*vnm{+>ut9a z?w+3G{gi_-3_tcLsb`-i9CCVOm;vh3iLBMPJ z-VdyZ0BdSA+p%Qu;8!lZ?{GH3=qwqyUO{PTvpC>B!bcY}OyYFp!b^gs9jquXDc`lFMI6E9?ThGYX%Y0D>2Z5<7T zLQ{#5IbT~Xt6>|c(zQq}Z$@_EU9V4L{$KbE?#6AYcO&w-sXsGDGx*R?Nj-CFlyudF z0>|&UoBY1lXZ-mz+HxK6eSeC})%^AOj||T|KmZ6->Bi{M8cibRnwd`w0%p_0sXN8+ z`@l4o|L|jvGW^72ElaFl54_Pd$M61k3P&pEPV}{&@%BtaDq8!Li`l280JqA2ht&Q>hTWa;Qd0Xno#@CmF*+2DXx!tdD{0DcT z=cdXr0Qvp0OBeu4<=7d1>R-qjxtZUE>Jc4J%^4QSIjjxxJo#Hb0tq z(XsVqV5Zd)FC00{vG08cKU-@xnI()Nw{H)9Kl}l@f#m&_oG?}`Z=dj4xwGm_83+Pb zdiUl-{|ZvM=(}*?!P}OeQ%_%Of0jM0O!R6*rd5(~hlkLk`|-0as##}z+~Iv_H`Opb zTUWTzt6r7a?B94*`iBh-)Fgtp^gGd7n-4(cbx8?tuD8DpkMxahdN}nS10Mz^u@8&^ zZ{z^(&_0X~Zk^Y~G{wGG(D`Ac2|j)$R!sG(%<}EIuySY-b7t8O558!S|61wi+Q=Ik z?Q`?C^w*5y8ldE+6UGm}IzNQlw+o#eU{($+zlb-oA9r96#&4dTYbwZ4Ep}g!mN;T& zl%rK0FTLl$KVXSUukIH4t*&rDm60h# zq^_KKRt272wGE-KW%d;a>qN_IO$&1W)bEVpk=gcZ#7s)BEXu}CcH?xd!HUgCf~xvZ zu0U;wghMrU;owxLR^e9R=?T=XBpeW0u5@3UNhJ^jT+6qGhWLAPUfYw))pOVwm7{0prz6N7} zX24WSp9)bnR$>uO*E*ce<)~0|5j2Hk6Mldb*Q1tY(Uyo$T1rkJ912f+Aqqv8kyN@? z^5lhkZs=?-b8v%bxza5tcf<@CG1G3+nnZPW&KN`#D$I_n>#-AyQFeXR7L4aJ z^7ury%5qPeWmzQSF(Tm*CwA+CV3ke%T5Hmo44G`U>gG==g=JY}eg6w}2{uc#Z1+A6 zF})}LD8|Sad+t3Llnd>=hDEVLSjoj$$;BA2fX)x&7e+9}nPdIEkWG$>efm3k57C_`a?yHF`J{!u31^^F9NA*b25xIa)uxBPSf> zp6|*(1<~Wc_wVdsmO0hL4r3)25t@Gv;f3q5+m<4s#H12w)(&>-uD11$ru><(6)Y>_ZH|OUobFA4ui_ z$B`|jnPjw;V1=;aU0CrhFb3o0(1kQQoWYsbhC4Ws=Ce@rXiLV)WOEcfk60uMN*K*# zQI;Yejp4d3xqOjY1}i`!7Mpa}Zik#ef)uNv<(BR^);7Q(Qa${m5ol987kIM}!Iem9 z6F6@boo~2dN`q4Nr?x~KV}w*XO}IZ<9E4@UIGLI9GX&Qq7HwV$z;h_vgue8DX!Bczr>d#7P?7#dU6P&!rij~AxPp+@# z`#$MxmP9;CBoe0JdZf~6viTg2ZR6NB+OPcU+LlE!5yx@HiV7NoTZ(ZTY4v&zbFq;F z417t9d@_i>M()4!d|~!g4t5^YWVm zPwwIHP!?lg-O^4Lv_;5b(J?~>3S%IbFObe;$rlP(N)d9Lv2*%lgAIp5w6`U&Z42Mm zD615t=y`rA%Vw#^$~=SsF(*nFFj)R4eM?SW=fB3gXOVg1H znM`JhhjpCN3e zo*7B|=!4JW?|B@&+N_ry2Zwm+;2^t?jPNHnZzd9&{{Bm}4YlGD)RIl)cRj=4XSWiK zL@-)2QX@OmR7ApIj49=CpMg#_pp4$Q;gQU&ubk__oLYJ<7-OW6$y~36kArzjL$9Q= zP`wwRy4Ry$e+qy9GgWJ?tXa~*W4n%U^ZC8g6fTh@YWYQ|p3UQ>yS1C=L=7ELibO0% zI+Llp0%et4Guprh=StylidcF+KXR7V)-A^HA%Q?jMw{#q{wu%0^wpo7cP3?@Kw-~| z9QnkXNW^2~RA$fj$mI%6g))uHiF{)7w$wi~-9ZyLDN6s_2VObv>;<7KZ#+A?8QXrd zSmD5m$4-SAIgJ0xBbedJ+X;yzOVjw$O%-dWdVPo3_j?!8mPjB{x@FT^kLQQU=JHdM z{nZ0+mVAkEw%FEhcd^$oHM!M9g<6bEw=WdZ;0I4 zQvUm_l|H)f`RfhpbJ^j(OQmPCRX%kHFh4OfU8#Sx`eoA5;T#|R=93&9t{k)GSc>yk z&gTtl7jwnhg><#mAlX_rs(T|=?}ZgD`^7^Uezs$PU%i$hQ=B|qZ(DIYR~+~;xon5sRqxpr6eU#K}Wt@P1-J8n?n@IRAWRF$^0ATje0qXnN_Q4Z>-Ki^eV z;ZU;1r(W&jsaN~>;sd1}`J2!0;l^{95)V%w*8mcko*yn()I9w15D&cA&%S}m0i#2a zE`G4?4|v!1FO$vZX-mY(0Q;U$w9cu#WuwSgo89+#of2h85R9oew=b7@<=g*q6g^AnXR!~GeT zWufUFE^Q1?zT8+odt+eNp<#9%8s;lM-Np4AySe4UUe@(=jJKI8ZLX;K>5f6Z_slVd zv-R!3AMd%D-jP?h?BGvG`x&CKDA7=uT(L-@Sfo%iV|CAEnmab$(TQU;crIdDXk}rY zGcy55l#MJ{wUN%=7e@E|_K|pg_!il4Z6Fbw4Jmze-;Nuy@yHJ)nymZcWI=`L9ZFOD zvd-yB-+MewrqKK`C|C5j|JeiF|Lg(QF74osD_3*X`bDU*mo!(@-2Y-fcRzES(L&>S z=D)x8KXKl%$B4QaMn^L!v9KLQBoaZ1q3C+}WyiQ^EKW2MMiT9iOJlUpXeLW6Qoz|< zBf`tFMJ+!2+FW+1Fa6S^?@eyJ>iZ1~JOyjw zXm2Of(M9O0ci@~q{f@pi1gm?)?U`4fnwEyGUQ|_j_TcUwlHK1z*|T!uG;(Yk$`m;; z5J>s4X^?=_-jjZHjQJuYVsR{c=0BtFd*m}2ln9ALl5iwOE}LWM^_S60&z^+@f-GKl zTYBeXO{Ea6s&u3L2MNVy7Z(I9h*wbh3=W!C4hKKAPaqfvWXLc1+g;y71d_2h@mO@m zP-dkRo>ydaG)*>}!F5Z&^T?0?-`NQvg0*D*e;L{SP{YKOib~JE_RKq_ed)&8Nmj!A zN=l!>()S!|9T~KDew2>b?46K#JB~4iV!V4)w6nLvbFc8f=!`z={XDemycY{J1<{}QbO2PY~8Yuuimki>(+EO z^;&z%;o0tMO1!vykys=|HeX;QJ&JD(wq;ihl@2*J(MSkA8Vpg!v@Q8;BkgBYx(Y|W z5ab11EeB0GQn_FPJmw|B+`07v{`-3`VsXdx@T3I^hd;TomoMDDnzh}H=Y0R+IUi&= z(uM1LjAnC0LLs8j2*zmgMYm#ROJ!Na=64ZEb_7OHl=dZE=@%Zpy59CPD?L7cR;<;j z=!`q#-ms~d>Y%Zktd?{FVaMW*D_8SxAHRm{H`Si3HZM)^_wP81zq)lb=Pat9p`CN$ zd}qTS0b@1Kb2&!GisXvSoMnum`n=Ou?UqN!CKiIjeAB!=UrKE(`iZ< z+kSg+l1yMhB2<^s&s#B{U+k!#E@oSb8#XQBjw@HOV&UvdcV4`*or_ks^YrT}?t7u1 zXZNQo<{%bh2>I1t4xzM$Yv0E+4%t+iP^^QF+x{~WnN{q^B4cWY9OAqh5d=-n@>q|0FF9f(~ zMH?5bXyeduk%xB<^2KbVJC9^|wJ*oOs7LSdS8;3`%eKkqXI6eG^2H+( zi=nk9y!IjzAN?X!NhH`bqHR~wl+r`dSq1x7LL;u&&UlE=Zatq*ymb@1kB(4uedZ@4 z^e#vcs^IdR3-r#5&^s@}8^=Cpp4`Fk1BzHA3|f<~P(#%iO)gWKxkmQxq^$-YuUQy7 zdVW3aCXHT5r`P$~Ye^=A`SF>_6xA3siHOblD^A^N%T`C%c*JQe76nVl=ZjSf5ft~l zME3b#5<9oyOsO@YLb19W`jh_BzQqP?rzNJ;h=b;IL1@)Rv=bf=af*h*w6`T{CK${; z-5T<%gp+kS)Fvs|nEGm@HiJsjJJcpgo~lscD9Ib&L$O#So6Vwii3%N!L`b&9XS{$B z5eoZS!gs_tkyt8~s<}K*R=RcrxnP+I3n~yPpfZEzbilm#ehS^ygY7tEvRSg(9NPG} z1&^tTB}IhxWE(0V_v=h>L^juIGfC-6R8!fR>p{e^h*#KcpRSe;prQ%7zi>Bh=Muu< z5MW59GZYF1yt0#r5}{+!5|jd|M!c9MjF<~*$~@(B?b5)rK(ie9QyupFZsz~NUy{k@ zD2&x*GcdlP3x~pVEL@1>OFMXH^|>vR#dyWbYPFdh?~T<_sbLVPw3+KmpWaFbFz)oI zQ~}yLI*G?3;CXoQPFS>@=-D-A;HDwUs(Eaiyrxgj%N{5yDShBHUeiy&8yUc{r%c-- zSb!@QBg2E3Vh(5dIwF?^k{oMhD0_u5$EQbhls7r?kKy6rPDEPj;#yE4@Zofy-U0m7 z0O4?GQYmd?48z02xcNNsj`_qdznR2G{w`3T`!tA1J|C%?LUml}mSrtzog^j9udsuk zi9vI^K}8byS`&*!C#4#-9gAYIKx&|$Vp~_u=-41&jJmL@tmFSsYI&=Lsd`pFO&v5R z5M6%}#X=DUB;&F1h%eXm&|`7y*~cH4D{;0|`(gQ--g2ck!k{_b5L&g7(7KDr7YY9- zFPq+5>y0~sN>luq;GpqG2By%Og|^Ol;JKs+2XPO)jI0Tib6O1*H**TW7~=qQ@(NZ8 zaXJ$mH0hswd(vl70-j4MH3A~!vN^)%T{TzYRJZheKEIR-bm*W_DKo{HVCii8ccRe= z4!zNuk&zKR&!_0Rgx6n!YNcbQ9Ku;cLqjvV)yEX=wR}B4fl6_0nc`{gpfQGgp-431 z5KXpCd|lQgv@(#qi1k7ujx*yFUsAd+bEfn&kwH^}AwP5+j3F9!=N^ ztAQCe5DGwxY1uvcRLrlyiiOjB2QLb1@k)yEPV)Hz#u$=q?S#t`DfzEFiyoY_6tEaE zGuCfa03tFwrB_M3I~A2KUEuV0&?K(k%IM*JV1!(1grUI!3dPcutB4TErSNwBW)3Bi z%9f5Xt7p@-DbycRJ}+)piEBHJEgk5%^$&37Ehd{uQz#b4LqG*c#AA@3^XYwQCX<0*b7E}qC1bz&1|J2u%|o}u9pnBTJ8$CWV6+LbXT z4lJ5YuhL*4oimw1qx|Xddamo0GDO=U?4`4sRGWaFwyvv8CbNp!2BSAvtGtp|?o4pd z*x?9~*vvCu?4s*YL4_yRjp^&U5|O!n_0DKZ51)T6u|$H7#Y@MlE1p2&%3J1K9t9T} zW2Ug4gFCL(ov-VRbj_`jp^I3(v$ zz{0-qy%nF)S{`qqNaq=2#{I#{^UWo|{@M0wpl+vf*j6OMXI@;}3D^rKl6j;?QVhPn zo6PVa&eC%#J(5i%5=Uv^Z`dHh*=%;aSgdMmYwK5*e}fp_4>X;LS5OBUX@4dk+dAI) zQ9>)$Py2r8-~O)BBc;V&T3Je4k5BOmAQEZc9Ze*@?vRdidV2l6_`+LIQ!(CcsDwl|HeVn{;STCX?GEvG~OpzSL-!8U}#6sh(%D zrRR4&P3Bksf#cZNcG)s!3?uh_b6R_Y87=)^x9r$PnGb#%MM^|+u|(qIhnc zP-qL(AVWqXk=LTp_;m*Puz^&ywjT6@so&Di)Myu@(ZhWuCM*yNIg@A zlgELU`D%@nE?;UgU`52lKXYFI2xw>i3(P(skG@iK0Ah&?*nfmicB+^eKYx)`Nigi|PoK#-h z_jRfILpY4RV1}$;V{1Bqh-u*zZ|bx3sffqp_eEo|bqIe{c0?d_xwDhdbvP>q^-Bf^sh`6y>;vYS2&H?!{ za2UXt`qy-*oM!BFKei=r{9S09PoY@E_cex6jaA>*m>Ec<#!M((bSuy509-VysFq|h zc{~=6f6Vp#3jq>|L_bh>J&sBjFQ>bMMnz-Hd-orc&E@gN5)z=n*BXCh`aVsSbo->n9$M zAE5#NNaK*%S^7+fB@&31x+MZ%#F{%{}e zk$scf%G7M!t+RH4wJix+OeT|k@p$siXe_==4DUA;oDP*}Q*in_XaGVh*3)t89{}Ka z9$Nc^LLqX~vr$aR=cj{Kx(0dNARms#vKv|&sVX9cXd>~gSS-HDAh%+eL=-q<9W-U= z*!t1&9eXZc!1FxvyPlrhNKdwO6VSSDV5b;9gQ(@Pc>KzEJpMJ2g`;y4o-86d9*_Sp zmPlNqe7zRoZ-66bVrJ;6Q1Ld}FMH#7?isB$Uf+~Mj+jZ+ie~A9e_oLP+t+4eJf2t| zO(gz07K=?fO3!(jgh*T4%duGE)6rPGS44hy!;<(BXNIy|XNuAR!t)jp+kE->XKVgs zube?96^7GFHKKGM%o7+sr7ZvKSUhoFG#>wpWHPzE(gUr}WLE(q;sM_QzVolY+H-c_ zp!XNA59Z&r{cxt;)8>p)di(=_PUfFJO>~nc_u>;I-te|bKNrj-rAMRDL)mO5CD6vq zI3Spx7~vfOM50KWbB{)_e=AN{ngxByrNw7xn|tD!8c zSdzB)eu{x_eV*9GzcZ!5WJ?zjlg*@efLuEE)p3wV5&fv|^KdmQt_Q8C#uXS+snmQ& zskaz0Zv%NFElyb6O6Xh$2}ke;j$(IB4Pum6WAXT;fP_pY^C7^pwSF|5Oa@A>IHi?d z4r5F-pUGUV#k@g8uEKB$r}0ZrhJ6Np5sxR{KUV{uHcFogV~m~6X3rHdS7PJ}FxLU6 zZfPfQ4eS=-88q9C$PTUbugC7t=M<-{(x<{0BZWd?rPlgfF=ms2&4O8D;4C1}+Oah- z1ZI~(c8cL;BeKh~yq)22+upIw>q*BMqx4EJ#z-!g>k;2yjmR51`BeFb92KUOgF>+bI4wxO?A*RUGyc00000 LNkvXXu0mjfv2Czq literal 0 HcmV?d00001 diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_3_head-256.png b/jhipster-6/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_3_head-256.png new file mode 100644 index 0000000000000000000000000000000000000000..098fd8fb05ae1f40a2ad8cef4547c2cae2adda83 GIT binary patch literal 19239 zcmV*pKt{ibP)`1aL%Tg?hqDfhW7Da*(MN$$QSOkJ3DhVvw z_UUuWIr(E2Wq10_otXuJ_j&M;d&@cB&VF;scfKMxPeqPyTR2bo)-@W|3iL`eD}hxS zA_4{g0rUe!Ag5s*$O#zNnu8L3P$S;dLLbnkcyZbNhsS#O>zs9nUJEc=IC970s5XuF zBlJ7bTnAhnY!CXNM!W#x1u6K!xRLzPhWmFp!S?a?;ha`XeIN43D~o?hDC6ff`fec6 zwax`ut$6|=9+SfV_TmSQyweK@jLP5e?xFtuVtCyRRs47p}u-vN#BNw zdEggThQn#KT4}FeYcU`N18AWX+L1zdS}O(eH-Kw;Eo(KD)<027|GncD{%Y;RW2s)t z(+kdO#nd-r4h<~10_0Cg^fe0B30MipsxJw4qG!!0Sre@_j^~XO3eGdW@*bC3KfK}b z%&uO`)eX)%#nks9hhAKAixl$Yx-i*f3$KH?s3XF45XW`N7YZm}9aLIBqzv(wmp+z$ zqt|kEinB&B5B$Q)u$}V%73g0>v#RBWENcSS?GI42uHrZj`9cw2DXrnVX!WO?cVr*! zwOm0n>lIVqhdlDqvR@GBKhUtK-S&hXMmvQdMC%<|Q*cTnsMZ<~k80olcblKczS3*a zf?`%H=CQk%ZS>H8BjAdl+7zaV_Pn5)>nTbp@`VCL#|7|&=1&Ug^zUwc9=F%Bwactj zObz15Jxf1>=Dz{qKpPhVv<|e%UgLNk*<2p26u@)7HDNJ8MMZeLceRn_RRJ!b=@{SSIonAFZ(Nj{#38!I1>%Hu8Zq> zxUL66V;Ba8G?0eGloBZor0n^}R~OIoNM&+>9z)10H*KHX*K3&?p{Jkhk-L|ESi_fl zDZ^g2*(Kj9X(b`nEF

+u_yv@`A>EvKGth_YSGo< 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 DEYbKo literal 0 HcmV?d00001 diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/content/scss/_bootstrap-variables.scss b/jhipster-6/bookstore-monolith/src/main/webapp/content/scss/_bootstrap-variables.scss new file mode 100644 index 000000000000..be0f226497ab --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/content/scss/_bootstrap-variables.scss @@ -0,0 +1,42 @@ +/* +* Bootstrap overrides https://getbootstrap.com/docs/4.0/getting-started/theming/ +* All values defined in bootstrap source +* https://github.com/twbs/bootstrap/blob/v4-dev/scss/_variables.scss can be overwritten here +* Make sure not to add !default to values here +*/ + +// Colors: +// Grayscale and brand colors for use across Bootstrap. + +$primary: #3e8acc; +$success: #28a745; +$info: #17a2b8; +$warning: #ffc107; +$danger: #dc3545; + +// Options: +// Quickly modify global styling by enabling or disabling optional features. +$enable-rounded: true; +$enable-shadows: false; +$enable-gradients: false; +$enable-transitions: true; +$enable-hover-media-query: false; +$enable-grid-classes: true; +$enable-print-styles: true; + +// Components: +// Define common padding and border radius sizes and more. + +$border-radius: 0.15rem; +$border-radius-lg: 0.125rem; +$border-radius-sm: 0.1rem; + +// Body: +// Settings for the `` element. + +$body-bg: #e4e5e6; + +// Typography: +// Font, line-height, and color for body text, headings, and more. + +$font-size-base: 1rem; diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/content/scss/global.scss b/jhipster-6/bookstore-monolith/src/main/webapp/content/scss/global.scss new file mode 100644 index 000000000000..cfbb9bf5b88e --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/content/scss/global.scss @@ -0,0 +1,226 @@ +@import 'bootstrap-variables'; + +/* ============================================================== +Bootstrap tweaks +===============================================================*/ + +body, +h1, +h2, +h3, +h4 { + font-weight: 300; +} + +a { + color: #533f03; + font-weight: bold; +} + +a:hover { + color: #533f03; + font-weight: bold; + /* make sure browsers use the pointer cursor for anchors, even with no href */ + cursor: pointer; +} + +/* ========================================================================== +Browser Upgrade Prompt +========================================================================== */ +.browserupgrade { + margin: 0.2em 0; + background: #ccc; + color: #000; + padding: 0.2em 0; +} + +/* ========================================================================== +Generic styles +========================================================================== */ + +/* Error highlight on input fields */ +.ng-valid[required], +.ng-valid.required { + border-left: 5px solid green; +} + +.ng-invalid:not(form) { + border-left: 5px solid red; +} + +/* other generic styles */ + +.jh-card { + padding: 1.5%; + margin-top: 20px; + border: none; +} + +.error { + color: white; + background-color: red; +} + +.pad { + padding: 10px; +} + +.w-40 { + width: 40% !important; +} + +.w-60 { + width: 60% !important; +} + +.break { + white-space: normal; + word-break: break-all; +} + +.readonly { + background-color: #eee; + opacity: 1; +} + +.footer { + border-top: 1px solid rgba(0, 0, 0, 0.125); +} + +.hand, +[jhisortby] { + cursor: pointer; +} + +/* ========================================================================== +Custom alerts for notification +========================================================================== */ +.alerts { + .alert { + text-overflow: ellipsis; + pre { + background: none; + border: none; + font: inherit; + color: inherit; + padding: 0; + margin: 0; + } + .popover pre { + font-size: 10px; + } + } + .toast { + position: fixed; + width: 100%; + &.left { + left: 5px; + } + &.right { + right: 5px; + } + &.top { + top: 55px; + } + &.bottom { + bottom: 55px; + } + } +} + +@media screen and (min-width: 480px) { + .alerts .toast { + width: 50%; + } +} + +/* ========================================================================== +entity tables helpers +========================================================================== */ + +/* Remove Bootstrap padding from the element +http://stackoverflow.com/questions/19562903/remove-padding-from-columns-in-bootstrap-3 */ +@mixin no-padding($side) { + @if $side == 'all' { + .no-padding { + padding: 0 !important; + } + } @else { + .no-padding-#{$side} { + padding-#{$side}: 0 !important; + } + } +} +@include no-padding('left'); +@include no-padding('right'); +@include no-padding('top'); +@include no-padding('bottom'); +@include no-padding('all'); + +/* bootstrap 3 input-group 100% width +http://stackoverflow.com/questions/23436430/bootstrap-3-input-group-100-width */ +.width-min { + width: 1% !important; +} + +/* Makes toolbar not wrap on smaller screens +http://www.sketchingwithcss.com/samplechapter/cheatsheet.html#right */ +.flex-btn-group-container { + display: -webkit-flex; + display: flex; + -webkit-flex-direction: row; + flex-direction: row; + -webkit-justify-content: flex-end; + justify-content: flex-end; +} + +/* ========================================================================== +entity detail page css +========================================================================== */ +.row.jh-entity-details > { + dd { + margin-bottom: 15px; + } +} + +@media screen and (min-width: 768px) { + .row.jh-entity-details > { + dt { + margin-bottom: 15px; + } + dd { + border-bottom: 1px solid #eee; + padding-left: 180px; + margin-left: 0; + } + } +} + +/* ========================================================================== +ui bootstrap tweaks +========================================================================== */ +.nav, +.pagination, +.carousel, +.panel-title a { + cursor: pointer; +} + +.datetime-picker-dropdown > li.date-picker-menu div > table .btn-default, +.uib-datepicker-popup > li > div.uib-datepicker > table .btn-default { + border: 0; +} + +.datetime-picker-dropdown > li.date-picker-menu div > table:focus, +.uib-datepicker-popup > li > div.uib-datepicker > table:focus { + outline: none; +} + +.thread-dump-modal-lock { + max-width: 450px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +/* jhipster-needle-scss-add-main JHipster will add new css style */ diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/content/scss/vendor.scss b/jhipster-6/bookstore-monolith/src/main/webapp/content/scss/vendor.scss new file mode 100644 index 000000000000..12a8f54b8394 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/content/scss/vendor.scss @@ -0,0 +1,12 @@ +/* after changing this file run 'npm run webpack:build' */ + +/*************************** +put Sass variables here: +eg $input-color: red; +****************************/ +// Override Boostrap variables +@import 'bootstrap-variables'; +// Import Bootstrap source files from node_modules +@import '~bootstrap/scss/bootstrap'; + +/* jhipster-needle-scss-add-vendor JHipster will add new css style */ diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/favicon.ico b/jhipster-6/bookstore-monolith/src/main/webapp/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..4179874f53b3c3b0ba9e2a401412f814ab6296bd GIT binary patch literal 1574 zcmV+>2HE+EP)000H;Nkl9r4a2J+cS@yzSX6E!^*k!$-D-4;C?DsI4Z2te8^PT@c z=RfD)VMK(b3{GnU7K#)Bt&t+2HBtn$Mv8#eNDUS>&~)z8>N1c(q8rNd{sPjn1MM2QHDA^sG2W;HKsEVpi{%G+8~m}54A zpq~8zXet!#9Gbj-*V8>RHQ@_Oa=ck5fDynmyijTRbXS$xsGFssxLtW3`my8G-!>%7 zn;n<%&U37xG-qc+$&NL}Ic8(r8P8{L>@pz`5wF~FxA(hl3{Q#@0mJ|T!>orWW&$y= zwZ)lV?q9=mOj&=001@Fo=j2<5|CsUovve~87<4?ht)^g4)54xHIM_fH6g9vTH~{$6e3n@@!>>0A((rb8tLK5s#V0 zMm+wn&))p*T>q|hCGR#@SL9}ZK#Tw|V#*5$4}y`?UCz_p4!1wNkO1l#@e&9G#+VYs zEG&vW!|wTsW3iPFM8p#vgQq%eFRm{7prxk1*aAS&G~ti@^w-GQ9%mpd0W^=8Nrc@q z?FmG(O?n~{0D#CgKIQg@lG#5`2LTaLZtu09`*&npbwOKeU4B;jv8(n!ddI?|{BT~F zzml*h^*el9D=mnp(SK|%RkC6{JP5dS>;C22j@;ZLQI=y-twP>a1a%F2w^mvhW1N!C zItRzq%;^AP-WFw5y#6R|j(8Qh9Dt}K_u4&+p(d6Y7r5u2fMIuVYB~yqz^KPR<_)T> zVUZCQ2K>q>IWj4>kGx1p%HD(9OEwu=KUlGU-EF%U2| z6%r-`VTl%YwkK@x(j4)7%q9E||Yz*Vu z-KgXDY^wP1l~c9KAAp;kIku<%ZR4V3H)gcci^L zxuYQ7iwPXJy}sz+_S%}ltQn(|jw6aU+5iCCMBw-}`=x=2s3a#J7eur?P5(n%lfW3; zzojxs0t_(d_}%ME4>VV=%*&kl@mY?4RLIPDrr1%QWBTmX>U-{zUphzI`^LkPoTQkY z^?7=MW3nvEM4$hB{Zyw7M3hi@DgLIIc}3Z#J)0`_Hm$Unjj=qofc>keP`dJ1mj{ks?4R(3kPwGF$MQ4Nw$&8u zY$#b@Zsp>+MfD;l;gbiMsB74J{+6r5=JEI=N`S;Tl0o2i)aJImRADmkV6kfzMM5Yl zb`4GR+C9Ed)T9?ySkhM)WtCdZJg310p5oRacks5uH}YWG9~KQdzS3&iP?nXGu8&`< zB@h73l>ryEsGJ*5{SM`E0!tK2{&F`(Kx?E3XpIyBt&t+2HBtn$Mv8#eND + + + + + + Bookstore + + + + + + + + + + + +

+ + + + + + + + diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/manifest.webapp b/jhipster-6/bookstore-monolith/src/main/webapp/manifest.webapp new file mode 100644 index 000000000000..42b606ea1d66 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/manifest.webapp @@ -0,0 +1,31 @@ +{ + "name": "Bookstore", + "short_name": "Bookstore", + "icons": [ + { + "src": "./content/images/jhipster_family_member_0_head-192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "./content/images/jhipster_family_member_0_head-256.png", + "sizes": "256x256", + "type": "image/png" + }, + { + "src": "./content/images/jhipster_family_member_0_head-384.png", + "sizes": "384x384", + "type": "image/png" + }, + { + "src": "./content/images/jhipster_family_member_0_head-512.png", + "sizes": "512x512", + "type": "image/png" + } + ], + "theme_color": "#000000", + "background_color": "#e0e0e0", + "start_url": "/index.html", + "display": "standalone", + "orientation": "portrait" +} diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/robots.txt b/jhipster-6/bookstore-monolith/src/main/webapp/robots.txt new file mode 100644 index 000000000000..7cda27477dd9 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/robots.txt @@ -0,0 +1,11 @@ +# robotstxt.org/ + +User-agent: * +Disallow: /api/account +Disallow: /api/account/change-password +Disallow: /api/account/sessions +Disallow: /api/audits/ +Disallow: /api/logs/ +Disallow: /api/users/ +Disallow: /management/ +Disallow: /v2/api-docs/ diff --git a/jhipster-6/bookstore-monolith/src/main/webapp/swagger-ui/index.html b/jhipster-6/bookstore-monolith/src/main/webapp/swagger-ui/index.html new file mode 100644 index 000000000000..416eacef70a7 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/main/webapp/swagger-ui/index.html @@ -0,0 +1,166 @@ + + + + + Swagger UI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 
+
+ + diff --git a/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/config/WebConfigurerUnitTest.java b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/config/WebConfigurerUnitTest.java new file mode 100644 index 000000000000..44452caac96b --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/config/WebConfigurerUnitTest.java @@ -0,0 +1,164 @@ +package com.baeldung.jhipster6.config; + +import io.github.jhipster.config.JHipsterConstants; +import io.github.jhipster.config.JHipsterProperties; +import io.github.jhipster.web.filter.CachingHttpHeadersFilter; +import org.h2.server.web.WebServlet; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.springframework.http.HttpHeaders; +import org.springframework.mock.env.MockEnvironment; +import org.springframework.mock.web.MockServletContext; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; + +import javax.servlet.*; + +import java.util.*; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.options; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.header; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +/** + * Unit tests for the {@link WebConfigurer} class. + */ +public class WebConfigurerUnitTest { + + private WebConfigurer webConfigurer; + + private MockServletContext servletContext; + + private MockEnvironment env; + + private JHipsterProperties props; + + @BeforeEach + public void setup() { + servletContext = spy(new MockServletContext()); + doReturn(mock(FilterRegistration.Dynamic.class)) + .when(servletContext).addFilter(anyString(), any(Filter.class)); + doReturn(mock(ServletRegistration.Dynamic.class)) + .when(servletContext).addServlet(anyString(), any(Servlet.class)); + + env = new MockEnvironment(); + props = new JHipsterProperties(); + + webConfigurer = new WebConfigurer(env, props); + } + + @Test + public void testStartUpProdServletContext() throws ServletException { + env.setActiveProfiles(JHipsterConstants.SPRING_PROFILE_PRODUCTION); + webConfigurer.onStartup(servletContext); + + verify(servletContext).addFilter(eq("cachingHttpHeadersFilter"), any(CachingHttpHeadersFilter.class)); + verify(servletContext, never()).addServlet(eq("H2Console"), any(WebServlet.class)); + } + + @Test + public void testStartUpDevServletContext() throws ServletException { + env.setActiveProfiles(JHipsterConstants.SPRING_PROFILE_DEVELOPMENT); + webConfigurer.onStartup(servletContext); + + verify(servletContext, never()).addFilter(eq("cachingHttpHeadersFilter"), any(CachingHttpHeadersFilter.class)); + verify(servletContext).addServlet(eq("H2Console"), any(WebServlet.class)); + } +// +// @Test +// public void testCustomizeServletContainer() { +// env.setActiveProfiles(JHipsterConstants.SPRING_PROFILE_PRODUCTION); +// UndertowServletWebServerFactory container = new UndertowServletWebServerFactory(); +// webConfigurer.customize(container); +// assertThat(container.getMimeMappings().get("abs")).isEqualTo("audio/x-mpeg"); +// assertThat(container.getMimeMappings().get("html")).isEqualTo("text/html;charset=utf-8"); +// assertThat(container.getMimeMappings().get("json")).isEqualTo("text/html;charset=utf-8"); +// if (container.getDocumentRoot() != null) { +// assertThat(container.getDocumentRoot()).isEqualTo(new File("target/classes/static/")); +// } +// } + + @Test + public void testCorsFilterOnApiPath() throws Exception { + props.getCors().setAllowedOrigins(Collections.singletonList("*")); + props.getCors().setAllowedMethods(Arrays.asList("GET", "POST", "PUT", "DELETE")); + props.getCors().setAllowedHeaders(Collections.singletonList("*")); + props.getCors().setMaxAge(1800L); + props.getCors().setAllowCredentials(true); + + MockMvc mockMvc = MockMvcBuilders.standaloneSetup(new WebConfigurerUnitTestController()) + .addFilters(webConfigurer.corsFilter()) + .build(); + + mockMvc.perform( + options("/api/test-cors") + .header(HttpHeaders.ORIGIN, "other.domain.com") + .header(HttpHeaders.ACCESS_CONTROL_REQUEST_METHOD, "POST")) + .andExpect(status().isOk()) + .andExpect(header().string(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN, "other.domain.com")) + .andExpect(header().string(HttpHeaders.VARY, "Origin")) + .andExpect(header().string(HttpHeaders.ACCESS_CONTROL_ALLOW_METHODS, "GET,POST,PUT,DELETE")) + .andExpect(header().string(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS, "true")) + .andExpect(header().string(HttpHeaders.ACCESS_CONTROL_MAX_AGE, "1800")); + + mockMvc.perform( + get("/api/test-cors") + .header(HttpHeaders.ORIGIN, "other.domain.com")) + .andExpect(status().isOk()) + .andExpect(header().string(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN, "other.domain.com")); + } + + @Test + public void testCorsFilterOnOtherPath() throws Exception { + props.getCors().setAllowedOrigins(Collections.singletonList("*")); + props.getCors().setAllowedMethods(Arrays.asList("GET", "POST", "PUT", "DELETE")); + props.getCors().setAllowedHeaders(Collections.singletonList("*")); + props.getCors().setMaxAge(1800L); + props.getCors().setAllowCredentials(true); + + MockMvc mockMvc = MockMvcBuilders.standaloneSetup(new WebConfigurerUnitTestController()) + .addFilters(webConfigurer.corsFilter()) + .build(); + + mockMvc.perform( + get("/test/test-cors") + .header(HttpHeaders.ORIGIN, "other.domain.com")) + .andExpect(status().isOk()) + .andExpect(header().doesNotExist(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN)); + } + + @Test + public void testCorsFilterDeactivated() throws Exception { + props.getCors().setAllowedOrigins(null); + + MockMvc mockMvc = MockMvcBuilders.standaloneSetup(new WebConfigurerUnitTestController()) + .addFilters(webConfigurer.corsFilter()) + .build(); + + mockMvc.perform( + get("/api/test-cors") + .header(HttpHeaders.ORIGIN, "other.domain.com")) + .andExpect(status().isOk()) + .andExpect(header().doesNotExist(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN)); + } + + @Test + public void testCorsFilterDeactivated2() throws Exception { + props.getCors().setAllowedOrigins(new ArrayList<>()); + + MockMvc mockMvc = MockMvcBuilders.standaloneSetup(new WebConfigurerUnitTestController()) + .addFilters(webConfigurer.corsFilter()) + .build(); + + mockMvc.perform( + get("/api/test-cors") + .header(HttpHeaders.ORIGIN, "other.domain.com")) + .andExpect(status().isOk()) + .andExpect(header().doesNotExist(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN)); + } +} diff --git a/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/config/WebConfigurerUnitTestController.java b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/config/WebConfigurerUnitTestController.java new file mode 100644 index 000000000000..271d18278e81 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/config/WebConfigurerUnitTestController.java @@ -0,0 +1,16 @@ +package com.baeldung.jhipster6.config; + +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class WebConfigurerUnitTestController { + + @GetMapping("/api/test-cors") + public void testCorsOnApiPath() { + } + + @GetMapping("/test/test-cors") + public void testCorsOnOtherPath() { + } +} diff --git a/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/config/timezone/HibernateTimeZoneIT.java b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/config/timezone/HibernateTimeZoneIT.java new file mode 100644 index 000000000000..2e506edab46a --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/config/timezone/HibernateTimeZoneIT.java @@ -0,0 +1,174 @@ +package com.baeldung.jhipster6.config.timezone; + +import com.baeldung.jhipster6.BookstoreApp; +import com.baeldung.jhipster6.repository.timezone.DateTimeWrapper; +import com.baeldung.jhipster6.repository.timezone.DateTimeWrapperRepository; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.jdbc.support.rowset.SqlRowSet; +import org.springframework.transaction.annotation.Transactional; + +import java.time.*; +import java.time.format.DateTimeFormatter; + +import static java.lang.String.format; +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Integration tests for the UTC Hibernate configuration. + */ +@SpringBootTest(classes = BookstoreApp.class) +public class HibernateTimeZoneIT { + + @Autowired + private DateTimeWrapperRepository dateTimeWrapperRepository; + @Autowired + private JdbcTemplate jdbcTemplate; + + private DateTimeWrapper dateTimeWrapper; + private DateTimeFormatter dateTimeFormatter; + private DateTimeFormatter timeFormatter; + private DateTimeFormatter dateFormatter; + + @BeforeEach + public void setup() { + dateTimeWrapper = new DateTimeWrapper(); + dateTimeWrapper.setInstant(Instant.parse("2014-11-12T05:50:00.0Z")); + dateTimeWrapper.setLocalDateTime(LocalDateTime.parse("2014-11-12T07:50:00.0")); + dateTimeWrapper.setOffsetDateTime(OffsetDateTime.parse("2011-12-14T08:30:00.0Z")); + dateTimeWrapper.setZonedDateTime(ZonedDateTime.parse("2011-12-14T08:30:00.0Z")); + dateTimeWrapper.setLocalTime(LocalTime.parse("14:30:00")); + dateTimeWrapper.setOffsetTime(OffsetTime.parse("14:30:00+02:00")); + dateTimeWrapper.setLocalDate(LocalDate.parse("2016-09-10")); + + dateTimeFormatter = DateTimeFormatter + .ofPattern("yyyy-MM-dd HH:mm:ss.S") + .withZone(ZoneId.of("UTC")); + + timeFormatter = DateTimeFormatter + .ofPattern("HH:mm:ss") + .withZone(ZoneId.of("UTC")); + + dateFormatter = DateTimeFormatter + .ofPattern("yyyy-MM-dd"); + } + + @Test + @Transactional + public void storeInstantWithUtcConfigShouldBeStoredOnGMTTimeZone() { + dateTimeWrapperRepository.saveAndFlush(dateTimeWrapper); + + String request = generateSqlRequest("instant", dateTimeWrapper.getId()); + SqlRowSet resultSet = jdbcTemplate.queryForRowSet(request); + String expectedValue = dateTimeFormatter.format(dateTimeWrapper.getInstant()); + + assertThatDateStoredValueIsEqualToInsertDateValueOnGMTTimeZone(resultSet, expectedValue); + } + + @Test + @Transactional + public void storeLocalDateTimeWithUtcConfigShouldBeStoredOnGMTTimeZone() { + dateTimeWrapperRepository.saveAndFlush(dateTimeWrapper); + + String request = generateSqlRequest("local_date_time", dateTimeWrapper.getId()); + SqlRowSet resultSet = jdbcTemplate.queryForRowSet(request); + String expectedValue = dateTimeWrapper + .getLocalDateTime() + .atZone(ZoneId.systemDefault()) + .format(dateTimeFormatter); + + assertThatDateStoredValueIsEqualToInsertDateValueOnGMTTimeZone(resultSet, expectedValue); + } + + @Test + @Transactional + public void storeOffsetDateTimeWithUtcConfigShouldBeStoredOnGMTTimeZone() { + dateTimeWrapperRepository.saveAndFlush(dateTimeWrapper); + + String request = generateSqlRequest("offset_date_time", dateTimeWrapper.getId()); + SqlRowSet resultSet = jdbcTemplate.queryForRowSet(request); + String expectedValue = dateTimeWrapper + .getOffsetDateTime() + .format(dateTimeFormatter); + + assertThatDateStoredValueIsEqualToInsertDateValueOnGMTTimeZone(resultSet, expectedValue); + } + + @Test + @Transactional + public void storeZoneDateTimeWithUtcConfigShouldBeStoredOnGMTTimeZone() { + dateTimeWrapperRepository.saveAndFlush(dateTimeWrapper); + + String request = generateSqlRequest("zoned_date_time", dateTimeWrapper.getId()); + SqlRowSet resultSet = jdbcTemplate.queryForRowSet(request); + String expectedValue = dateTimeWrapper + .getZonedDateTime() + .format(dateTimeFormatter); + + assertThatDateStoredValueIsEqualToInsertDateValueOnGMTTimeZone(resultSet, expectedValue); + } + + @Test + @Transactional + public void storeLocalTimeWithUtcConfigShouldBeStoredOnGMTTimeZoneAccordingToHis1stJan1970Value() { + dateTimeWrapperRepository.saveAndFlush(dateTimeWrapper); + + String request = generateSqlRequest("local_time", dateTimeWrapper.getId()); + SqlRowSet resultSet = jdbcTemplate.queryForRowSet(request); + String expectedValue = dateTimeWrapper + .getLocalTime() + .atDate(LocalDate.of(1970, Month.JANUARY, 1)) + .atZone(ZoneId.systemDefault()) + .format(timeFormatter); + + assertThatDateStoredValueIsEqualToInsertDateValueOnGMTTimeZone(resultSet, expectedValue); + } + + @Test + @Transactional + public void storeOffsetTimeWithUtcConfigShouldBeStoredOnGMTTimeZoneAccordingToHis1stJan1970Value() { + dateTimeWrapperRepository.saveAndFlush(dateTimeWrapper); + + String request = generateSqlRequest("offset_time", dateTimeWrapper.getId()); + SqlRowSet resultSet = jdbcTemplate.queryForRowSet(request); + String expectedValue = dateTimeWrapper + .getOffsetTime() + .toLocalTime() + .atDate(LocalDate.of(1970, Month.JANUARY, 1)) + .atZone(ZoneId.systemDefault()) + .format(timeFormatter); + + assertThatDateStoredValueIsEqualToInsertDateValueOnGMTTimeZone(resultSet, expectedValue); + } + + @Test + @Transactional + public void storeLocalDateWithUtcConfigShouldBeStoredWithoutTransformation() { + dateTimeWrapperRepository.saveAndFlush(dateTimeWrapper); + + String request = generateSqlRequest("local_date", dateTimeWrapper.getId()); + SqlRowSet resultSet = jdbcTemplate.queryForRowSet(request); + String expectedValue = dateTimeWrapper + .getLocalDate() + .format(dateFormatter); + + assertThatDateStoredValueIsEqualToInsertDateValueOnGMTTimeZone(resultSet, expectedValue); + } + + private String generateSqlRequest(String fieldName, long id) { + return format("SELECT %s FROM jhi_date_time_wrapper where id=%d", fieldName, id); + } + + private void assertThatDateStoredValueIsEqualToInsertDateValueOnGMTTimeZone(SqlRowSet sqlRowSet, String expectedValue) { + while (sqlRowSet.next()) { + String dbValue = sqlRowSet.getString(1); + + assertThat(dbValue).isNotNull(); + assertThat(dbValue).isEqualTo(expectedValue); + } + } +} diff --git a/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/config/timezone/HibernateTimeZoneIntegrationTest.java b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/config/timezone/HibernateTimeZoneIntegrationTest.java new file mode 100644 index 000000000000..f0bf619ae41f --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/config/timezone/HibernateTimeZoneIntegrationTest.java @@ -0,0 +1,177 @@ +package com.baeldung.jhipster6.config.timezone; + +import com.baeldung.jhipster6.BookstoreApp; +import com.baeldung.jhipster6.repository.timezone.DateTimeWrapper; +import com.baeldung.jhipster6.repository.timezone.DateTimeWrapperRepository; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.jdbc.support.rowset.SqlRowSet; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.transaction.annotation.Transactional; + +import java.time.*; +import java.time.format.DateTimeFormatter; + +import static java.lang.String.format; +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Tests for the UTC Hibernate configuration. + */ +@RunWith(SpringRunner.class) +@SpringBootTest(classes = BookstoreApp.class) +public class HibernateTimeZoneIntegrationTest { + + @Autowired + private DateTimeWrapperRepository dateTimeWrapperRepository; + @Autowired + private JdbcTemplate jdbcTemplate; + + private DateTimeWrapper dateTimeWrapper; + private DateTimeFormatter dateTimeFormatter; + private DateTimeFormatter timeFormatter; + private DateTimeFormatter dateFormatter; + + @Before + public void setup() { + dateTimeWrapper = new DateTimeWrapper(); + dateTimeWrapper.setInstant(Instant.parse("2014-11-12T05:50:00.0Z")); + dateTimeWrapper.setLocalDateTime(LocalDateTime.parse("2014-11-12T07:50:00.0")); + dateTimeWrapper.setOffsetDateTime(OffsetDateTime.parse("2011-12-14T08:30:00.0Z")); + dateTimeWrapper.setZonedDateTime(ZonedDateTime.parse("2011-12-14T08:30:00.0Z")); + dateTimeWrapper.setLocalTime(LocalTime.parse("14:30:00")); + dateTimeWrapper.setOffsetTime(OffsetTime.parse("14:30:00+02:00")); + dateTimeWrapper.setLocalDate(LocalDate.parse("2016-09-10")); + + dateTimeFormatter = DateTimeFormatter + .ofPattern("yyyy-MM-dd HH:mm:ss.S") + .withZone(ZoneId.of("UTC")); + + timeFormatter = DateTimeFormatter + .ofPattern("HH:mm:ss") + .withZone(ZoneId.of("UTC")); + + dateFormatter = DateTimeFormatter + .ofPattern("yyyy-MM-dd"); + } + + @Test + @Transactional + public void storeInstantWithUtcConfigShouldBeStoredOnGMTTimeZone() { + dateTimeWrapperRepository.saveAndFlush(dateTimeWrapper); + + String request = generateSqlRequest("instant", dateTimeWrapper.getId()); + SqlRowSet resultSet = jdbcTemplate.queryForRowSet(request); + String expectedValue = dateTimeFormatter.format(dateTimeWrapper.getInstant()); + + assertThatDateStoredValueIsEqualToInsertDateValueOnGMTTimeZone(resultSet, expectedValue); + } + + @Test + @Transactional + public void storeLocalDateTimeWithUtcConfigShouldBeStoredOnGMTTimeZone() { + dateTimeWrapperRepository.saveAndFlush(dateTimeWrapper); + + String request = generateSqlRequest("local_date_time", dateTimeWrapper.getId()); + SqlRowSet resultSet = jdbcTemplate.queryForRowSet(request); + String expectedValue = dateTimeWrapper + .getLocalDateTime() + .atZone(ZoneId.systemDefault()) + .format(dateTimeFormatter); + + assertThatDateStoredValueIsEqualToInsertDateValueOnGMTTimeZone(resultSet, expectedValue); + } + + @Test + @Transactional + public void storeOffsetDateTimeWithUtcConfigShouldBeStoredOnGMTTimeZone() { + dateTimeWrapperRepository.saveAndFlush(dateTimeWrapper); + + String request = generateSqlRequest("offset_date_time", dateTimeWrapper.getId()); + SqlRowSet resultSet = jdbcTemplate.queryForRowSet(request); + String expectedValue = dateTimeWrapper + .getOffsetDateTime() + .format(dateTimeFormatter); + + assertThatDateStoredValueIsEqualToInsertDateValueOnGMTTimeZone(resultSet, expectedValue); + } + + @Test + @Transactional + public void storeZoneDateTimeWithUtcConfigShouldBeStoredOnGMTTimeZone() { + dateTimeWrapperRepository.saveAndFlush(dateTimeWrapper); + + String request = generateSqlRequest("zoned_date_time", dateTimeWrapper.getId()); + SqlRowSet resultSet = jdbcTemplate.queryForRowSet(request); + String expectedValue = dateTimeWrapper + .getZonedDateTime() + .format(dateTimeFormatter); + + assertThatDateStoredValueIsEqualToInsertDateValueOnGMTTimeZone(resultSet, expectedValue); + } + + @Test + @Transactional + public void storeLocalTimeWithUtcConfigShouldBeStoredOnGMTTimeZoneAccordingToHis1stJan1970Value() { + dateTimeWrapperRepository.saveAndFlush(dateTimeWrapper); + + String request = generateSqlRequest("local_time", dateTimeWrapper.getId()); + SqlRowSet resultSet = jdbcTemplate.queryForRowSet(request); + String expectedValue = dateTimeWrapper + .getLocalTime() + .atDate(LocalDate.of(1970, Month.JANUARY, 1)) + .atZone(ZoneId.systemDefault()) + .format(timeFormatter); + + assertThatDateStoredValueIsEqualToInsertDateValueOnGMTTimeZone(resultSet, expectedValue); + } + + @Test + @Transactional + public void storeOffsetTimeWithUtcConfigShouldBeStoredOnGMTTimeZoneAccordingToHis1stJan1970Value() { + dateTimeWrapperRepository.saveAndFlush(dateTimeWrapper); + + String request = generateSqlRequest("offset_time", dateTimeWrapper.getId()); + SqlRowSet resultSet = jdbcTemplate.queryForRowSet(request); + String expectedValue = dateTimeWrapper + .getOffsetTime() + .toLocalTime() + .atDate(LocalDate.of(1970, Month.JANUARY, 1)) + .atZone(ZoneId.systemDefault()) + .format(timeFormatter); + + assertThatDateStoredValueIsEqualToInsertDateValueOnGMTTimeZone(resultSet, expectedValue); + } + + @Test + @Transactional + public void storeLocalDateWithUtcConfigShouldBeStoredWithoutTransformation() { + dateTimeWrapperRepository.saveAndFlush(dateTimeWrapper); + + String request = generateSqlRequest("local_date", dateTimeWrapper.getId()); + SqlRowSet resultSet = jdbcTemplate.queryForRowSet(request); + String expectedValue = dateTimeWrapper + .getLocalDate() + .format(dateFormatter); + + assertThatDateStoredValueIsEqualToInsertDateValueOnGMTTimeZone(resultSet, expectedValue); + } + + private String generateSqlRequest(String fieldName, long id) { + return format("SELECT %s FROM jhi_date_time_wrapper where id=%d", fieldName, id); + } + + private void assertThatDateStoredValueIsEqualToInsertDateValueOnGMTTimeZone(SqlRowSet sqlRowSet, String expectedValue) { + while (sqlRowSet.next()) { + String dbValue = sqlRowSet.getString(1); + + assertThat(dbValue).isNotNull(); + assertThat(dbValue).isEqualTo(expectedValue); + } + } +} diff --git a/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/repository/CustomAuditEventRepositoryIT.java b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/repository/CustomAuditEventRepositoryIT.java new file mode 100644 index 000000000000..a1f27a21da96 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/repository/CustomAuditEventRepositoryIT.java @@ -0,0 +1,163 @@ +package com.baeldung.jhipster6.repository; + +import com.baeldung.jhipster6.BookstoreApp; +import com.baeldung.jhipster6.config.Constants; +import com.baeldung.jhipster6.config.audit.AuditEventConverter; +import com.baeldung.jhipster6.domain.PersistentAuditEvent; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.actuate.audit.AuditEvent; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpSession; +import org.springframework.security.web.authentication.WebAuthenticationDetails; +import org.springframework.transaction.annotation.Transactional; + +import javax.servlet.http.HttpSession; +import java.time.Instant; +import java.time.temporal.ChronoUnit; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Integration tests for {@link CustomAuditEventRepository}. + */ +@SpringBootTest(classes = BookstoreApp.class) +@Transactional +public class CustomAuditEventRepositoryIT { + + @Autowired + private PersistenceAuditEventRepository persistenceAuditEventRepository; + + @Autowired + private AuditEventConverter auditEventConverter; + + private CustomAuditEventRepository customAuditEventRepository; + + private PersistentAuditEvent testUserEvent; + + private PersistentAuditEvent testOtherUserEvent; + + private PersistentAuditEvent testOldUserEvent; + + @BeforeEach + public void setup() { + customAuditEventRepository = new CustomAuditEventRepository(persistenceAuditEventRepository, auditEventConverter); + persistenceAuditEventRepository.deleteAll(); + Instant oneHourAgo = Instant.now().minusSeconds(3600); + + testUserEvent = new PersistentAuditEvent(); + testUserEvent.setPrincipal("test-user"); + testUserEvent.setAuditEventType("test-type"); + testUserEvent.setAuditEventDate(oneHourAgo); + Map data = new HashMap<>(); + data.put("test-key", "test-value"); + testUserEvent.setData(data); + + testOldUserEvent = new PersistentAuditEvent(); + testOldUserEvent.setPrincipal("test-user"); + testOldUserEvent.setAuditEventType("test-type"); + testOldUserEvent.setAuditEventDate(oneHourAgo.minusSeconds(10000)); + + testOtherUserEvent = new PersistentAuditEvent(); + testOtherUserEvent.setPrincipal("other-test-user"); + testOtherUserEvent.setAuditEventType("test-type"); + testOtherUserEvent.setAuditEventDate(oneHourAgo); + } + + @Test + public void addAuditEvent() { + Map data = new HashMap<>(); + data.put("test-key", "test-value"); + AuditEvent event = new AuditEvent("test-user", "test-type", data); + customAuditEventRepository.add(event); + List persistentAuditEvents = persistenceAuditEventRepository.findAll(); + assertThat(persistentAuditEvents).hasSize(1); + PersistentAuditEvent persistentAuditEvent = persistentAuditEvents.get(0); + assertThat(persistentAuditEvent.getPrincipal()).isEqualTo(event.getPrincipal()); + assertThat(persistentAuditEvent.getAuditEventType()).isEqualTo(event.getType()); + assertThat(persistentAuditEvent.getData()).containsKey("test-key"); + assertThat(persistentAuditEvent.getData().get("test-key")).isEqualTo("test-value"); + assertThat(persistentAuditEvent.getAuditEventDate().truncatedTo(ChronoUnit.MILLIS)) + .isEqualTo(event.getTimestamp().truncatedTo(ChronoUnit.MILLIS)); + } + + @Test + public void addAuditEventTruncateLargeData() { + Map data = new HashMap<>(); + StringBuilder largeData = new StringBuilder(); + for (int i = 0; i < CustomAuditEventRepository.EVENT_DATA_COLUMN_MAX_LENGTH + 10; i++) { + largeData.append("a"); + } + data.put("test-key", largeData); + AuditEvent event = new AuditEvent("test-user", "test-type", data); + customAuditEventRepository.add(event); + List persistentAuditEvents = persistenceAuditEventRepository.findAll(); + assertThat(persistentAuditEvents).hasSize(1); + PersistentAuditEvent persistentAuditEvent = persistentAuditEvents.get(0); + assertThat(persistentAuditEvent.getPrincipal()).isEqualTo(event.getPrincipal()); + assertThat(persistentAuditEvent.getAuditEventType()).isEqualTo(event.getType()); + assertThat(persistentAuditEvent.getData()).containsKey("test-key"); + String actualData = persistentAuditEvent.getData().get("test-key"); + assertThat(actualData.length()).isEqualTo(CustomAuditEventRepository.EVENT_DATA_COLUMN_MAX_LENGTH); + assertThat(actualData).isSubstringOf(largeData); + assertThat(persistentAuditEvent.getAuditEventDate().truncatedTo(ChronoUnit.MILLIS)) + .isEqualTo(event.getTimestamp().truncatedTo(ChronoUnit.MILLIS)); + } + + @Test + public void testAddEventWithWebAuthenticationDetails() { + HttpSession session = new MockHttpSession(null, "test-session-id"); + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setSession(session); + request.setRemoteAddr("1.2.3.4"); + WebAuthenticationDetails details = new WebAuthenticationDetails(request); + Map data = new HashMap<>(); + data.put("test-key", details); + AuditEvent event = new AuditEvent("test-user", "test-type", data); + customAuditEventRepository.add(event); + List persistentAuditEvents = persistenceAuditEventRepository.findAll(); + assertThat(persistentAuditEvents).hasSize(1); + PersistentAuditEvent persistentAuditEvent = persistentAuditEvents.get(0); + assertThat(persistentAuditEvent.getData().get("remoteAddress")).isEqualTo("1.2.3.4"); + assertThat(persistentAuditEvent.getData().get("sessionId")).isEqualTo("test-session-id"); + } + + @Test + public void testAddEventWithNullData() { + Map data = new HashMap<>(); + data.put("test-key", null); + AuditEvent event = new AuditEvent("test-user", "test-type", data); + customAuditEventRepository.add(event); + List persistentAuditEvents = persistenceAuditEventRepository.findAll(); + assertThat(persistentAuditEvents).hasSize(1); + PersistentAuditEvent persistentAuditEvent = persistentAuditEvents.get(0); + assertThat(persistentAuditEvent.getData().get("test-key")).isEqualTo("null"); + } + + @Test + public void addAuditEventWithAnonymousUser() { + Map data = new HashMap<>(); + data.put("test-key", "test-value"); + AuditEvent event = new AuditEvent(Constants.ANONYMOUS_USER, "test-type", data); + customAuditEventRepository.add(event); + List persistentAuditEvents = persistenceAuditEventRepository.findAll(); + assertThat(persistentAuditEvents).hasSize(0); + } + + @Test + public void addAuditEventWithAuthorizationFailureType() { + Map data = new HashMap<>(); + data.put("test-key", "test-value"); + AuditEvent event = new AuditEvent("test-user", "AUTHORIZATION_FAILURE", data); + customAuditEventRepository.add(event); + List persistentAuditEvents = persistenceAuditEventRepository.findAll(); + assertThat(persistentAuditEvents).hasSize(0); + } + +} diff --git a/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/repository/CustomAuditEventRepositoryIntegrationTest.java b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/repository/CustomAuditEventRepositoryIntegrationTest.java new file mode 100644 index 000000000000..89ed2d4649ce --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/repository/CustomAuditEventRepositoryIntegrationTest.java @@ -0,0 +1,165 @@ +package com.baeldung.jhipster6.repository; + +import com.baeldung.jhipster6.BookstoreApp; +import com.baeldung.jhipster6.config.Constants; +import com.baeldung.jhipster6.config.audit.AuditEventConverter; +import com.baeldung.jhipster6.domain.PersistentAuditEvent; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.actuate.audit.AuditEvent; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpSession; +import org.springframework.security.web.authentication.WebAuthenticationDetails; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.transaction.annotation.Transactional; + +import javax.servlet.http.HttpSession; +import java.time.Instant; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Test class for the CustomAuditEventRepository class. + * + * @see CustomAuditEventRepository + */ +@RunWith(SpringRunner.class) +@SpringBootTest(classes = BookstoreApp.class) +@Transactional +public class CustomAuditEventRepositoryIntegrationTest { + + @Autowired + private PersistenceAuditEventRepository persistenceAuditEventRepository; + + @Autowired + private AuditEventConverter auditEventConverter; + + private CustomAuditEventRepository customAuditEventRepository; + + private PersistentAuditEvent testUserEvent; + + private PersistentAuditEvent testOtherUserEvent; + + private PersistentAuditEvent testOldUserEvent; + + @Before + public void setup() { + customAuditEventRepository = new CustomAuditEventRepository(persistenceAuditEventRepository, auditEventConverter); + persistenceAuditEventRepository.deleteAll(); + Instant oneHourAgo = Instant.now().minusSeconds(3600); + + testUserEvent = new PersistentAuditEvent(); + testUserEvent.setPrincipal("test-user"); + testUserEvent.setAuditEventType("test-type"); + testUserEvent.setAuditEventDate(oneHourAgo); + Map data = new HashMap<>(); + data.put("test-key", "test-value"); + testUserEvent.setData(data); + + testOldUserEvent = new PersistentAuditEvent(); + testOldUserEvent.setPrincipal("test-user"); + testOldUserEvent.setAuditEventType("test-type"); + testOldUserEvent.setAuditEventDate(oneHourAgo.minusSeconds(10000)); + + testOtherUserEvent = new PersistentAuditEvent(); + testOtherUserEvent.setPrincipal("other-test-user"); + testOtherUserEvent.setAuditEventType("test-type"); + testOtherUserEvent.setAuditEventDate(oneHourAgo); + } + + @Test + public void addAuditEvent() { + Map data = new HashMap<>(); + data.put("test-key", "test-value"); + AuditEvent event = new AuditEvent("test-user", "test-type", data); + customAuditEventRepository.add(event); + List persistentAuditEvents = persistenceAuditEventRepository.findAll(); + assertThat(persistentAuditEvents).hasSize(1); + PersistentAuditEvent persistentAuditEvent = persistentAuditEvents.get(0); + assertThat(persistentAuditEvent.getPrincipal()).isEqualTo(event.getPrincipal()); + assertThat(persistentAuditEvent.getAuditEventType()).isEqualTo(event.getType()); + assertThat(persistentAuditEvent.getData()).containsKey("test-key"); + assertThat(persistentAuditEvent.getData().get("test-key")).isEqualTo("test-value"); + assertThat(persistentAuditEvent.getAuditEventDate()).isEqualTo(event.getTimestamp()); + } + + @Test + public void addAuditEventTruncateLargeData() { + Map data = new HashMap<>(); + StringBuilder largeData = new StringBuilder(); + for (int i = 0; i < CustomAuditEventRepository.EVENT_DATA_COLUMN_MAX_LENGTH + 10; i++) { + largeData.append("a"); + } + data.put("test-key", largeData); + AuditEvent event = new AuditEvent("test-user", "test-type", data); + customAuditEventRepository.add(event); + List persistentAuditEvents = persistenceAuditEventRepository.findAll(); + assertThat(persistentAuditEvents).hasSize(1); + PersistentAuditEvent persistentAuditEvent = persistentAuditEvents.get(0); + assertThat(persistentAuditEvent.getPrincipal()).isEqualTo(event.getPrincipal()); + assertThat(persistentAuditEvent.getAuditEventType()).isEqualTo(event.getType()); + assertThat(persistentAuditEvent.getData()).containsKey("test-key"); + String actualData = persistentAuditEvent.getData().get("test-key"); + assertThat(actualData.length()).isEqualTo(CustomAuditEventRepository.EVENT_DATA_COLUMN_MAX_LENGTH); + assertThat(actualData).isSubstringOf(largeData); + assertThat(persistentAuditEvent.getAuditEventDate()).isEqualTo(event.getTimestamp()); + } + + @Test + public void testAddEventWithWebAuthenticationDetails() { + HttpSession session = new MockHttpSession(null, "test-session-id"); + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setSession(session); + request.setRemoteAddr("1.2.3.4"); + WebAuthenticationDetails details = new WebAuthenticationDetails(request); + Map data = new HashMap<>(); + data.put("test-key", details); + AuditEvent event = new AuditEvent("test-user", "test-type", data); + customAuditEventRepository.add(event); + List persistentAuditEvents = persistenceAuditEventRepository.findAll(); + assertThat(persistentAuditEvents).hasSize(1); + PersistentAuditEvent persistentAuditEvent = persistentAuditEvents.get(0); + assertThat(persistentAuditEvent.getData().get("remoteAddress")).isEqualTo("1.2.3.4"); + assertThat(persistentAuditEvent.getData().get("sessionId")).isEqualTo("test-session-id"); + } + + @Test + public void testAddEventWithNullData() { + Map data = new HashMap<>(); + data.put("test-key", null); + AuditEvent event = new AuditEvent("test-user", "test-type", data); + customAuditEventRepository.add(event); + List persistentAuditEvents = persistenceAuditEventRepository.findAll(); + assertThat(persistentAuditEvents).hasSize(1); + PersistentAuditEvent persistentAuditEvent = persistentAuditEvents.get(0); + assertThat(persistentAuditEvent.getData().get("test-key")).isEqualTo("null"); + } + + @Test + public void addAuditEventWithAnonymousUser() { + Map data = new HashMap<>(); + data.put("test-key", "test-value"); + AuditEvent event = new AuditEvent(Constants.ANONYMOUS_USER, "test-type", data); + customAuditEventRepository.add(event); + List persistentAuditEvents = persistenceAuditEventRepository.findAll(); + assertThat(persistentAuditEvents).hasSize(0); + } + + @Test + public void addAuditEventWithAuthorizationFailureType() { + Map data = new HashMap<>(); + data.put("test-key", "test-value"); + AuditEvent event = new AuditEvent("test-user", "AUTHORIZATION_FAILURE", data); + customAuditEventRepository.add(event); + List persistentAuditEvents = persistenceAuditEventRepository.findAll(); + assertThat(persistentAuditEvents).hasSize(0); + } + +} diff --git a/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/repository/timezone/DateTimeWrapper.java b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/repository/timezone/DateTimeWrapper.java new file mode 100644 index 000000000000..0d03a44cf8a9 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/repository/timezone/DateTimeWrapper.java @@ -0,0 +1,131 @@ +package com.baeldung.jhipster6.repository.timezone; + +import javax.persistence.*; +import java.io.Serializable; +import java.time.*; +import java.util.Objects; + +@Entity +@Table(name = "jhi_date_time_wrapper") +public class DateTimeWrapper implements Serializable { + + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(name = "instant") + private Instant instant; + + @Column(name = "local_date_time") + private LocalDateTime localDateTime; + + @Column(name = "offset_date_time") + private OffsetDateTime offsetDateTime; + + @Column(name = "zoned_date_time") + private ZonedDateTime zonedDateTime; + + @Column(name = "local_time") + private LocalTime localTime; + + @Column(name = "offset_time") + private OffsetTime offsetTime; + + @Column(name = "local_date") + private LocalDate localDate; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Instant getInstant() { + return instant; + } + + public void setInstant(Instant instant) { + this.instant = instant; + } + + public LocalDateTime getLocalDateTime() { + return localDateTime; + } + + public void setLocalDateTime(LocalDateTime localDateTime) { + this.localDateTime = localDateTime; + } + + public OffsetDateTime getOffsetDateTime() { + return offsetDateTime; + } + + public void setOffsetDateTime(OffsetDateTime offsetDateTime) { + this.offsetDateTime = offsetDateTime; + } + + public ZonedDateTime getZonedDateTime() { + return zonedDateTime; + } + + public void setZonedDateTime(ZonedDateTime zonedDateTime) { + this.zonedDateTime = zonedDateTime; + } + + public LocalTime getLocalTime() { + return localTime; + } + + public void setLocalTime(LocalTime localTime) { + this.localTime = localTime; + } + + public OffsetTime getOffsetTime() { + return offsetTime; + } + + public void setOffsetTime(OffsetTime offsetTime) { + this.offsetTime = offsetTime; + } + + public LocalDate getLocalDate() { + return localDate; + } + + public void setLocalDate(LocalDate localDate) { + this.localDate = localDate; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + DateTimeWrapper dateTimeWrapper = (DateTimeWrapper) o; + return !(dateTimeWrapper.getId() == null || getId() == null) && Objects.equals(getId(), dateTimeWrapper.getId()); + } + + @Override + public int hashCode() { + return Objects.hashCode(getId()); + } + + @Override + public String toString() { + return "TimeZoneTest{" + + "id=" + id + + ", instant=" + instant + + ", localDateTime=" + localDateTime + + ", offsetDateTime=" + offsetDateTime + + ", zonedDateTime=" + zonedDateTime + + '}'; + } +} diff --git a/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/repository/timezone/DateTimeWrapperRepository.java b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/repository/timezone/DateTimeWrapperRepository.java new file mode 100644 index 000000000000..5923db6ca0d9 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/repository/timezone/DateTimeWrapperRepository.java @@ -0,0 +1,12 @@ +package com.baeldung.jhipster6.repository.timezone; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +/** + * Spring Data JPA repository for the DateTimeWrapper entity. + */ +@Repository +public interface DateTimeWrapperRepository extends JpaRepository { + +} diff --git a/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/security/DomainUserDetailsServiceIT.java b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/security/DomainUserDetailsServiceIT.java new file mode 100644 index 000000000000..3e641dfad762 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/security/DomainUserDetailsServiceIT.java @@ -0,0 +1,125 @@ +package com.baeldung.jhipster6.security; + +import com.baeldung.jhipster6.BookstoreApp; +import com.baeldung.jhipster6.domain.User; +import com.baeldung.jhipster6.repository.UserRepository; + +import org.apache.commons.lang3.RandomStringUtils; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.core.userdetails.UsernameNotFoundException; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Locale; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; + +/** + * Integrations tests for {@link DomainUserDetailsService}. + */ +@SpringBootTest(classes = BookstoreApp.class) +@Transactional +public class DomainUserDetailsServiceIT { + + private static final String USER_ONE_LOGIN = "test-user-one"; + private static final String USER_ONE_EMAIL = "test-user-one@localhost"; + private static final String USER_TWO_LOGIN = "test-user-two"; + private static final String USER_TWO_EMAIL = "test-user-two@localhost"; + private static final String USER_THREE_LOGIN = "test-user-three"; + private static final String USER_THREE_EMAIL = "test-user-three@localhost"; + + @Autowired + private UserRepository userRepository; + + @Autowired + private UserDetailsService domainUserDetailsService; + + private User userOne; + private User userTwo; + private User userThree; + + @BeforeEach + public void init() { + userOne = new User(); + userOne.setLogin(USER_ONE_LOGIN); + userOne.setPassword(RandomStringUtils.random(60)); + userOne.setActivated(true); + userOne.setEmail(USER_ONE_EMAIL); + userOne.setFirstName("userOne"); + userOne.setLastName("doe"); + userOne.setLangKey("en"); + userRepository.save(userOne); + + userTwo = new User(); + userTwo.setLogin(USER_TWO_LOGIN); + userTwo.setPassword(RandomStringUtils.random(60)); + userTwo.setActivated(true); + userTwo.setEmail(USER_TWO_EMAIL); + userTwo.setFirstName("userTwo"); + userTwo.setLastName("doe"); + userTwo.setLangKey("en"); + userRepository.save(userTwo); + + userThree = new User(); + userThree.setLogin(USER_THREE_LOGIN); + userThree.setPassword(RandomStringUtils.random(60)); + userThree.setActivated(false); + userThree.setEmail(USER_THREE_EMAIL); + userThree.setFirstName("userThree"); + userThree.setLastName("doe"); + userThree.setLangKey("en"); + userRepository.save(userThree); + } + + @Test + @Transactional + public void assertThatUserCanBeFoundByLogin() { + UserDetails userDetails = domainUserDetailsService.loadUserByUsername(USER_ONE_LOGIN); + assertThat(userDetails).isNotNull(); + assertThat(userDetails.getUsername()).isEqualTo(USER_ONE_LOGIN); + } + + @Test + @Transactional + public void assertThatUserCanBeFoundByLoginIgnoreCase() { + UserDetails userDetails = domainUserDetailsService.loadUserByUsername(USER_ONE_LOGIN.toUpperCase(Locale.ENGLISH)); + assertThat(userDetails).isNotNull(); + assertThat(userDetails.getUsername()).isEqualTo(USER_ONE_LOGIN); + } + + @Test + @Transactional + public void assertThatUserCanBeFoundByEmail() { + UserDetails userDetails = domainUserDetailsService.loadUserByUsername(USER_TWO_EMAIL); + assertThat(userDetails).isNotNull(); + assertThat(userDetails.getUsername()).isEqualTo(USER_TWO_LOGIN); + } + + @Test + @Transactional + public void assertThatUserCanNotBeFoundByEmailIgnoreCase() { + assertThatExceptionOfType(UsernameNotFoundException.class).isThrownBy( + () -> domainUserDetailsService.loadUserByUsername(USER_TWO_EMAIL.toUpperCase(Locale.ENGLISH))); + } + + @Test + @Transactional + public void assertThatEmailIsPrioritizedOverLogin() { + UserDetails userDetails = domainUserDetailsService.loadUserByUsername(USER_ONE_EMAIL); + assertThat(userDetails).isNotNull(); + assertThat(userDetails.getUsername()).isEqualTo(USER_ONE_LOGIN); + } + + @Test + @Transactional + public void assertThatUserNotActivatedExceptionIsThrownForNotActivatedUsers() { + assertThatExceptionOfType(UserNotActivatedException.class).isThrownBy( + () -> domainUserDetailsService.loadUserByUsername(USER_THREE_LOGIN)); + } + +} diff --git a/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/security/DomainUserDetailsServiceIntegrationTest.java b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/security/DomainUserDetailsServiceIntegrationTest.java new file mode 100644 index 000000000000..bf30067406be --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/security/DomainUserDetailsServiceIntegrationTest.java @@ -0,0 +1,127 @@ +package com.baeldung.jhipster6.security; + +import com.baeldung.jhipster6.BookstoreApp; +import com.baeldung.jhipster6.domain.User; +import com.baeldung.jhipster6.repository.UserRepository; + +import org.apache.commons.lang3.RandomStringUtils; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.core.userdetails.UsernameNotFoundException; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Locale; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Test class for DomainUserDetailsService. + * + * @see DomainUserDetailsService + */ +@RunWith(SpringRunner.class) +@SpringBootTest(classes = BookstoreApp.class) +@Transactional +public class DomainUserDetailsServiceIntegrationTest { + + private static final String USER_ONE_LOGIN = "test-user-one"; + private static final String USER_ONE_EMAIL = "test-user-one@localhost"; + private static final String USER_TWO_LOGIN = "test-user-two"; + private static final String USER_TWO_EMAIL = "test-user-two@localhost"; + private static final String USER_THREE_LOGIN = "test-user-three"; + private static final String USER_THREE_EMAIL = "test-user-three@localhost"; + + @Autowired + private UserRepository userRepository; + + @Autowired + private UserDetailsService domainUserDetailsService; + + private User userOne; + private User userTwo; + private User userThree; + + @Before + public void init() { + userOne = new User(); + userOne.setLogin(USER_ONE_LOGIN); + userOne.setPassword(RandomStringUtils.random(60)); + userOne.setActivated(true); + userOne.setEmail(USER_ONE_EMAIL); + userOne.setFirstName("userOne"); + userOne.setLastName("doe"); + userOne.setLangKey("en"); + userRepository.save(userOne); + + userTwo = new User(); + userTwo.setLogin(USER_TWO_LOGIN); + userTwo.setPassword(RandomStringUtils.random(60)); + userTwo.setActivated(true); + userTwo.setEmail(USER_TWO_EMAIL); + userTwo.setFirstName("userTwo"); + userTwo.setLastName("doe"); + userTwo.setLangKey("en"); + userRepository.save(userTwo); + + userThree = new User(); + userThree.setLogin(USER_THREE_LOGIN); + userThree.setPassword(RandomStringUtils.random(60)); + userThree.setActivated(false); + userThree.setEmail(USER_THREE_EMAIL); + userThree.setFirstName("userThree"); + userThree.setLastName("doe"); + userThree.setLangKey("en"); + userRepository.save(userThree); + } + + @Test + @Transactional + public void assertThatUserCanBeFoundByLogin() { + UserDetails userDetails = domainUserDetailsService.loadUserByUsername(USER_ONE_LOGIN); + assertThat(userDetails).isNotNull(); + assertThat(userDetails.getUsername()).isEqualTo(USER_ONE_LOGIN); + } + + @Test + @Transactional + public void assertThatUserCanBeFoundByLoginIgnoreCase() { + UserDetails userDetails = domainUserDetailsService.loadUserByUsername(USER_ONE_LOGIN.toUpperCase(Locale.ENGLISH)); + assertThat(userDetails).isNotNull(); + assertThat(userDetails.getUsername()).isEqualTo(USER_ONE_LOGIN); + } + + @Test + @Transactional + public void assertThatUserCanBeFoundByEmail() { + UserDetails userDetails = domainUserDetailsService.loadUserByUsername(USER_TWO_EMAIL); + assertThat(userDetails).isNotNull(); + assertThat(userDetails.getUsername()).isEqualTo(USER_TWO_LOGIN); + } + + @Test(expected = UsernameNotFoundException.class) + @Transactional + public void assertThatUserCanNotBeFoundByEmailIgnoreCase() { + domainUserDetailsService.loadUserByUsername(USER_TWO_EMAIL.toUpperCase(Locale.ENGLISH)); + } + + @Test + @Transactional + public void assertThatEmailIsPrioritizedOverLogin() { + UserDetails userDetails = domainUserDetailsService.loadUserByUsername(USER_ONE_EMAIL); + assertThat(userDetails).isNotNull(); + assertThat(userDetails.getUsername()).isEqualTo(USER_ONE_LOGIN); + } + + @Test(expected = UserNotActivatedException.class) + @Transactional + public void assertThatUserNotActivatedExceptionIsThrownForNotActivatedUsers() { + domainUserDetailsService.loadUserByUsername(USER_THREE_LOGIN); + } + +} diff --git a/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/security/MockAuthenticationManager.java b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/security/MockAuthenticationManager.java new file mode 100644 index 000000000000..0b320720101e --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/security/MockAuthenticationManager.java @@ -0,0 +1,54 @@ +package com.baeldung.jhipster6.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 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; + } +} diff --git a/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/security/SecurityUtilsUnitTest.java b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/security/SecurityUtilsUnitTest.java new file mode 100644 index 000000000000..b017acd022cf --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/security/SecurityUtilsUnitTest.java @@ -0,0 +1,73 @@ +package com.baeldung.jhipster6.security; + +import org.junit.Test; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.security.core.context.SecurityContext; +import org.springframework.security.core.context.SecurityContextHolder; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Optional; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Test class for the SecurityUtils utility class. + * + * @see SecurityUtils + */ +public class SecurityUtilsUnitTest { + + @Test + public void testgetCurrentUserLogin() { + SecurityContext securityContext = SecurityContextHolder.createEmptyContext(); + securityContext.setAuthentication(new UsernamePasswordAuthenticationToken("admin", "admin")); + SecurityContextHolder.setContext(securityContext); + Optional login = SecurityUtils.getCurrentUserLogin(); + assertThat(login).contains("admin"); + } + + @Test + public void testgetCurrentUserJWT() { + SecurityContext securityContext = SecurityContextHolder.createEmptyContext(); + securityContext.setAuthentication(new UsernamePasswordAuthenticationToken("admin", "token")); + SecurityContextHolder.setContext(securityContext); + Optional jwt = SecurityUtils.getCurrentUserJWT(); + assertThat(jwt).contains("token"); + } + + @Test + public void testIsAuthenticated() { + SecurityContext securityContext = SecurityContextHolder.createEmptyContext(); + securityContext.setAuthentication(new UsernamePasswordAuthenticationToken("admin", "admin")); + SecurityContextHolder.setContext(securityContext); + boolean isAuthenticated = SecurityUtils.isAuthenticated(); + assertThat(isAuthenticated).isTrue(); + } + + @Test + public void testAnonymousIsNotAuthenticated() { + SecurityContext securityContext = SecurityContextHolder.createEmptyContext(); + Collection authorities = new ArrayList<>(); + authorities.add(new SimpleGrantedAuthority(AuthoritiesConstants.ANONYMOUS)); + securityContext.setAuthentication(new UsernamePasswordAuthenticationToken("anonymous", "anonymous", authorities)); + SecurityContextHolder.setContext(securityContext); + boolean isAuthenticated = SecurityUtils.isAuthenticated(); + assertThat(isAuthenticated).isFalse(); + } + + @Test + public void testIsCurrentUserInRole() { + SecurityContext securityContext = SecurityContextHolder.createEmptyContext(); + Collection authorities = new ArrayList<>(); + authorities.add(new SimpleGrantedAuthority(AuthoritiesConstants.USER)); + securityContext.setAuthentication(new UsernamePasswordAuthenticationToken("user", "user", authorities)); + SecurityContextHolder.setContext(securityContext); + + assertThat(SecurityUtils.isCurrentUserInRole(AuthoritiesConstants.USER)).isTrue(); + assertThat(SecurityUtils.isCurrentUserInRole(AuthoritiesConstants.ADMIN)).isFalse(); + } + +} diff --git a/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/security/jwt/JWTFilter2UnitTest.java b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/security/jwt/JWTFilter2UnitTest.java new file mode 100644 index 000000000000..11a64993e920 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/security/jwt/JWTFilter2UnitTest.java @@ -0,0 +1,116 @@ +package com.baeldung.jhipster6.security.jwt; + +import com.baeldung.jhipster6.security.AuthoritiesConstants; + +import io.github.jhipster.config.JHipsterProperties; +import io.jsonwebtoken.io.Decoders; +import io.jsonwebtoken.security.Keys; + +import org.junit.Before; +import org.junit.Test; +import org.springframework.http.HttpStatus; +import org.springframework.mock.web.MockFilterChain; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.test.util.ReflectionTestUtils; + +import java.util.Collections; + +import static org.assertj.core.api.Assertions.assertThat; + +public class JWTFilter2UnitTest { + + private TokenProvider tokenProvider; + + private JWTFilter jwtFilter; + + @Before + public void setup() { + JHipsterProperties jHipsterProperties = new JHipsterProperties(); + tokenProvider = new TokenProvider(jHipsterProperties); + ReflectionTestUtils.setField(tokenProvider, "key", + Keys.hmacShaKeyFor(Decoders.BASE64 + .decode("fd54a45s65fds737b9aafcb3412e07ed99b267f33413274720ddbb7f6c5e64e9f14075f2d7ed041592f0b7657baf8"))); + + ReflectionTestUtils.setField(tokenProvider, "tokenValidityInMilliseconds", 60000); + jwtFilter = new JWTFilter(tokenProvider); + SecurityContextHolder.getContext().setAuthentication(null); + } + + @Test + public void testJWTFilter() throws Exception { + UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken( + "test-user", + "test-password", + Collections.singletonList(new SimpleGrantedAuthority(AuthoritiesConstants.USER)) + ); + String jwt = tokenProvider.createToken(authentication, false); + MockHttpServletRequest request = new MockHttpServletRequest(); + request.addHeader(JWTFilter.AUTHORIZATION_HEADER, "Bearer " + jwt); + request.setRequestURI("/api/test"); + MockHttpServletResponse response = new MockHttpServletResponse(); + MockFilterChain filterChain = new MockFilterChain(); + jwtFilter.doFilter(request, response, filterChain); + assertThat(response.getStatus()).isEqualTo(HttpStatus.OK.value()); + assertThat(SecurityContextHolder.getContext().getAuthentication().getName()).isEqualTo("test-user"); + assertThat(SecurityContextHolder.getContext().getAuthentication().getCredentials().toString()).isEqualTo(jwt); + } + + @Test + public void testJWTFilterInvalidToken() throws Exception { + String jwt = "wrong_jwt"; + MockHttpServletRequest request = new MockHttpServletRequest(); + request.addHeader(JWTFilter.AUTHORIZATION_HEADER, "Bearer " + jwt); + request.setRequestURI("/api/test"); + MockHttpServletResponse response = new MockHttpServletResponse(); + MockFilterChain filterChain = new MockFilterChain(); + jwtFilter.doFilter(request, response, filterChain); + assertThat(response.getStatus()).isEqualTo(HttpStatus.OK.value()); + assertThat(SecurityContextHolder.getContext().getAuthentication()).isNull(); + } + + @Test + public void testJWTFilterMissingAuthorization() throws Exception { + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setRequestURI("/api/test"); + MockHttpServletResponse response = new MockHttpServletResponse(); + MockFilterChain filterChain = new MockFilterChain(); + jwtFilter.doFilter(request, response, filterChain); + assertThat(response.getStatus()).isEqualTo(HttpStatus.OK.value()); + assertThat(SecurityContextHolder.getContext().getAuthentication()).isNull(); + } + + @Test + public void testJWTFilterMissingToken() throws Exception { + MockHttpServletRequest request = new MockHttpServletRequest(); + request.addHeader(JWTFilter.AUTHORIZATION_HEADER, "Bearer "); + request.setRequestURI("/api/test"); + MockHttpServletResponse response = new MockHttpServletResponse(); + MockFilterChain filterChain = new MockFilterChain(); + jwtFilter.doFilter(request, response, filterChain); + assertThat(response.getStatus()).isEqualTo(HttpStatus.OK.value()); + assertThat(SecurityContextHolder.getContext().getAuthentication()).isNull(); + } + + @Test + public void testJWTFilterWrongScheme() throws Exception { + UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken( + "test-user", + "test-password", + Collections.singletonList(new SimpleGrantedAuthority(AuthoritiesConstants.USER)) + ); + String jwt = tokenProvider.createToken(authentication, false); + MockHttpServletRequest request = new MockHttpServletRequest(); + request.addHeader(JWTFilter.AUTHORIZATION_HEADER, "Basic " + jwt); + request.setRequestURI("/api/test"); + MockHttpServletResponse response = new MockHttpServletResponse(); + MockFilterChain filterChain = new MockFilterChain(); + jwtFilter.doFilter(request, response, filterChain); + assertThat(response.getStatus()).isEqualTo(HttpStatus.OK.value()); + assertThat(SecurityContextHolder.getContext().getAuthentication()).isNull(); + } + +} diff --git a/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/security/jwt/JWTFilterUnitTest.java b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/security/jwt/JWTFilterUnitTest.java new file mode 100644 index 000000000000..13633c901c78 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/security/jwt/JWTFilterUnitTest.java @@ -0,0 +1,116 @@ +package com.baeldung.jhipster6.security.jwt; + +import com.baeldung.jhipster6.security.AuthoritiesConstants; + +import io.github.jhipster.config.JHipsterProperties; +import io.jsonwebtoken.io.Decoders; +import io.jsonwebtoken.security.Keys; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.springframework.http.HttpStatus; +import org.springframework.mock.web.MockFilterChain; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.test.util.ReflectionTestUtils; + +import java.util.Collections; + +import static org.assertj.core.api.Assertions.assertThat; + +public class JWTFilterUnitTest { + + private TokenProvider tokenProvider; + + private JWTFilter jwtFilter; + + @BeforeEach + public void setup() { + JHipsterProperties jHipsterProperties = new JHipsterProperties(); + tokenProvider = new TokenProvider(jHipsterProperties); + ReflectionTestUtils.setField(tokenProvider, "key", + Keys.hmacShaKeyFor(Decoders.BASE64 + .decode("fd54a45s65fds737b9aafcb3412e07ed99b267f33413274720ddbb7f6c5e64e9f14075f2d7ed041592f0b7657baf8"))); + + ReflectionTestUtils.setField(tokenProvider, "tokenValidityInMilliseconds", 60000); + jwtFilter = new JWTFilter(tokenProvider); + SecurityContextHolder.getContext().setAuthentication(null); + } + + @Test + public void testJWTFilter() throws Exception { + UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken( + "test-user", + "test-password", + Collections.singletonList(new SimpleGrantedAuthority(AuthoritiesConstants.USER)) + ); + String jwt = tokenProvider.createToken(authentication, false); + MockHttpServletRequest request = new MockHttpServletRequest(); + request.addHeader(JWTFilter.AUTHORIZATION_HEADER, "Bearer " + jwt); + request.setRequestURI("/api/test"); + MockHttpServletResponse response = new MockHttpServletResponse(); + MockFilterChain filterChain = new MockFilterChain(); + jwtFilter.doFilter(request, response, filterChain); + assertThat(response.getStatus()).isEqualTo(HttpStatus.OK.value()); + assertThat(SecurityContextHolder.getContext().getAuthentication().getName()).isEqualTo("test-user"); + assertThat(SecurityContextHolder.getContext().getAuthentication().getCredentials().toString()).isEqualTo(jwt); + } + + @Test + public void testJWTFilterInvalidToken() throws Exception { + String jwt = "wrong_jwt"; + MockHttpServletRequest request = new MockHttpServletRequest(); + request.addHeader(JWTFilter.AUTHORIZATION_HEADER, "Bearer " + jwt); + request.setRequestURI("/api/test"); + MockHttpServletResponse response = new MockHttpServletResponse(); + MockFilterChain filterChain = new MockFilterChain(); + jwtFilter.doFilter(request, response, filterChain); + assertThat(response.getStatus()).isEqualTo(HttpStatus.OK.value()); + assertThat(SecurityContextHolder.getContext().getAuthentication()).isNull(); + } + + @Test + public void testJWTFilterMissingAuthorization() throws Exception { + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setRequestURI("/api/test"); + MockHttpServletResponse response = new MockHttpServletResponse(); + MockFilterChain filterChain = new MockFilterChain(); + jwtFilter.doFilter(request, response, filterChain); + assertThat(response.getStatus()).isEqualTo(HttpStatus.OK.value()); + assertThat(SecurityContextHolder.getContext().getAuthentication()).isNull(); + } + + @Test + public void testJWTFilterMissingToken() throws Exception { + MockHttpServletRequest request = new MockHttpServletRequest(); + request.addHeader(JWTFilter.AUTHORIZATION_HEADER, "Bearer "); + request.setRequestURI("/api/test"); + MockHttpServletResponse response = new MockHttpServletResponse(); + MockFilterChain filterChain = new MockFilterChain(); + jwtFilter.doFilter(request, response, filterChain); + assertThat(response.getStatus()).isEqualTo(HttpStatus.OK.value()); + assertThat(SecurityContextHolder.getContext().getAuthentication()).isNull(); + } + + @Test + public void testJWTFilterWrongScheme() throws Exception { + UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken( + "test-user", + "test-password", + Collections.singletonList(new SimpleGrantedAuthority(AuthoritiesConstants.USER)) + ); + String jwt = tokenProvider.createToken(authentication, false); + MockHttpServletRequest request = new MockHttpServletRequest(); + request.addHeader(JWTFilter.AUTHORIZATION_HEADER, "Basic " + jwt); + request.setRequestURI("/api/test"); + MockHttpServletResponse response = new MockHttpServletResponse(); + MockFilterChain filterChain = new MockFilterChain(); + jwtFilter.doFilter(request, response, filterChain); + assertThat(response.getStatus()).isEqualTo(HttpStatus.OK.value()); + assertThat(SecurityContextHolder.getContext().getAuthentication()).isNull(); + } + +} diff --git a/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/security/jwt/TokenProvider2UnitTest.java b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/security/jwt/TokenProvider2UnitTest.java new file mode 100644 index 000000000000..311deb3fd712 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/security/jwt/TokenProvider2UnitTest.java @@ -0,0 +1,111 @@ +package com.baeldung.jhipster6.security.jwt; + +import com.baeldung.jhipster6.security.AuthoritiesConstants; + +import java.security.Key; +import java.util.*; + +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mockito; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.test.util.ReflectionTestUtils; + +import io.github.jhipster.config.JHipsterProperties; +import io.jsonwebtoken.Jwts; +import io.jsonwebtoken.SignatureAlgorithm; +import io.jsonwebtoken.io.Decoders; +import io.jsonwebtoken.security.Keys; + +import static org.assertj.core.api.Assertions.assertThat; + +public class TokenProvider2UnitTest { + + private final long ONE_MINUTE = 60000; + private Key key; + private JHipsterProperties jHipsterProperties; + private TokenProvider tokenProvider; + + @Before + public void setup() { + jHipsterProperties = Mockito.mock(JHipsterProperties.class); + tokenProvider = new TokenProvider(jHipsterProperties); + key = Keys.hmacShaKeyFor(Decoders.BASE64 + .decode("fd54a45s65fds737b9aafcb3412e07ed99b267f33413274720ddbb7f6c5e64e9f14075f2d7ed041592f0b7657baf8")); + + ReflectionTestUtils.setField(tokenProvider, "key", key); + ReflectionTestUtils.setField(tokenProvider, "tokenValidityInMilliseconds", ONE_MINUTE); + } + + @Test + public void testReturnFalseWhenJWThasInvalidSignature() { + boolean isTokenValid = tokenProvider.validateToken(createTokenWithDifferentSignature()); + + assertThat(isTokenValid).isEqualTo(false); + } + + @Test + public void testReturnFalseWhenJWTisMalformed() { + Authentication authentication = createAuthentication(); + String token = tokenProvider.createToken(authentication, false); + String invalidToken = token.substring(1); + boolean isTokenValid = tokenProvider.validateToken(invalidToken); + + assertThat(isTokenValid).isEqualTo(false); + } + + @Test + public void testReturnFalseWhenJWTisExpired() { + ReflectionTestUtils.setField(tokenProvider, "tokenValidityInMilliseconds", -ONE_MINUTE); + + Authentication authentication = createAuthentication(); + String token = tokenProvider.createToken(authentication, false); + + boolean isTokenValid = tokenProvider.validateToken(token); + + assertThat(isTokenValid).isEqualTo(false); + } + + @Test + public void testReturnFalseWhenJWTisUnsupported() { + String unsupportedToken = createUnsupportedToken(); + + boolean isTokenValid = tokenProvider.validateToken(unsupportedToken); + + assertThat(isTokenValid).isEqualTo(false); + } + + @Test + public void testReturnFalseWhenJWTisInvalid() { + boolean isTokenValid = tokenProvider.validateToken(""); + + assertThat(isTokenValid).isEqualTo(false); + } + + private Authentication createAuthentication() { + Collection authorities = new ArrayList<>(); + authorities.add(new SimpleGrantedAuthority(AuthoritiesConstants.ANONYMOUS)); + return new UsernamePasswordAuthenticationToken("anonymous", "anonymous", authorities); + } + + private String createUnsupportedToken() { + return Jwts.builder() + .setPayload("payload") + .signWith(key, SignatureAlgorithm.HS512) + .compact(); + } + + private String createTokenWithDifferentSignature() { + Key otherKey = Keys.hmacShaKeyFor(Decoders.BASE64 + .decode("Xfd54a45s65fds737b9aafcb3412e07ed99b267f33413274720ddbb7f6c5e64e9f14075f2d7ed041592f0b7657baf8")); + + return Jwts.builder() + .setSubject("anonymous") + .signWith(otherKey, SignatureAlgorithm.HS512) + .setExpiration(new Date(new Date().getTime() + ONE_MINUTE)) + .compact(); + } +} diff --git a/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/security/jwt/TokenProviderUnitTest.java b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/security/jwt/TokenProviderUnitTest.java new file mode 100644 index 000000000000..3d14352c797a --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/security/jwt/TokenProviderUnitTest.java @@ -0,0 +1,109 @@ +package com.baeldung.jhipster6.security.jwt; + +import com.baeldung.jhipster6.security.AuthoritiesConstants; + +import java.security.Key; +import java.util.*; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.test.util.ReflectionTestUtils; + +import io.github.jhipster.config.JHipsterProperties; +import io.jsonwebtoken.Jwts; +import io.jsonwebtoken.SignatureAlgorithm; +import io.jsonwebtoken.io.Decoders; +import io.jsonwebtoken.security.Keys; + +import static org.assertj.core.api.Assertions.assertThat; + +public class TokenProviderUnitTest { + + private static final long ONE_MINUTE = 60000; + + private Key key; + private TokenProvider tokenProvider; + + @BeforeEach + public void setup() { + tokenProvider = new TokenProvider( new JHipsterProperties()); + key = Keys.hmacShaKeyFor(Decoders.BASE64 + .decode("fd54a45s65fds737b9aafcb3412e07ed99b267f33413274720ddbb7f6c5e64e9f14075f2d7ed041592f0b7657baf8")); + + ReflectionTestUtils.setField(tokenProvider, "key", key); + ReflectionTestUtils.setField(tokenProvider, "tokenValidityInMilliseconds", ONE_MINUTE); + } + + @Test + public void testReturnFalseWhenJWThasInvalidSignature() { + boolean isTokenValid = tokenProvider.validateToken(createTokenWithDifferentSignature()); + + assertThat(isTokenValid).isEqualTo(false); + } + + @Test + public void testReturnFalseWhenJWTisMalformed() { + Authentication authentication = createAuthentication(); + String token = tokenProvider.createToken(authentication, false); + String invalidToken = token.substring(1); + boolean isTokenValid = tokenProvider.validateToken(invalidToken); + + assertThat(isTokenValid).isEqualTo(false); + } + + @Test + public void testReturnFalseWhenJWTisExpired() { + ReflectionTestUtils.setField(tokenProvider, "tokenValidityInMilliseconds", -ONE_MINUTE); + + Authentication authentication = createAuthentication(); + String token = tokenProvider.createToken(authentication, false); + + boolean isTokenValid = tokenProvider.validateToken(token); + + assertThat(isTokenValid).isEqualTo(false); + } + + @Test + public void testReturnFalseWhenJWTisUnsupported() { + String unsupportedToken = createUnsupportedToken(); + + boolean isTokenValid = tokenProvider.validateToken(unsupportedToken); + + assertThat(isTokenValid).isEqualTo(false); + } + + @Test + public void testReturnFalseWhenJWTisInvalid() { + boolean isTokenValid = tokenProvider.validateToken(""); + + assertThat(isTokenValid).isEqualTo(false); + } + + private Authentication createAuthentication() { + Collection authorities = new ArrayList<>(); + authorities.add(new SimpleGrantedAuthority(AuthoritiesConstants.ANONYMOUS)); + return new UsernamePasswordAuthenticationToken("anonymous", "anonymous", authorities); + } + + private String createUnsupportedToken() { + return Jwts.builder() + .setPayload("payload") + .signWith(key, SignatureAlgorithm.HS512) + .compact(); + } + + private String createTokenWithDifferentSignature() { + Key otherKey = Keys.hmacShaKeyFor(Decoders.BASE64 + .decode("Xfd54a45s65fds737b9aafcb3412e07ed99b267f33413274720ddbb7f6c5e64e9f14075f2d7ed041592f0b7657baf8")); + + return Jwts.builder() + .setSubject("anonymous") + .signWith(otherKey, SignatureAlgorithm.HS512) + .setExpiration(new Date(new Date().getTime() + ONE_MINUTE)) + .compact(); + } +} diff --git a/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/service/MailServiceIT.java b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/service/MailServiceIT.java new file mode 100644 index 000000000000..602ff4319d64 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/service/MailServiceIT.java @@ -0,0 +1,189 @@ +package com.baeldung.jhipster6.service; + +import com.baeldung.jhipster6.config.Constants; + +import com.baeldung.jhipster6.BookstoreApp; +import com.baeldung.jhipster6.domain.User; + +import io.github.jhipster.config.JHipsterProperties; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.ArgumentCaptor; +import org.mockito.Captor; +import org.mockito.MockitoAnnotations; +import org.mockito.Spy; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.MessageSource; +import org.springframework.mail.MailSendException; +import org.springframework.mail.javamail.JavaMailSenderImpl; +import org.thymeleaf.spring5.SpringTemplateEngine; + +import javax.mail.Multipart; +import javax.mail.internet.MimeBodyPart; +import javax.mail.internet.MimeMessage; +import javax.mail.internet.MimeMultipart; +import java.io.ByteArrayOutputStream; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.*; + +/** + * Integration tests for {@link MailService}. + */ +@SpringBootTest(classes = BookstoreApp.class) +public class MailServiceIT { + + @Autowired + private JHipsterProperties jHipsterProperties; + + @Autowired + private MessageSource messageSource; + + @Autowired + private SpringTemplateEngine templateEngine; + + @Spy + private JavaMailSenderImpl javaMailSender; + + @Captor + private ArgumentCaptor messageCaptor; + + private MailService mailService; + + @BeforeEach + public void setup() { + MockitoAnnotations.initMocks(this); + doNothing().when(javaMailSender).send(any(MimeMessage.class)); + mailService = new MailService(jHipsterProperties, javaMailSender, messageSource, templateEngine); + } + + @Test + public void testSendEmail() throws Exception { + mailService.sendEmail("john.doe@example.com", "testSubject", "testContent", false, false); + verify(javaMailSender).send(messageCaptor.capture()); + MimeMessage message = messageCaptor.getValue(); + assertThat(message.getSubject()).isEqualTo("testSubject"); + assertThat(message.getAllRecipients()[0].toString()).isEqualTo("john.doe@example.com"); + assertThat(message.getFrom()[0].toString()).isEqualTo("test@localhost"); + assertThat(message.getContent()).isInstanceOf(String.class); + assertThat(message.getContent().toString()).isEqualTo("testContent"); + assertThat(message.getDataHandler().getContentType()).isEqualTo("text/plain; charset=UTF-8"); + } + + @Test + public void testSendHtmlEmail() throws Exception { + mailService.sendEmail("john.doe@example.com", "testSubject", "testContent", false, true); + verify(javaMailSender).send(messageCaptor.capture()); + MimeMessage message = messageCaptor.getValue(); + assertThat(message.getSubject()).isEqualTo("testSubject"); + assertThat(message.getAllRecipients()[0].toString()).isEqualTo("john.doe@example.com"); + assertThat(message.getFrom()[0].toString()).isEqualTo("test@localhost"); + assertThat(message.getContent()).isInstanceOf(String.class); + assertThat(message.getContent().toString()).isEqualTo("testContent"); + assertThat(message.getDataHandler().getContentType()).isEqualTo("text/html;charset=UTF-8"); + } + + @Test + public void testSendMultipartEmail() throws Exception { + mailService.sendEmail("john.doe@example.com", "testSubject", "testContent", true, false); + verify(javaMailSender).send(messageCaptor.capture()); + MimeMessage message = messageCaptor.getValue(); + MimeMultipart mp = (MimeMultipart) message.getContent(); + MimeBodyPart part = (MimeBodyPart) ((MimeMultipart) mp.getBodyPart(0).getContent()).getBodyPart(0); + ByteArrayOutputStream aos = new ByteArrayOutputStream(); + part.writeTo(aos); + assertThat(message.getSubject()).isEqualTo("testSubject"); + assertThat(message.getAllRecipients()[0].toString()).isEqualTo("john.doe@example.com"); + assertThat(message.getFrom()[0].toString()).isEqualTo("test@localhost"); + assertThat(message.getContent()).isInstanceOf(Multipart.class); + assertThat(aos.toString()).isEqualTo("\r\ntestContent"); + assertThat(part.getDataHandler().getContentType()).isEqualTo("text/plain; charset=UTF-8"); + } + + @Test + public void testSendMultipartHtmlEmail() throws Exception { + mailService.sendEmail("john.doe@example.com", "testSubject", "testContent", true, true); + verify(javaMailSender).send(messageCaptor.capture()); + MimeMessage message = messageCaptor.getValue(); + MimeMultipart mp = (MimeMultipart) message.getContent(); + MimeBodyPart part = (MimeBodyPart) ((MimeMultipart) mp.getBodyPart(0).getContent()).getBodyPart(0); + ByteArrayOutputStream aos = new ByteArrayOutputStream(); + part.writeTo(aos); + assertThat(message.getSubject()).isEqualTo("testSubject"); + assertThat(message.getAllRecipients()[0].toString()).isEqualTo("john.doe@example.com"); + assertThat(message.getFrom()[0].toString()).isEqualTo("test@localhost"); + assertThat(message.getContent()).isInstanceOf(Multipart.class); + assertThat(aos.toString()).isEqualTo("\r\ntestContent"); + assertThat(part.getDataHandler().getContentType()).isEqualTo("text/html;charset=UTF-8"); + } + + @Test + public void testSendEmailFromTemplate() throws Exception { + User user = new User(); + user.setLogin("john"); + user.setEmail("john.doe@example.com"); + user.setLangKey("en"); + mailService.sendEmailFromTemplate(user, "mail/testEmail", "email.test.title"); + verify(javaMailSender).send(messageCaptor.capture()); + MimeMessage message = messageCaptor.getValue(); + assertThat(message.getSubject()).isEqualTo("test title"); + assertThat(message.getAllRecipients()[0].toString()).isEqualTo(user.getEmail()); + assertThat(message.getFrom()[0].toString()).isEqualTo("test@localhost"); + assertThat(message.getContent().toString()).isEqualToNormalizingNewlines("test title, http://127.0.0.1:8080, john\n"); + assertThat(message.getDataHandler().getContentType()).isEqualTo("text/html;charset=UTF-8"); + } + + @Test + public void testSendActivationEmail() throws Exception { + User user = new User(); + user.setLangKey(Constants.DEFAULT_LANGUAGE); + user.setLogin("john"); + user.setEmail("john.doe@example.com"); + mailService.sendActivationEmail(user); + verify(javaMailSender).send(messageCaptor.capture()); + MimeMessage message = messageCaptor.getValue(); + assertThat(message.getAllRecipients()[0].toString()).isEqualTo(user.getEmail()); + assertThat(message.getFrom()[0].toString()).isEqualTo("test@localhost"); + assertThat(message.getContent().toString()).isNotEmpty(); + assertThat(message.getDataHandler().getContentType()).isEqualTo("text/html;charset=UTF-8"); + } + + @Test + public void testCreationEmail() throws Exception { + User user = new User(); + user.setLangKey(Constants.DEFAULT_LANGUAGE); + user.setLogin("john"); + user.setEmail("john.doe@example.com"); + mailService.sendCreationEmail(user); + verify(javaMailSender).send(messageCaptor.capture()); + MimeMessage message = messageCaptor.getValue(); + assertThat(message.getAllRecipients()[0].toString()).isEqualTo(user.getEmail()); + assertThat(message.getFrom()[0].toString()).isEqualTo("test@localhost"); + assertThat(message.getContent().toString()).isNotEmpty(); + assertThat(message.getDataHandler().getContentType()).isEqualTo("text/html;charset=UTF-8"); + } + + @Test + public void testSendPasswordResetMail() throws Exception { + User user = new User(); + user.setLangKey(Constants.DEFAULT_LANGUAGE); + user.setLogin("john"); + user.setEmail("john.doe@example.com"); + mailService.sendPasswordResetMail(user); + verify(javaMailSender).send(messageCaptor.capture()); + MimeMessage message = messageCaptor.getValue(); + assertThat(message.getAllRecipients()[0].toString()).isEqualTo(user.getEmail()); + assertThat(message.getFrom()[0].toString()).isEqualTo("test@localhost"); + assertThat(message.getContent().toString()).isNotEmpty(); + assertThat(message.getDataHandler().getContentType()).isEqualTo("text/html;charset=UTF-8"); + } + + @Test + public void testSendEmailWithException() throws Exception { + doThrow(MailSendException.class).when(javaMailSender).send(any(MimeMessage.class)); + mailService.sendEmail("john.doe@example.com", "testSubject", "testContent", false, false); + } + +} diff --git a/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/service/MailServiceIntegrationTest.java b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/service/MailServiceIntegrationTest.java new file mode 100644 index 000000000000..af04430ee7c9 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/service/MailServiceIntegrationTest.java @@ -0,0 +1,188 @@ +package com.baeldung.jhipster6.service; +import com.baeldung.jhipster6.config.Constants; + +import com.baeldung.jhipster6.BookstoreApp; +import com.baeldung.jhipster6.domain.User; + +import io.github.jhipster.config.JHipsterProperties; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; +import org.mockito.Captor; +import org.mockito.MockitoAnnotations; +import org.mockito.Spy; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.MessageSource; +import org.springframework.mail.MailSendException; +import org.springframework.mail.javamail.JavaMailSenderImpl; +import org.springframework.test.context.junit4.SpringRunner; +import org.thymeleaf.spring5.SpringTemplateEngine; + +import javax.mail.Multipart; +import javax.mail.internet.MimeBodyPart; +import javax.mail.internet.MimeMessage; +import javax.mail.internet.MimeMultipart; +import java.io.ByteArrayOutputStream; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.*; + +@RunWith(SpringRunner.class) +@SpringBootTest(classes = BookstoreApp.class) +public class MailServiceIntegrationTest { + + @Autowired + private JHipsterProperties jHipsterProperties; + + @Autowired + private MessageSource messageSource; + + @Autowired + private SpringTemplateEngine templateEngine; + + @Spy + private JavaMailSenderImpl javaMailSender; + + @Captor + private ArgumentCaptor messageCaptor; + + private MailService mailService; + + @Before + public void setup() { + MockitoAnnotations.initMocks(this); + doNothing().when(javaMailSender).send(any(MimeMessage.class)); + mailService = new MailService(jHipsterProperties, javaMailSender, messageSource, templateEngine); + } + + @Test + public void testSendEmail() throws Exception { + mailService.sendEmail("john.doe@example.com", "testSubject", "testContent", false, false); + verify(javaMailSender).send(messageCaptor.capture()); + MimeMessage message = messageCaptor.getValue(); + assertThat(message.getSubject()).isEqualTo("testSubject"); + assertThat(message.getAllRecipients()[0].toString()).isEqualTo("john.doe@example.com"); + assertThat(message.getFrom()[0].toString()).isEqualTo("test@localhost"); + assertThat(message.getContent()).isInstanceOf(String.class); + assertThat(message.getContent().toString()).isEqualTo("testContent"); + assertThat(message.getDataHandler().getContentType()).isEqualTo("text/plain; charset=UTF-8"); + } + + @Test + public void testSendHtmlEmail() throws Exception { + mailService.sendEmail("john.doe@example.com", "testSubject", "testContent", false, true); + verify(javaMailSender).send(messageCaptor.capture()); + MimeMessage message = messageCaptor.getValue(); + assertThat(message.getSubject()).isEqualTo("testSubject"); + assertThat(message.getAllRecipients()[0].toString()).isEqualTo("john.doe@example.com"); + assertThat(message.getFrom()[0].toString()).isEqualTo("test@localhost"); + assertThat(message.getContent()).isInstanceOf(String.class); + assertThat(message.getContent().toString()).isEqualTo("testContent"); + assertThat(message.getDataHandler().getContentType()).isEqualTo("text/html;charset=UTF-8"); + } + + @Test + public void testSendMultipartEmail() throws Exception { + mailService.sendEmail("john.doe@example.com", "testSubject", "testContent", true, false); + verify(javaMailSender).send(messageCaptor.capture()); + MimeMessage message = messageCaptor.getValue(); + MimeMultipart mp = (MimeMultipart) message.getContent(); + MimeBodyPart part = (MimeBodyPart) ((MimeMultipart) mp.getBodyPart(0).getContent()).getBodyPart(0); + ByteArrayOutputStream aos = new ByteArrayOutputStream(); + part.writeTo(aos); + assertThat(message.getSubject()).isEqualTo("testSubject"); + assertThat(message.getAllRecipients()[0].toString()).isEqualTo("john.doe@example.com"); + assertThat(message.getFrom()[0].toString()).isEqualTo("test@localhost"); + assertThat(message.getContent()).isInstanceOf(Multipart.class); + assertThat(aos.toString()).isEqualTo("\r\ntestContent"); + assertThat(part.getDataHandler().getContentType()).isEqualTo("text/plain; charset=UTF-8"); + } + + @Test + public void testSendMultipartHtmlEmail() throws Exception { + mailService.sendEmail("john.doe@example.com", "testSubject", "testContent", true, true); + verify(javaMailSender).send(messageCaptor.capture()); + MimeMessage message = messageCaptor.getValue(); + MimeMultipart mp = (MimeMultipart) message.getContent(); + MimeBodyPart part = (MimeBodyPart) ((MimeMultipart) mp.getBodyPart(0).getContent()).getBodyPart(0); + ByteArrayOutputStream aos = new ByteArrayOutputStream(); + part.writeTo(aos); + assertThat(message.getSubject()).isEqualTo("testSubject"); + assertThat(message.getAllRecipients()[0].toString()).isEqualTo("john.doe@example.com"); + assertThat(message.getFrom()[0].toString()).isEqualTo("test@localhost"); + assertThat(message.getContent()).isInstanceOf(Multipart.class); + assertThat(aos.toString()).isEqualTo("\r\ntestContent"); + assertThat(part.getDataHandler().getContentType()).isEqualTo("text/html;charset=UTF-8"); + } + + @Test + public void testSendEmailFromTemplate() throws Exception { + User user = new User(); + user.setLogin("john"); + user.setEmail("john.doe@example.com"); + user.setLangKey("en"); + mailService.sendEmailFromTemplate(user, "mail/testEmail", "email.test.title"); + verify(javaMailSender).send(messageCaptor.capture()); + MimeMessage message = messageCaptor.getValue(); + assertThat(message.getSubject()).isEqualTo("test title"); + assertThat(message.getAllRecipients()[0].toString()).isEqualTo(user.getEmail()); + assertThat(message.getFrom()[0].toString()).isEqualTo("test@localhost"); + assertThat(message.getContent().toString()).isEqualToNormalizingNewlines("test title, http://127.0.0.1:8080, john\n"); + assertThat(message.getDataHandler().getContentType()).isEqualTo("text/html;charset=UTF-8"); + } + + @Test + public void testSendActivationEmail() throws Exception { + User user = new User(); + user.setLangKey(Constants.DEFAULT_LANGUAGE); + user.setLogin("john"); + user.setEmail("john.doe@example.com"); + mailService.sendActivationEmail(user); + verify(javaMailSender).send(messageCaptor.capture()); + MimeMessage message = messageCaptor.getValue(); + assertThat(message.getAllRecipients()[0].toString()).isEqualTo(user.getEmail()); + assertThat(message.getFrom()[0].toString()).isEqualTo("test@localhost"); + assertThat(message.getContent().toString()).isNotEmpty(); + assertThat(message.getDataHandler().getContentType()).isEqualTo("text/html;charset=UTF-8"); + } + + @Test + public void testCreationEmail() throws Exception { + User user = new User(); + user.setLangKey(Constants.DEFAULT_LANGUAGE); + user.setLogin("john"); + user.setEmail("john.doe@example.com"); + mailService.sendCreationEmail(user); + verify(javaMailSender).send(messageCaptor.capture()); + MimeMessage message = messageCaptor.getValue(); + assertThat(message.getAllRecipients()[0].toString()).isEqualTo(user.getEmail()); + assertThat(message.getFrom()[0].toString()).isEqualTo("test@localhost"); + assertThat(message.getContent().toString()).isNotEmpty(); + assertThat(message.getDataHandler().getContentType()).isEqualTo("text/html;charset=UTF-8"); + } + + @Test + public void testSendPasswordResetMail() throws Exception { + User user = new User(); + user.setLangKey(Constants.DEFAULT_LANGUAGE); + user.setLogin("john"); + user.setEmail("john.doe@example.com"); + mailService.sendPasswordResetMail(user); + verify(javaMailSender).send(messageCaptor.capture()); + MimeMessage message = messageCaptor.getValue(); + assertThat(message.getAllRecipients()[0].toString()).isEqualTo(user.getEmail()); + assertThat(message.getFrom()[0].toString()).isEqualTo("test@localhost"); + assertThat(message.getContent().toString()).isNotEmpty(); + assertThat(message.getDataHandler().getContentType()).isEqualTo("text/html;charset=UTF-8"); + } + + @Test + public void testSendEmailWithException() throws Exception { + doThrow(MailSendException.class).when(javaMailSender).send(any(MimeMessage.class)); + mailService.sendEmail("john.doe@example.com", "testSubject", "testContent", false, false); + } + +} diff --git a/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/service/UserServiceIT.java b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/service/UserServiceIT.java new file mode 100644 index 000000000000..5c624b166d4a --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/service/UserServiceIT.java @@ -0,0 +1,200 @@ +package com.baeldung.jhipster6.service; + +import com.baeldung.jhipster6.BookstoreApp; +import com.baeldung.jhipster6.config.Constants; +import com.baeldung.jhipster6.domain.User; +import com.baeldung.jhipster6.repository.UserRepository; +import com.baeldung.jhipster6.service.dto.UserDTO; +import com.baeldung.jhipster6.service.util.RandomUtil; + +import org.apache.commons.lang3.RandomStringUtils; +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.Mock; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.data.auditing.AuditingHandler; +import org.springframework.data.auditing.DateTimeProvider; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.transaction.annotation.Transactional; + +import java.time.Instant; +import java.time.temporal.ChronoUnit; +import java.time.LocalDateTime; +import java.util.Optional; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.when; + +/** + * Integration tests for {@link UserService}. + */ +@SpringBootTest(classes = BookstoreApp.class) +@Transactional +public class UserServiceIT { + + private static final String DEFAULT_LOGIN = "johndoe"; + + private static final String DEFAULT_EMAIL = "johndoe@localhost"; + + private static final String DEFAULT_FIRSTNAME = "john"; + + private static final String DEFAULT_LASTNAME = "doe"; + + private static final String DEFAULT_IMAGEURL = "http://placehold.it/50x50"; + + private static final String DEFAULT_LANGKEY = "en"; + + @Autowired + private UserRepository userRepository; + + @Autowired + private UserService userService; + + @Autowired + private AuditingHandler auditingHandler; + + @Mock + private DateTimeProvider dateTimeProvider; + + private User user; + + @BeforeEach + public void init() { + user = new User(); + user.setLogin(DEFAULT_LOGIN); + user.setPassword(RandomStringUtils.random(60)); + user.setActivated(true); + user.setEmail(DEFAULT_EMAIL); + user.setFirstName(DEFAULT_FIRSTNAME); + user.setLastName(DEFAULT_LASTNAME); + user.setImageUrl(DEFAULT_IMAGEURL); + user.setLangKey(DEFAULT_LANGKEY); + + when(dateTimeProvider.getNow()).thenReturn(Optional.of(LocalDateTime.now())); + auditingHandler.setDateTimeProvider(dateTimeProvider); + } + + @Test + @Transactional + public void assertThatUserMustExistToResetPassword() { + userRepository.saveAndFlush(user); + Optional maybeUser = userService.requestPasswordReset("invalid.login@localhost"); + assertThat(maybeUser).isNotPresent(); + + maybeUser = userService.requestPasswordReset(user.getEmail()); + assertThat(maybeUser).isPresent(); + assertThat(maybeUser.orElse(null).getEmail()).isEqualTo(user.getEmail()); + assertThat(maybeUser.orElse(null).getResetDate()).isNotNull(); + assertThat(maybeUser.orElse(null).getResetKey()).isNotNull(); + } + + @Test + @Transactional + public void assertThatOnlyActivatedUserCanRequestPasswordReset() { + user.setActivated(false); + userRepository.saveAndFlush(user); + + Optional maybeUser = userService.requestPasswordReset(user.getLogin()); + assertThat(maybeUser).isNotPresent(); + userRepository.delete(user); + } + + @Test + @Transactional + public void assertThatResetKeyMustNotBeOlderThan24Hours() { + Instant daysAgo = Instant.now().minus(25, ChronoUnit.HOURS); + String resetKey = RandomUtil.generateResetKey(); + user.setActivated(true); + user.setResetDate(daysAgo); + user.setResetKey(resetKey); + userRepository.saveAndFlush(user); + + Optional maybeUser = userService.completePasswordReset("johndoe2", user.getResetKey()); + assertThat(maybeUser).isNotPresent(); + userRepository.delete(user); + } + + @Test + @Transactional + public void assertThatResetKeyMustBeValid() { + Instant daysAgo = Instant.now().minus(25, ChronoUnit.HOURS); + user.setActivated(true); + user.setResetDate(daysAgo); + user.setResetKey("1234"); + userRepository.saveAndFlush(user); + + Optional maybeUser = userService.completePasswordReset("johndoe2", user.getResetKey()); + assertThat(maybeUser).isNotPresent(); + userRepository.delete(user); + } + + @Test + @Transactional + public void assertThatUserCanResetPassword() { + String oldPassword = user.getPassword(); + Instant daysAgo = Instant.now().minus(2, ChronoUnit.HOURS); + String resetKey = RandomUtil.generateResetKey(); + user.setActivated(true); + user.setResetDate(daysAgo); + user.setResetKey(resetKey); + userRepository.saveAndFlush(user); + + Optional maybeUser = userService.completePasswordReset("johndoe2", user.getResetKey()); + assertThat(maybeUser).isPresent(); + assertThat(maybeUser.orElse(null).getResetDate()).isNull(); + assertThat(maybeUser.orElse(null).getResetKey()).isNull(); + assertThat(maybeUser.orElse(null).getPassword()).isNotEqualTo(oldPassword); + + userRepository.delete(user); + } + + @Test + @Transactional + public void testFindNotActivatedUsersByCreationDateBefore() { + Instant now = Instant.now(); + when(dateTimeProvider.getNow()).thenReturn(Optional.of(now.minus(4, ChronoUnit.DAYS))); + user.setActivated(false); + User dbUser = userRepository.saveAndFlush(user); + dbUser.setCreatedDate(now.minus(4, ChronoUnit.DAYS)); + userRepository.saveAndFlush(user); + List users = userRepository.findAllByActivatedIsFalseAndCreatedDateBefore(now.minus(3, ChronoUnit.DAYS)); + assertThat(users).isNotEmpty(); + userService.removeNotActivatedUsers(); + users = userRepository.findAllByActivatedIsFalseAndCreatedDateBefore(now.minus(3, ChronoUnit.DAYS)); + assertThat(users).isEmpty(); + } + + @Test + @Transactional + public void assertThatAnonymousUserIsNotGet() { + user.setLogin(Constants.ANONYMOUS_USER); + if (!userRepository.findOneByLogin(Constants.ANONYMOUS_USER).isPresent()) { + userRepository.saveAndFlush(user); + } + final PageRequest pageable = PageRequest.of(0, (int) userRepository.count()); + final Page allManagedUsers = userService.getAllManagedUsers(pageable); + assertThat(allManagedUsers.getContent().stream() + .noneMatch(user -> Constants.ANONYMOUS_USER.equals(user.getLogin()))) + .isTrue(); + } + + + @Test + @Transactional + public void testRemoveNotActivatedUsers() { + // custom "now" for audit to use as creation date + when(dateTimeProvider.getNow()).thenReturn(Optional.of(Instant.now().minus(30, ChronoUnit.DAYS))); + + user.setActivated(false); + userRepository.saveAndFlush(user); + + Assertions.assertThat(userRepository.findOneByLogin(DEFAULT_LOGIN)).isPresent(); + userService.removeNotActivatedUsers(); + Assertions.assertThat(userRepository.findOneByLogin(DEFAULT_LOGIN)).isNotPresent(); + } + +} diff --git a/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/service/UserServiceIntegrationTest.java b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/service/UserServiceIntegrationTest.java new file mode 100644 index 000000000000..b8e8a9e1aafb --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/service/UserServiceIntegrationTest.java @@ -0,0 +1,193 @@ +package com.baeldung.jhipster6.service; + +import com.baeldung.jhipster6.BookstoreApp; +import com.baeldung.jhipster6.config.Constants; +import com.baeldung.jhipster6.domain.User; +import com.baeldung.jhipster6.repository.UserRepository; +import com.baeldung.jhipster6.service.dto.UserDTO; +import com.baeldung.jhipster6.service.util.RandomUtil; + +import org.apache.commons.lang3.RandomStringUtils; +import org.assertj.core.api.Assertions; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.data.auditing.AuditingHandler; +import org.springframework.data.auditing.DateTimeProvider; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.transaction.annotation.Transactional; + +import java.time.Instant; +import java.time.temporal.ChronoUnit; +import java.time.LocalDateTime; +import java.util.Optional; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.when; + +/** + * Test class for the UserResource REST controller. + * + * @see UserService + */ +@RunWith(SpringRunner.class) +@SpringBootTest(classes = BookstoreApp.class) +@Transactional +public class UserServiceIntegrationTest { + + @Autowired + private UserRepository userRepository; + + @Autowired + private UserService userService; + + @Autowired + private AuditingHandler auditingHandler; + + @Mock + DateTimeProvider dateTimeProvider; + + private User user; + + @Before + public void init() { + user = new User(); + user.setLogin("johndoe"); + user.setPassword(RandomStringUtils.random(60)); + user.setActivated(true); + user.setEmail("johndoe@localhost"); + user.setFirstName("john"); + user.setLastName("doe"); + user.setImageUrl("http://placehold.it/50x50"); + user.setLangKey("en"); + + when(dateTimeProvider.getNow()).thenReturn(Optional.of(LocalDateTime.now())); + auditingHandler.setDateTimeProvider(dateTimeProvider); + } + + @Test + @Transactional + public void assertThatUserMustExistToResetPassword() { + userRepository.saveAndFlush(user); + Optional maybeUser = userService.requestPasswordReset("invalid.login@localhost"); + assertThat(maybeUser).isNotPresent(); + + maybeUser = userService.requestPasswordReset(user.getEmail()); + assertThat(maybeUser).isPresent(); + assertThat(maybeUser.orElse(null).getEmail()).isEqualTo(user.getEmail()); + assertThat(maybeUser.orElse(null).getResetDate()).isNotNull(); + assertThat(maybeUser.orElse(null).getResetKey()).isNotNull(); + } + + @Test + @Transactional + public void assertThatOnlyActivatedUserCanRequestPasswordReset() { + user.setActivated(false); + userRepository.saveAndFlush(user); + + Optional maybeUser = userService.requestPasswordReset(user.getLogin()); + assertThat(maybeUser).isNotPresent(); + userRepository.delete(user); + } + + @Test + @Transactional + public void assertThatResetKeyMustNotBeOlderThan24Hours() { + Instant daysAgo = Instant.now().minus(25, ChronoUnit.HOURS); + String resetKey = RandomUtil.generateResetKey(); + user.setActivated(true); + user.setResetDate(daysAgo); + user.setResetKey(resetKey); + userRepository.saveAndFlush(user); + + Optional maybeUser = userService.completePasswordReset("johndoe2", user.getResetKey()); + assertThat(maybeUser).isNotPresent(); + userRepository.delete(user); + } + + @Test + @Transactional + public void assertThatResetKeyMustBeValid() { + Instant daysAgo = Instant.now().minus(25, ChronoUnit.HOURS); + user.setActivated(true); + user.setResetDate(daysAgo); + user.setResetKey("1234"); + userRepository.saveAndFlush(user); + + Optional maybeUser = userService.completePasswordReset("johndoe2", user.getResetKey()); + assertThat(maybeUser).isNotPresent(); + userRepository.delete(user); + } + + @Test + @Transactional + public void assertThatUserCanResetPassword() { + String oldPassword = user.getPassword(); + Instant daysAgo = Instant.now().minus(2, ChronoUnit.HOURS); + String resetKey = RandomUtil.generateResetKey(); + user.setActivated(true); + user.setResetDate(daysAgo); + user.setResetKey(resetKey); + userRepository.saveAndFlush(user); + + Optional maybeUser = userService.completePasswordReset("johndoe2", user.getResetKey()); + assertThat(maybeUser).isPresent(); + assertThat(maybeUser.orElse(null).getResetDate()).isNull(); + assertThat(maybeUser.orElse(null).getResetKey()).isNull(); + assertThat(maybeUser.orElse(null).getPassword()).isNotEqualTo(oldPassword); + + userRepository.delete(user); + } + + @Test + @Transactional + public void testFindNotActivatedUsersByCreationDateBefore() { + Instant now = Instant.now(); + when(dateTimeProvider.getNow()).thenReturn(Optional.of(now.minus(4, ChronoUnit.DAYS))); + user.setActivated(false); + User dbUser = userRepository.saveAndFlush(user); + dbUser.setCreatedDate(now.minus(4, ChronoUnit.DAYS)); + userRepository.saveAndFlush(user); + List users = userRepository.findAllByActivatedIsFalseAndCreatedDateBefore(now.minus(3, ChronoUnit.DAYS)); + assertThat(users).isNotEmpty(); + userService.removeNotActivatedUsers(); + users = userRepository.findAllByActivatedIsFalseAndCreatedDateBefore(now.minus(3, ChronoUnit.DAYS)); + assertThat(users).isEmpty(); + } + + @Test + @Transactional + public void assertThatAnonymousUserIsNotGet() { + user.setLogin(Constants.ANONYMOUS_USER); + if (!userRepository.findOneByLogin(Constants.ANONYMOUS_USER).isPresent()) { + userRepository.saveAndFlush(user); + } + final PageRequest pageable = PageRequest.of(0, (int) userRepository.count()); + final Page allManagedUsers = userService.getAllManagedUsers(pageable); + assertThat(allManagedUsers.getContent().stream() + .noneMatch(user -> Constants.ANONYMOUS_USER.equals(user.getLogin()))) + .isTrue(); + } + + + @Test + @Transactional + public void testRemoveNotActivatedUsers() { + // custom "now" for audit to use as creation date + when(dateTimeProvider.getNow()).thenReturn(Optional.of(Instant.now().minus(30, ChronoUnit.DAYS))); + + user.setActivated(false); + userRepository.saveAndFlush(user); + + Assertions.assertThat(userRepository.findOneByLogin("johndoe")).isPresent(); + userService.removeNotActivatedUsers(); + Assertions.assertThat(userRepository.findOneByLogin("johndoe")).isNotPresent(); + } + +} diff --git a/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/service/mapper/UserMapperIT.java b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/service/mapper/UserMapperIT.java new file mode 100644 index 000000000000..cca2dc7d92ec --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/service/mapper/UserMapperIT.java @@ -0,0 +1,143 @@ +package com.baeldung.jhipster6.service.mapper; + + +import com.baeldung.jhipster6.BookstoreApp; +import com.baeldung.jhipster6.domain.User; +import com.baeldung.jhipster6.service.dto.UserDTO; + +import org.apache.commons.lang3.RandomStringUtils; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Integration tests for {@link UserMapper}. + */ +@SpringBootTest(classes = BookstoreApp.class) +public class UserMapperIT { + + private static final String DEFAULT_LOGIN = "johndoe"; + private static final Long DEFAULT_ID = 1L; + + @Autowired + private UserMapper userMapper; + + private User user; + private UserDTO userDto; + + @BeforeEach + public void init() { + user = new User(); + user.setLogin(DEFAULT_LOGIN); + user.setPassword(RandomStringUtils.random(60)); + user.setActivated(true); + user.setEmail("johndoe@localhost"); + user.setFirstName("john"); + user.setLastName("doe"); + user.setImageUrl("image_url"); + user.setLangKey("en"); + + userDto = new UserDTO(user); + } + + @Test + public void usersToUserDTOsShouldMapOnlyNonNullUsers() { + List users = new ArrayList<>(); + users.add(user); + users.add(null); + + List userDTOS = userMapper.usersToUserDTOs(users); + + assertThat(userDTOS).isNotEmpty(); + assertThat(userDTOS).size().isEqualTo(1); + } + + @Test + public void userDTOsToUsersShouldMapOnlyNonNullUsers() { + List usersDto = new ArrayList<>(); + usersDto.add(userDto); + usersDto.add(null); + + List users = userMapper.userDTOsToUsers(usersDto); + + assertThat(users).isNotEmpty(); + assertThat(users).size().isEqualTo(1); + } + + @Test + public void userDTOsToUsersWithAuthoritiesStringShouldMapToUsersWithAuthoritiesDomain() { + Set authoritiesAsString = new HashSet<>(); + authoritiesAsString.add("ADMIN"); + userDto.setAuthorities(authoritiesAsString); + + List usersDto = new ArrayList<>(); + usersDto.add(userDto); + + List users = userMapper.userDTOsToUsers(usersDto); + + assertThat(users).isNotEmpty(); + assertThat(users).size().isEqualTo(1); + assertThat(users.get(0).getAuthorities()).isNotNull(); + assertThat(users.get(0).getAuthorities()).isNotEmpty(); + assertThat(users.get(0).getAuthorities().iterator().next().getName()).isEqualTo("ADMIN"); + } + + @Test + public void userDTOsToUsersMapWithNullAuthoritiesStringShouldReturnUserWithEmptyAuthorities() { + userDto.setAuthorities(null); + + List usersDto = new ArrayList<>(); + usersDto.add(userDto); + + List users = userMapper.userDTOsToUsers(usersDto); + + assertThat(users).isNotEmpty(); + assertThat(users).size().isEqualTo(1); + assertThat(users.get(0).getAuthorities()).isNotNull(); + assertThat(users.get(0).getAuthorities()).isEmpty(); + } + + @Test + public void userDTOToUserMapWithAuthoritiesStringShouldReturnUserWithAuthorities() { + Set authoritiesAsString = new HashSet<>(); + authoritiesAsString.add("ADMIN"); + userDto.setAuthorities(authoritiesAsString); + + User user = userMapper.userDTOToUser(userDto); + + assertThat(user).isNotNull(); + assertThat(user.getAuthorities()).isNotNull(); + assertThat(user.getAuthorities()).isNotEmpty(); + assertThat(user.getAuthorities().iterator().next().getName()).isEqualTo("ADMIN"); + } + + @Test + public void userDTOToUserMapWithNullAuthoritiesStringShouldReturnUserWithEmptyAuthorities() { + userDto.setAuthorities(null); + + User user = userMapper.userDTOToUser(userDto); + + assertThat(user).isNotNull(); + assertThat(user.getAuthorities()).isNotNull(); + assertThat(user.getAuthorities()).isEmpty(); + } + + @Test + public void userDTOToUserMapWithNullUserShouldReturnNull() { + assertThat(userMapper.userDTOToUser(null)).isNull(); + } + + @Test + public void testUserFromId() { + assertThat(userMapper.userFromId(DEFAULT_ID).getId()).isEqualTo(DEFAULT_ID); + assertThat(userMapper.userFromId(null)).isNull(); + } +} diff --git a/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/service/mapper/UserMapperIntegrationTest.java b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/service/mapper/UserMapperIntegrationTest.java new file mode 100644 index 000000000000..d143caccf61f --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/service/mapper/UserMapperIntegrationTest.java @@ -0,0 +1,151 @@ +package com.baeldung.jhipster6.service.mapper; + + +import com.baeldung.jhipster6.BookstoreApp; +import com.baeldung.jhipster6.domain.User; +import com.baeldung.jhipster6.service.dto.UserDTO; + +import org.apache.commons.lang3.RandomStringUtils; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Test class for the UserMapper. + * + * @see UserMapper + */ +@RunWith(SpringRunner.class) +@SpringBootTest(classes = BookstoreApp.class) +public class UserMapperIntegrationTest { + + private static final String DEFAULT_LOGIN = "johndoe"; + + @Autowired + private UserMapper userMapper; + + private User user; + private UserDTO userDto; + + private static final Long DEFAULT_ID = 1L; + + @Before + public void init() { + user = new User(); + user.setLogin(DEFAULT_LOGIN); + user.setPassword(RandomStringUtils.random(60)); + user.setActivated(true); + user.setEmail("johndoe@localhost"); + user.setFirstName("john"); + user.setLastName("doe"); + user.setImageUrl("image_url"); + user.setLangKey("en"); + + userDto = new UserDTO(user); + } + + @Test + public void usersToUserDTOsShouldMapOnlyNonNullUsers(){ + List users = new ArrayList<>(); + users.add(user); + users.add(null); + + List userDTOS = userMapper.usersToUserDTOs(users); + + assertThat(userDTOS).isNotEmpty(); + assertThat(userDTOS).size().isEqualTo(1); + } + + @Test + public void userDTOsToUsersShouldMapOnlyNonNullUsers(){ + List usersDto = new ArrayList<>(); + usersDto.add(userDto); + usersDto.add(null); + + List users = userMapper.userDTOsToUsers(usersDto); + + assertThat(users).isNotEmpty(); + assertThat(users).size().isEqualTo(1); + } + + @Test + public void userDTOsToUsersWithAuthoritiesStringShouldMapToUsersWithAuthoritiesDomain(){ + Set authoritiesAsString = new HashSet<>(); + authoritiesAsString.add("ADMIN"); + userDto.setAuthorities(authoritiesAsString); + + List usersDto = new ArrayList<>(); + usersDto.add(userDto); + + List users = userMapper.userDTOsToUsers(usersDto); + + assertThat(users).isNotEmpty(); + assertThat(users).size().isEqualTo(1); + assertThat(users.get(0).getAuthorities()).isNotNull(); + assertThat(users.get(0).getAuthorities()).isNotEmpty(); + assertThat(users.get(0).getAuthorities().iterator().next().getName()).isEqualTo("ADMIN"); + } + + @Test + public void userDTOsToUsersMapWithNullAuthoritiesStringShouldReturnUserWithEmptyAuthorities(){ + userDto.setAuthorities(null); + + List usersDto = new ArrayList<>(); + usersDto.add(userDto); + + List users = userMapper.userDTOsToUsers(usersDto); + + assertThat(users).isNotEmpty(); + assertThat(users).size().isEqualTo(1); + assertThat(users.get(0).getAuthorities()).isNotNull(); + assertThat(users.get(0).getAuthorities()).isEmpty(); + } + + @Test + public void userDTOToUserMapWithAuthoritiesStringShouldReturnUserWithAuthorities(){ + Set authoritiesAsString = new HashSet<>(); + authoritiesAsString.add("ADMIN"); + userDto.setAuthorities(authoritiesAsString); + + userDto.setAuthorities(authoritiesAsString); + + User user = userMapper.userDTOToUser(userDto); + + assertThat(user).isNotNull(); + assertThat(user.getAuthorities()).isNotNull(); + assertThat(user.getAuthorities()).isNotEmpty(); + assertThat(user.getAuthorities().iterator().next().getName()).isEqualTo("ADMIN"); + } + + @Test + public void userDTOToUserMapWithNullAuthoritiesStringShouldReturnUserWithEmptyAuthorities(){ + userDto.setAuthorities(null); + + User user = userMapper.userDTOToUser(userDto); + + assertThat(user).isNotNull(); + assertThat(user.getAuthorities()).isNotNull(); + assertThat(user.getAuthorities()).isEmpty(); + } + + @Test + public void userDTOToUserMapWithNullUserShouldReturnNull(){ + assertThat(userMapper.userDTOToUser(null)).isNull(); + } + + @Test + public void testUserFromId() { + assertThat(userMapper.userFromId(DEFAULT_ID).getId()).isEqualTo(DEFAULT_ID); + assertThat(userMapper.userFromId(null)).isNull(); + } +} diff --git a/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/web/rest/AccountResourceIT.java b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/web/rest/AccountResourceIT.java new file mode 100644 index 000000000000..4655526bb04c --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/web/rest/AccountResourceIT.java @@ -0,0 +1,815 @@ +package com.baeldung.jhipster6.web.rest; + +import com.baeldung.jhipster6.BookstoreApp; +import com.baeldung.jhipster6.config.Constants; +import com.baeldung.jhipster6.domain.Authority; +import com.baeldung.jhipster6.domain.User; +import com.baeldung.jhipster6.repository.AuthorityRepository; +import com.baeldung.jhipster6.repository.UserRepository; +import com.baeldung.jhipster6.security.AuthoritiesConstants; +import com.baeldung.jhipster6.service.MailService; +import com.baeldung.jhipster6.service.UserService; +import com.baeldung.jhipster6.service.dto.PasswordChangeDTO; +import com.baeldung.jhipster6.service.dto.UserDTO; +import com.baeldung.jhipster6.web.rest.errors.ExceptionTranslator; +import com.baeldung.jhipster6.web.rest.vm.KeyAndPasswordVM; +import com.baeldung.jhipster6.web.rest.vm.ManagedUserVM; + +import org.apache.commons.lang3.RandomStringUtils; + +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.http.MediaType; +import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.security.test.context.support.WithMockUser; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.transaction.annotation.Transactional; + +import java.time.Instant; +import java.util.*; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.doNothing; +import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +/** + * Integration tests for the {@link AccountResource} REST controller. + */ +@SpringBootTest(classes = BookstoreApp.class) +public class AccountResourceIT { + + @Autowired + private UserRepository userRepository; + + @Autowired + private AuthorityRepository authorityRepository; + + @Autowired + private UserService userService; + + @Autowired + private PasswordEncoder passwordEncoder; + + @Autowired + private HttpMessageConverter[] httpMessageConverters; + + @Autowired + private ExceptionTranslator exceptionTranslator; + + @Mock + private UserService mockUserService; + + @Mock + private MailService mockMailService; + + private MockMvc restMvc; + + private MockMvc restUserMockMvc; + + @BeforeEach + public void setup() { + MockitoAnnotations.initMocks(this); + doNothing().when(mockMailService).sendActivationEmail(any()); + AccountResource accountResource = + new AccountResource(userRepository, userService, mockMailService); + + AccountResource accountUserMockResource = + new AccountResource(userRepository, mockUserService, mockMailService); + this.restMvc = MockMvcBuilders.standaloneSetup(accountResource) + .setMessageConverters(httpMessageConverters) + .setControllerAdvice(exceptionTranslator) + .build(); + this.restUserMockMvc = MockMvcBuilders.standaloneSetup(accountUserMockResource) + .setControllerAdvice(exceptionTranslator) + .build(); + } + + @Test + public void testNonAuthenticatedUser() throws Exception { + restUserMockMvc.perform(get("/api/authenticate") + .accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andExpect(content().string("")); + } + + @Test + public void testAuthenticatedUser() throws Exception { + restUserMockMvc.perform(get("/api/authenticate") + .with(request -> { + request.setRemoteUser("test"); + return request; + }) + .accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andExpect(content().string("test")); + } + + @Test + public void testGetExistingAccount() throws Exception { + Set authorities = new HashSet<>(); + Authority authority = new Authority(); + authority.setName(AuthoritiesConstants.ADMIN); + authorities.add(authority); + + User user = new User(); + user.setLogin("test"); + user.setFirstName("john"); + user.setLastName("doe"); + user.setEmail("john.doe@jhipster.com"); + user.setImageUrl("http://placehold.it/50x50"); + user.setLangKey("en"); + user.setAuthorities(authorities); + when(mockUserService.getUserWithAuthorities()).thenReturn(Optional.of(user)); + + restUserMockMvc.perform(get("/api/account") + .accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) + .andExpect(jsonPath("$.login").value("test")) + .andExpect(jsonPath("$.firstName").value("john")) + .andExpect(jsonPath("$.lastName").value("doe")) + .andExpect(jsonPath("$.email").value("john.doe@jhipster.com")) + .andExpect(jsonPath("$.imageUrl").value("http://placehold.it/50x50")) + .andExpect(jsonPath("$.langKey").value("en")) + .andExpect(jsonPath("$.authorities").value(AuthoritiesConstants.ADMIN)); + } + + @Test + public void testGetUnknownAccount() throws Exception { + when(mockUserService.getUserWithAuthorities()).thenReturn(Optional.empty()); + + restUserMockMvc.perform(get("/api/account") + .accept(MediaType.APPLICATION_PROBLEM_JSON)) + .andExpect(status().isInternalServerError()); + } + + @Test + @Transactional + public void testRegisterValid() throws Exception { + ManagedUserVM validUser = new ManagedUserVM(); + validUser.setLogin("test-register-valid"); + validUser.setPassword("password"); + validUser.setFirstName("Alice"); + validUser.setLastName("Test"); + validUser.setEmail("test-register-valid@example.com"); + validUser.setImageUrl("http://placehold.it/50x50"); + validUser.setLangKey(Constants.DEFAULT_LANGUAGE); + validUser.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); + assertThat(userRepository.findOneByLogin("test-register-valid").isPresent()).isFalse(); + + restMvc.perform( + post("/api/register") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(validUser))) + .andExpect(status().isCreated()); + + assertThat(userRepository.findOneByLogin("test-register-valid").isPresent()).isTrue(); + } + + @Test + @Transactional + public void testRegisterInvalidLogin() throws Exception { + ManagedUserVM invalidUser = new ManagedUserVM(); + invalidUser.setLogin("funky-log!n");// <-- invalid + invalidUser.setPassword("password"); + invalidUser.setFirstName("Funky"); + invalidUser.setLastName("One"); + invalidUser.setEmail("funky@example.com"); + invalidUser.setActivated(true); + invalidUser.setImageUrl("http://placehold.it/50x50"); + invalidUser.setLangKey(Constants.DEFAULT_LANGUAGE); + invalidUser.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); + + restUserMockMvc.perform( + post("/api/register") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(invalidUser))) + .andExpect(status().isBadRequest()); + + Optional user = userRepository.findOneByEmailIgnoreCase("funky@example.com"); + assertThat(user.isPresent()).isFalse(); + } + + @Test + @Transactional + public void testRegisterInvalidEmail() throws Exception { + ManagedUserVM invalidUser = new ManagedUserVM(); + invalidUser.setLogin("bob"); + invalidUser.setPassword("password"); + invalidUser.setFirstName("Bob"); + invalidUser.setLastName("Green"); + invalidUser.setEmail("invalid");// <-- invalid + invalidUser.setActivated(true); + invalidUser.setImageUrl("http://placehold.it/50x50"); + invalidUser.setLangKey(Constants.DEFAULT_LANGUAGE); + invalidUser.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); + + restUserMockMvc.perform( + post("/api/register") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(invalidUser))) + .andExpect(status().isBadRequest()); + + Optional user = userRepository.findOneByLogin("bob"); + assertThat(user.isPresent()).isFalse(); + } + + @Test + @Transactional + public void testRegisterInvalidPassword() throws Exception { + ManagedUserVM invalidUser = new ManagedUserVM(); + invalidUser.setLogin("bob"); + invalidUser.setPassword("123");// password with only 3 digits + invalidUser.setFirstName("Bob"); + invalidUser.setLastName("Green"); + invalidUser.setEmail("bob@example.com"); + invalidUser.setActivated(true); + invalidUser.setImageUrl("http://placehold.it/50x50"); + invalidUser.setLangKey(Constants.DEFAULT_LANGUAGE); + invalidUser.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); + + restUserMockMvc.perform( + post("/api/register") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(invalidUser))) + .andExpect(status().isBadRequest()); + + Optional user = userRepository.findOneByLogin("bob"); + assertThat(user.isPresent()).isFalse(); + } + + @Test + @Transactional + public void testRegisterNullPassword() throws Exception { + ManagedUserVM invalidUser = new ManagedUserVM(); + invalidUser.setLogin("bob"); + invalidUser.setPassword(null);// invalid null password + invalidUser.setFirstName("Bob"); + invalidUser.setLastName("Green"); + invalidUser.setEmail("bob@example.com"); + invalidUser.setActivated(true); + invalidUser.setImageUrl("http://placehold.it/50x50"); + invalidUser.setLangKey(Constants.DEFAULT_LANGUAGE); + invalidUser.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); + + restUserMockMvc.perform( + post("/api/register") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(invalidUser))) + .andExpect(status().isBadRequest()); + + Optional user = userRepository.findOneByLogin("bob"); + assertThat(user.isPresent()).isFalse(); + } + + @Test + @Transactional + public void testRegisterDuplicateLogin() throws Exception { + // First registration + ManagedUserVM firstUser = new ManagedUserVM(); + firstUser.setLogin("alice"); + firstUser.setPassword("password"); + firstUser.setFirstName("Alice"); + firstUser.setLastName("Something"); + firstUser.setEmail("alice@example.com"); + firstUser.setImageUrl("http://placehold.it/50x50"); + firstUser.setLangKey(Constants.DEFAULT_LANGUAGE); + firstUser.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); + + // Duplicate login, different email + ManagedUserVM secondUser = new ManagedUserVM(); + secondUser.setLogin(firstUser.getLogin()); + secondUser.setPassword(firstUser.getPassword()); + secondUser.setFirstName(firstUser.getFirstName()); + secondUser.setLastName(firstUser.getLastName()); + secondUser.setEmail("alice2@example.com"); + secondUser.setImageUrl(firstUser.getImageUrl()); + secondUser.setLangKey(firstUser.getLangKey()); + secondUser.setCreatedBy(firstUser.getCreatedBy()); + secondUser.setCreatedDate(firstUser.getCreatedDate()); + secondUser.setLastModifiedBy(firstUser.getLastModifiedBy()); + secondUser.setLastModifiedDate(firstUser.getLastModifiedDate()); + secondUser.setAuthorities(new HashSet<>(firstUser.getAuthorities())); + + // First user + restMvc.perform( + post("/api/register") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(firstUser))) + .andExpect(status().isCreated()); + + // Second (non activated) user + restMvc.perform( + post("/api/register") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(secondUser))) + .andExpect(status().isCreated()); + + Optional testUser = userRepository.findOneByEmailIgnoreCase("alice2@example.com"); + assertThat(testUser.isPresent()).isTrue(); + testUser.get().setActivated(true); + userRepository.save(testUser.get()); + + // Second (already activated) user + restMvc.perform( + post("/api/register") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(secondUser))) + .andExpect(status().is4xxClientError()); + } + + @Test + @Transactional + public void testRegisterDuplicateEmail() throws Exception { + // First user + ManagedUserVM firstUser = new ManagedUserVM(); + firstUser.setLogin("test-register-duplicate-email"); + firstUser.setPassword("password"); + firstUser.setFirstName("Alice"); + firstUser.setLastName("Test"); + firstUser.setEmail("test-register-duplicate-email@example.com"); + firstUser.setImageUrl("http://placehold.it/50x50"); + firstUser.setLangKey(Constants.DEFAULT_LANGUAGE); + firstUser.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); + + // Register first user + restMvc.perform( + post("/api/register") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(firstUser))) + .andExpect(status().isCreated()); + + Optional testUser1 = userRepository.findOneByLogin("test-register-duplicate-email"); + assertThat(testUser1.isPresent()).isTrue(); + + // Duplicate email, different login + ManagedUserVM secondUser = new ManagedUserVM(); + secondUser.setLogin("test-register-duplicate-email-2"); + secondUser.setPassword(firstUser.getPassword()); + secondUser.setFirstName(firstUser.getFirstName()); + secondUser.setLastName(firstUser.getLastName()); + secondUser.setEmail(firstUser.getEmail()); + secondUser.setImageUrl(firstUser.getImageUrl()); + secondUser.setLangKey(firstUser.getLangKey()); + secondUser.setAuthorities(new HashSet<>(firstUser.getAuthorities())); + + // Register second (non activated) user + restMvc.perform( + post("/api/register") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(secondUser))) + .andExpect(status().isCreated()); + + Optional testUser2 = userRepository.findOneByLogin("test-register-duplicate-email"); + assertThat(testUser2.isPresent()).isFalse(); + + Optional testUser3 = userRepository.findOneByLogin("test-register-duplicate-email-2"); + assertThat(testUser3.isPresent()).isTrue(); + + // Duplicate email - with uppercase email address + ManagedUserVM userWithUpperCaseEmail = new ManagedUserVM(); + userWithUpperCaseEmail.setId(firstUser.getId()); + userWithUpperCaseEmail.setLogin("test-register-duplicate-email-3"); + userWithUpperCaseEmail.setPassword(firstUser.getPassword()); + userWithUpperCaseEmail.setFirstName(firstUser.getFirstName()); + userWithUpperCaseEmail.setLastName(firstUser.getLastName()); + userWithUpperCaseEmail.setEmail("TEST-register-duplicate-email@example.com"); + userWithUpperCaseEmail.setImageUrl(firstUser.getImageUrl()); + userWithUpperCaseEmail.setLangKey(firstUser.getLangKey()); + userWithUpperCaseEmail.setAuthorities(new HashSet<>(firstUser.getAuthorities())); + + // Register third (not activated) user + restMvc.perform( + post("/api/register") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(userWithUpperCaseEmail))) + .andExpect(status().isCreated()); + + Optional testUser4 = userRepository.findOneByLogin("test-register-duplicate-email-3"); + assertThat(testUser4.isPresent()).isTrue(); + assertThat(testUser4.get().getEmail()).isEqualTo("test-register-duplicate-email@example.com"); + + testUser4.get().setActivated(true); + userService.updateUser((new UserDTO(testUser4.get()))); + + // Register 4th (already activated) user + restMvc.perform( + post("/api/register") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(secondUser))) + .andExpect(status().is4xxClientError()); + } + + @Test + @Transactional + public void testRegisterAdminIsIgnored() throws Exception { + ManagedUserVM validUser = new ManagedUserVM(); + validUser.setLogin("badguy"); + validUser.setPassword("password"); + validUser.setFirstName("Bad"); + validUser.setLastName("Guy"); + validUser.setEmail("badguy@example.com"); + validUser.setActivated(true); + validUser.setImageUrl("http://placehold.it/50x50"); + validUser.setLangKey(Constants.DEFAULT_LANGUAGE); + validUser.setAuthorities(Collections.singleton(AuthoritiesConstants.ADMIN)); + + restMvc.perform( + post("/api/register") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(validUser))) + .andExpect(status().isCreated()); + + Optional userDup = userRepository.findOneByLogin("badguy"); + assertThat(userDup.isPresent()).isTrue(); + assertThat(userDup.get().getAuthorities()).hasSize(1) + .containsExactly(authorityRepository.findById(AuthoritiesConstants.USER).get()); + } + + @Test + @Transactional + public void testActivateAccount() throws Exception { + final String activationKey = "some activation key"; + User user = new User(); + user.setLogin("activate-account"); + user.setEmail("activate-account@example.com"); + user.setPassword(RandomStringUtils.random(60)); + user.setActivated(false); + user.setActivationKey(activationKey); + + userRepository.saveAndFlush(user); + + restMvc.perform(get("/api/activate?key={activationKey}", activationKey)) + .andExpect(status().isOk()); + + user = userRepository.findOneByLogin(user.getLogin()).orElse(null); + assertThat(user.getActivated()).isTrue(); + } + + @Test + @Transactional + public void testActivateAccountWithWrongKey() throws Exception { + restMvc.perform(get("/api/activate?key=wrongActivationKey")) + .andExpect(status().isInternalServerError()); + } + + @Test + @Transactional + @WithMockUser("save-account") + public void testSaveAccount() throws Exception { + User user = new User(); + user.setLogin("save-account"); + user.setEmail("save-account@example.com"); + user.setPassword(RandomStringUtils.random(60)); + user.setActivated(true); + + userRepository.saveAndFlush(user); + + UserDTO userDTO = new UserDTO(); + userDTO.setLogin("not-used"); + userDTO.setFirstName("firstname"); + userDTO.setLastName("lastname"); + userDTO.setEmail("save-account@example.com"); + userDTO.setActivated(false); + userDTO.setImageUrl("http://placehold.it/50x50"); + userDTO.setLangKey(Constants.DEFAULT_LANGUAGE); + userDTO.setAuthorities(Collections.singleton(AuthoritiesConstants.ADMIN)); + + restMvc.perform( + post("/api/account") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(userDTO))) + .andExpect(status().isOk()); + + User updatedUser = userRepository.findOneByLogin(user.getLogin()).orElse(null); + assertThat(updatedUser.getFirstName()).isEqualTo(userDTO.getFirstName()); + assertThat(updatedUser.getLastName()).isEqualTo(userDTO.getLastName()); + assertThat(updatedUser.getEmail()).isEqualTo(userDTO.getEmail()); + assertThat(updatedUser.getLangKey()).isEqualTo(userDTO.getLangKey()); + assertThat(updatedUser.getPassword()).isEqualTo(user.getPassword()); + assertThat(updatedUser.getImageUrl()).isEqualTo(userDTO.getImageUrl()); + assertThat(updatedUser.getActivated()).isEqualTo(true); + assertThat(updatedUser.getAuthorities()).isEmpty(); + } + + @Test + @Transactional + @WithMockUser("save-invalid-email") + public void testSaveInvalidEmail() throws Exception { + User user = new User(); + user.setLogin("save-invalid-email"); + user.setEmail("save-invalid-email@example.com"); + user.setPassword(RandomStringUtils.random(60)); + user.setActivated(true); + + userRepository.saveAndFlush(user); + + UserDTO userDTO = new UserDTO(); + userDTO.setLogin("not-used"); + userDTO.setFirstName("firstname"); + userDTO.setLastName("lastname"); + userDTO.setEmail("invalid email"); + userDTO.setActivated(false); + userDTO.setImageUrl("http://placehold.it/50x50"); + userDTO.setLangKey(Constants.DEFAULT_LANGUAGE); + userDTO.setAuthorities(Collections.singleton(AuthoritiesConstants.ADMIN)); + + restMvc.perform( + post("/api/account") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(userDTO))) + .andExpect(status().isBadRequest()); + + Assertions.assertThat(userRepository.findOneByEmailIgnoreCase("invalid email")).isNotPresent(); + } + + @Test + @Transactional + @WithMockUser("save-existing-email") + public void testSaveExistingEmail() throws Exception { + User user = new User(); + user.setLogin("save-existing-email"); + user.setEmail("save-existing-email@example.com"); + user.setPassword(RandomStringUtils.random(60)); + user.setActivated(true); + + userRepository.saveAndFlush(user); + + User anotherUser = new User(); + anotherUser.setLogin("save-existing-email2"); + anotherUser.setEmail("save-existing-email2@example.com"); + anotherUser.setPassword(RandomStringUtils.random(60)); + anotherUser.setActivated(true); + + userRepository.saveAndFlush(anotherUser); + + UserDTO userDTO = new UserDTO(); + userDTO.setLogin("not-used"); + userDTO.setFirstName("firstname"); + userDTO.setLastName("lastname"); + userDTO.setEmail("save-existing-email2@example.com"); + userDTO.setActivated(false); + userDTO.setImageUrl("http://placehold.it/50x50"); + userDTO.setLangKey(Constants.DEFAULT_LANGUAGE); + userDTO.setAuthorities(Collections.singleton(AuthoritiesConstants.ADMIN)); + + restMvc.perform( + post("/api/account") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(userDTO))) + .andExpect(status().isBadRequest()); + + User updatedUser = userRepository.findOneByLogin("save-existing-email").orElse(null); + assertThat(updatedUser.getEmail()).isEqualTo("save-existing-email@example.com"); + } + + @Test + @Transactional + @WithMockUser("save-existing-email-and-login") + public void testSaveExistingEmailAndLogin() throws Exception { + User user = new User(); + user.setLogin("save-existing-email-and-login"); + user.setEmail("save-existing-email-and-login@example.com"); + user.setPassword(RandomStringUtils.random(60)); + user.setActivated(true); + + userRepository.saveAndFlush(user); + + UserDTO userDTO = new UserDTO(); + userDTO.setLogin("not-used"); + userDTO.setFirstName("firstname"); + userDTO.setLastName("lastname"); + userDTO.setEmail("save-existing-email-and-login@example.com"); + userDTO.setActivated(false); + userDTO.setImageUrl("http://placehold.it/50x50"); + userDTO.setLangKey(Constants.DEFAULT_LANGUAGE); + userDTO.setAuthorities(Collections.singleton(AuthoritiesConstants.ADMIN)); + + restMvc.perform( + post("/api/account") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(userDTO))) + .andExpect(status().isOk()); + + User updatedUser = userRepository.findOneByLogin("save-existing-email-and-login").orElse(null); + assertThat(updatedUser.getEmail()).isEqualTo("save-existing-email-and-login@example.com"); + } + + @Test + @Transactional + @WithMockUser("change-password-wrong-existing-password") + public void testChangePasswordWrongExistingPassword() throws Exception { + User user = new User(); + String currentPassword = RandomStringUtils.random(60); + user.setPassword(passwordEncoder.encode(currentPassword)); + user.setLogin("change-password-wrong-existing-password"); + user.setEmail("change-password-wrong-existing-password@example.com"); + userRepository.saveAndFlush(user); + + restMvc.perform(post("/api/account/change-password") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(new PasswordChangeDTO("1"+currentPassword, "new password")))) + .andExpect(status().isBadRequest()); + + User updatedUser = userRepository.findOneByLogin("change-password-wrong-existing-password").orElse(null); + assertThat(passwordEncoder.matches("new password", updatedUser.getPassword())).isFalse(); + assertThat(passwordEncoder.matches(currentPassword, updatedUser.getPassword())).isTrue(); + } + + @Test + @Transactional + @WithMockUser("change-password") + public void testChangePassword() throws Exception { + User user = new User(); + String currentPassword = RandomStringUtils.random(60); + user.setPassword(passwordEncoder.encode(currentPassword)); + user.setLogin("change-password"); + user.setEmail("change-password@example.com"); + userRepository.saveAndFlush(user); + + restMvc.perform(post("/api/account/change-password") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(new PasswordChangeDTO(currentPassword, "new password")))) + .andExpect(status().isOk()); + + User updatedUser = userRepository.findOneByLogin("change-password").orElse(null); + assertThat(passwordEncoder.matches("new password", updatedUser.getPassword())).isTrue(); + } + + @Test + @Transactional + @WithMockUser("change-password-too-small") + public void testChangePasswordTooSmall() throws Exception { + User user = new User(); + String currentPassword = RandomStringUtils.random(60); + user.setPassword(passwordEncoder.encode(currentPassword)); + user.setLogin("change-password-too-small"); + user.setEmail("change-password-too-small@example.com"); + userRepository.saveAndFlush(user); + + String newPassword = RandomStringUtils.random(ManagedUserVM.PASSWORD_MIN_LENGTH - 1); + + restMvc.perform(post("/api/account/change-password") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(new PasswordChangeDTO(currentPassword, newPassword)))) + .andExpect(status().isBadRequest()); + + User updatedUser = userRepository.findOneByLogin("change-password-too-small").orElse(null); + assertThat(updatedUser.getPassword()).isEqualTo(user.getPassword()); + } + + @Test + @Transactional + @WithMockUser("change-password-too-long") + public void testChangePasswordTooLong() throws Exception { + User user = new User(); + String currentPassword = RandomStringUtils.random(60); + user.setPassword(passwordEncoder.encode(currentPassword)); + user.setLogin("change-password-too-long"); + user.setEmail("change-password-too-long@example.com"); + userRepository.saveAndFlush(user); + + String newPassword = RandomStringUtils.random(ManagedUserVM.PASSWORD_MAX_LENGTH + 1); + + restMvc.perform(post("/api/account/change-password") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(new PasswordChangeDTO(currentPassword, newPassword)))) + .andExpect(status().isBadRequest()); + + User updatedUser = userRepository.findOneByLogin("change-password-too-long").orElse(null); + assertThat(updatedUser.getPassword()).isEqualTo(user.getPassword()); + } + + @Test + @Transactional + @WithMockUser("change-password-empty") + public void testChangePasswordEmpty() throws Exception { + User user = new User(); + String currentPassword = RandomStringUtils.random(60); + user.setPassword(passwordEncoder.encode(currentPassword)); + user.setLogin("change-password-empty"); + user.setEmail("change-password-empty@example.com"); + userRepository.saveAndFlush(user); + + restMvc.perform(post("/api/account/change-password") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(new PasswordChangeDTO(currentPassword, "")))) + .andExpect(status().isBadRequest()); + + User updatedUser = userRepository.findOneByLogin("change-password-empty").orElse(null); + assertThat(updatedUser.getPassword()).isEqualTo(user.getPassword()); + } + + @Test + @Transactional + public void testRequestPasswordReset() throws Exception { + User user = new User(); + user.setPassword(RandomStringUtils.random(60)); + user.setActivated(true); + user.setLogin("password-reset"); + user.setEmail("password-reset@example.com"); + userRepository.saveAndFlush(user); + + restMvc.perform(post("/api/account/reset-password/init") + .content("password-reset@example.com")) + .andExpect(status().isOk()); + } + + @Test + @Transactional + public void testRequestPasswordResetUpperCaseEmail() throws Exception { + User user = new User(); + user.setPassword(RandomStringUtils.random(60)); + user.setActivated(true); + user.setLogin("password-reset"); + user.setEmail("password-reset@example.com"); + userRepository.saveAndFlush(user); + + restMvc.perform(post("/api/account/reset-password/init") + .content("password-reset@EXAMPLE.COM")) + .andExpect(status().isOk()); + } + + @Test + public void testRequestPasswordResetWrongEmail() throws Exception { + restMvc.perform( + post("/api/account/reset-password/init") + .content("password-reset-wrong-email@example.com")) + .andExpect(status().isBadRequest()); + } + + @Test + @Transactional + public void testFinishPasswordReset() throws Exception { + User user = new User(); + user.setPassword(RandomStringUtils.random(60)); + user.setLogin("finish-password-reset"); + user.setEmail("finish-password-reset@example.com"); + user.setResetDate(Instant.now().plusSeconds(60)); + user.setResetKey("reset key"); + userRepository.saveAndFlush(user); + + KeyAndPasswordVM keyAndPassword = new KeyAndPasswordVM(); + keyAndPassword.setKey(user.getResetKey()); + keyAndPassword.setNewPassword("new password"); + + restMvc.perform( + post("/api/account/reset-password/finish") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(keyAndPassword))) + .andExpect(status().isOk()); + + User updatedUser = userRepository.findOneByLogin(user.getLogin()).orElse(null); + assertThat(passwordEncoder.matches(keyAndPassword.getNewPassword(), updatedUser.getPassword())).isTrue(); + } + + @Test + @Transactional + public void testFinishPasswordResetTooSmall() throws Exception { + User user = new User(); + user.setPassword(RandomStringUtils.random(60)); + user.setLogin("finish-password-reset-too-small"); + user.setEmail("finish-password-reset-too-small@example.com"); + user.setResetDate(Instant.now().plusSeconds(60)); + user.setResetKey("reset key too small"); + userRepository.saveAndFlush(user); + + KeyAndPasswordVM keyAndPassword = new KeyAndPasswordVM(); + keyAndPassword.setKey(user.getResetKey()); + keyAndPassword.setNewPassword("foo"); + + restMvc.perform( + post("/api/account/reset-password/finish") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(keyAndPassword))) + .andExpect(status().isBadRequest()); + + User updatedUser = userRepository.findOneByLogin(user.getLogin()).orElse(null); + assertThat(passwordEncoder.matches(keyAndPassword.getNewPassword(), updatedUser.getPassword())).isFalse(); + } + + + @Test + @Transactional + public void testFinishPasswordResetWrongKey() throws Exception { + KeyAndPasswordVM keyAndPassword = new KeyAndPasswordVM(); + keyAndPassword.setKey("wrong reset key"); + keyAndPassword.setNewPassword("new password"); + + restMvc.perform( + post("/api/account/reset-password/finish") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(keyAndPassword))) + .andExpect(status().isInternalServerError()); + } +} diff --git a/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/web/rest/AccountResourceIntegrationTest.java b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/web/rest/AccountResourceIntegrationTest.java new file mode 100644 index 000000000000..adc7deec18bd --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/web/rest/AccountResourceIntegrationTest.java @@ -0,0 +1,820 @@ +package com.baeldung.jhipster6.web.rest; + +import com.baeldung.jhipster6.BookstoreApp; +import com.baeldung.jhipster6.config.Constants; +import com.baeldung.jhipster6.domain.Authority; +import com.baeldung.jhipster6.domain.User; +import com.baeldung.jhipster6.repository.AuthorityRepository; +import com.baeldung.jhipster6.repository.UserRepository; +import com.baeldung.jhipster6.security.AuthoritiesConstants; +import com.baeldung.jhipster6.service.MailService; +import com.baeldung.jhipster6.service.UserService; +import com.baeldung.jhipster6.service.dto.PasswordChangeDTO; +import com.baeldung.jhipster6.service.dto.UserDTO; +import com.baeldung.jhipster6.web.rest.errors.ExceptionTranslator; +import com.baeldung.jhipster6.web.rest.vm.KeyAndPasswordVM; +import com.baeldung.jhipster6.web.rest.vm.ManagedUserVM; + +import org.apache.commons.lang3.RandomStringUtils; + +import org.assertj.core.api.Assertions; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.http.MediaType; +import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.security.test.context.support.WithMockUser; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.transaction.annotation.Transactional; + +import java.time.Instant; +import java.util.*; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.doNothing; +import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +/** + * Test class for the AccountResource REST controller. + * + * @see AccountResource + */ +@RunWith(SpringRunner.class) +@SpringBootTest(classes = BookstoreApp.class) +public class AccountResourceIntegrationTest { + + @Autowired + private UserRepository userRepository; + + @Autowired + private AuthorityRepository authorityRepository; + + @Autowired + private UserService userService; + + @Autowired + private PasswordEncoder passwordEncoder; + + @Autowired + private HttpMessageConverter[] httpMessageConverters; + + @Autowired + private ExceptionTranslator exceptionTranslator; + + @Mock + private UserService mockUserService; + + @Mock + private MailService mockMailService; + + private MockMvc restMvc; + + private MockMvc restUserMockMvc; + + @Before + public void setup() { + MockitoAnnotations.initMocks(this); + doNothing().when(mockMailService).sendActivationEmail(any()); + AccountResource accountResource = + new AccountResource(userRepository, userService, mockMailService); + + AccountResource accountUserMockResource = + new AccountResource(userRepository, mockUserService, mockMailService); + this.restMvc = MockMvcBuilders.standaloneSetup(accountResource) + .setMessageConverters(httpMessageConverters) + .setControllerAdvice(exceptionTranslator) + .build(); + this.restUserMockMvc = MockMvcBuilders.standaloneSetup(accountUserMockResource) + .setControllerAdvice(exceptionTranslator) + .build(); + } + + @Test + public void testNonAuthenticatedUser() throws Exception { + restUserMockMvc.perform(get("/api/authenticate") + .accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andExpect(content().string("")); + } + + @Test + public void testAuthenticatedUser() throws Exception { + restUserMockMvc.perform(get("/api/authenticate") + .with(request -> { + request.setRemoteUser("test"); + return request; + }) + .accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andExpect(content().string("test")); + } + + @Test + public void testGetExistingAccount() throws Exception { + Set authorities = new HashSet<>(); + Authority authority = new Authority(); + authority.setName(AuthoritiesConstants.ADMIN); + authorities.add(authority); + + User user = new User(); + user.setLogin("test"); + user.setFirstName("john"); + user.setLastName("doe"); + user.setEmail("john.doe@jhipster.com"); + user.setImageUrl("http://placehold.it/50x50"); + user.setLangKey("en"); + user.setAuthorities(authorities); + when(mockUserService.getUserWithAuthorities()).thenReturn(Optional.of(user)); + + restUserMockMvc.perform(get("/api/account") + .accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) + .andExpect(jsonPath("$.login").value("test")) + .andExpect(jsonPath("$.firstName").value("john")) + .andExpect(jsonPath("$.lastName").value("doe")) + .andExpect(jsonPath("$.email").value("john.doe@jhipster.com")) + .andExpect(jsonPath("$.imageUrl").value("http://placehold.it/50x50")) + .andExpect(jsonPath("$.langKey").value("en")) + .andExpect(jsonPath("$.authorities").value(AuthoritiesConstants.ADMIN)); + } + + @Test + public void testGetUnknownAccount() throws Exception { + when(mockUserService.getUserWithAuthorities()).thenReturn(Optional.empty()); + + restUserMockMvc.perform(get("/api/account") + .accept(MediaType.APPLICATION_PROBLEM_JSON)) + .andExpect(status().isInternalServerError()); + } + + @Test + @Transactional + public void testRegisterValid() throws Exception { + ManagedUserVM validUser = new ManagedUserVM(); + validUser.setLogin("test-register-valid"); + validUser.setPassword("password"); + validUser.setFirstName("Alice"); + validUser.setLastName("Test"); + validUser.setEmail("test-register-valid@example.com"); + validUser.setImageUrl("http://placehold.it/50x50"); + validUser.setLangKey(Constants.DEFAULT_LANGUAGE); + validUser.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); + assertThat(userRepository.findOneByLogin("test-register-valid").isPresent()).isFalse(); + + restMvc.perform( + post("/api/register") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(validUser))) + .andExpect(status().isCreated()); + + assertThat(userRepository.findOneByLogin("test-register-valid").isPresent()).isTrue(); + } + + @Test + @Transactional + public void testRegisterInvalidLogin() throws Exception { + ManagedUserVM invalidUser = new ManagedUserVM(); + invalidUser.setLogin("funky-log!n");// <-- invalid + invalidUser.setPassword("password"); + invalidUser.setFirstName("Funky"); + invalidUser.setLastName("One"); + invalidUser.setEmail("funky@example.com"); + invalidUser.setActivated(true); + invalidUser.setImageUrl("http://placehold.it/50x50"); + invalidUser.setLangKey(Constants.DEFAULT_LANGUAGE); + invalidUser.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); + + restUserMockMvc.perform( + post("/api/register") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(invalidUser))) + .andExpect(status().isBadRequest()); + + Optional user = userRepository.findOneByEmailIgnoreCase("funky@example.com"); + assertThat(user.isPresent()).isFalse(); + } + + @Test + @Transactional + public void testRegisterInvalidEmail() throws Exception { + ManagedUserVM invalidUser = new ManagedUserVM(); + invalidUser.setLogin("bob"); + invalidUser.setPassword("password"); + invalidUser.setFirstName("Bob"); + invalidUser.setLastName("Green"); + invalidUser.setEmail("invalid");// <-- invalid + invalidUser.setActivated(true); + invalidUser.setImageUrl("http://placehold.it/50x50"); + invalidUser.setLangKey(Constants.DEFAULT_LANGUAGE); + invalidUser.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); + + restUserMockMvc.perform( + post("/api/register") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(invalidUser))) + .andExpect(status().isBadRequest()); + + Optional user = userRepository.findOneByLogin("bob"); + assertThat(user.isPresent()).isFalse(); + } + + @Test + @Transactional + public void testRegisterInvalidPassword() throws Exception { + ManagedUserVM invalidUser = new ManagedUserVM(); + invalidUser.setLogin("bob"); + invalidUser.setPassword("123");// password with only 3 digits + invalidUser.setFirstName("Bob"); + invalidUser.setLastName("Green"); + invalidUser.setEmail("bob@example.com"); + invalidUser.setActivated(true); + invalidUser.setImageUrl("http://placehold.it/50x50"); + invalidUser.setLangKey(Constants.DEFAULT_LANGUAGE); + invalidUser.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); + + restUserMockMvc.perform( + post("/api/register") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(invalidUser))) + .andExpect(status().isBadRequest()); + + Optional user = userRepository.findOneByLogin("bob"); + assertThat(user.isPresent()).isFalse(); + } + + @Test + @Transactional + public void testRegisterNullPassword() throws Exception { + ManagedUserVM invalidUser = new ManagedUserVM(); + invalidUser.setLogin("bob"); + invalidUser.setPassword(null);// invalid null password + invalidUser.setFirstName("Bob"); + invalidUser.setLastName("Green"); + invalidUser.setEmail("bob@example.com"); + invalidUser.setActivated(true); + invalidUser.setImageUrl("http://placehold.it/50x50"); + invalidUser.setLangKey(Constants.DEFAULT_LANGUAGE); + invalidUser.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); + + restUserMockMvc.perform( + post("/api/register") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(invalidUser))) + .andExpect(status().isBadRequest()); + + Optional user = userRepository.findOneByLogin("bob"); + assertThat(user.isPresent()).isFalse(); + } + + @Test + @Transactional + public void testRegisterDuplicateLogin() throws Exception { + // First registration + ManagedUserVM firstUser = new ManagedUserVM(); + firstUser.setLogin("alice"); + firstUser.setPassword("password"); + firstUser.setFirstName("Alice"); + firstUser.setLastName("Something"); + firstUser.setEmail("alice@example.com"); + firstUser.setImageUrl("http://placehold.it/50x50"); + firstUser.setLangKey(Constants.DEFAULT_LANGUAGE); + firstUser.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); + + // Duplicate login, different email + ManagedUserVM secondUser = new ManagedUserVM(); + secondUser.setLogin(firstUser.getLogin()); + secondUser.setPassword(firstUser.getPassword()); + secondUser.setFirstName(firstUser.getFirstName()); + secondUser.setLastName(firstUser.getLastName()); + secondUser.setEmail("alice2@example.com"); + secondUser.setImageUrl(firstUser.getImageUrl()); + secondUser.setLangKey(firstUser.getLangKey()); + secondUser.setCreatedBy(firstUser.getCreatedBy()); + secondUser.setCreatedDate(firstUser.getCreatedDate()); + secondUser.setLastModifiedBy(firstUser.getLastModifiedBy()); + secondUser.setLastModifiedDate(firstUser.getLastModifiedDate()); + secondUser.setAuthorities(new HashSet<>(firstUser.getAuthorities())); + + // First user + restMvc.perform( + post("/api/register") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(firstUser))) + .andExpect(status().isCreated()); + + // Second (non activated) user + restMvc.perform( + post("/api/register") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(secondUser))) + .andExpect(status().isCreated()); + + Optional testUser = userRepository.findOneByEmailIgnoreCase("alice2@example.com"); + assertThat(testUser.isPresent()).isTrue(); + testUser.get().setActivated(true); + userRepository.save(testUser.get()); + + // Second (already activated) user + restMvc.perform( + post("/api/register") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(secondUser))) + .andExpect(status().is4xxClientError()); + } + + @Test + @Transactional + public void testRegisterDuplicateEmail() throws Exception { + // First user + ManagedUserVM firstUser = new ManagedUserVM(); + firstUser.setLogin("test-register-duplicate-email"); + firstUser.setPassword("password"); + firstUser.setFirstName("Alice"); + firstUser.setLastName("Test"); + firstUser.setEmail("test-register-duplicate-email@example.com"); + firstUser.setImageUrl("http://placehold.it/50x50"); + firstUser.setLangKey(Constants.DEFAULT_LANGUAGE); + firstUser.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); + + // Register first user + restMvc.perform( + post("/api/register") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(firstUser))) + .andExpect(status().isCreated()); + + Optional testUser1 = userRepository.findOneByLogin("test-register-duplicate-email"); + assertThat(testUser1.isPresent()).isTrue(); + + // Duplicate email, different login + ManagedUserVM secondUser = new ManagedUserVM(); + secondUser.setLogin("test-register-duplicate-email-2"); + secondUser.setPassword(firstUser.getPassword()); + secondUser.setFirstName(firstUser.getFirstName()); + secondUser.setLastName(firstUser.getLastName()); + secondUser.setEmail(firstUser.getEmail()); + secondUser.setImageUrl(firstUser.getImageUrl()); + secondUser.setLangKey(firstUser.getLangKey()); + secondUser.setAuthorities(new HashSet<>(firstUser.getAuthorities())); + + // Register second (non activated) user + restMvc.perform( + post("/api/register") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(secondUser))) + .andExpect(status().isCreated()); + + Optional testUser2 = userRepository.findOneByLogin("test-register-duplicate-email"); + assertThat(testUser2.isPresent()).isFalse(); + + Optional testUser3 = userRepository.findOneByLogin("test-register-duplicate-email-2"); + assertThat(testUser3.isPresent()).isTrue(); + + // Duplicate email - with uppercase email address + ManagedUserVM userWithUpperCaseEmail = new ManagedUserVM(); + userWithUpperCaseEmail.setId(firstUser.getId()); + userWithUpperCaseEmail.setLogin("test-register-duplicate-email-3"); + userWithUpperCaseEmail.setPassword(firstUser.getPassword()); + userWithUpperCaseEmail.setFirstName(firstUser.getFirstName()); + userWithUpperCaseEmail.setLastName(firstUser.getLastName()); + userWithUpperCaseEmail.setEmail("TEST-register-duplicate-email@example.com"); + userWithUpperCaseEmail.setImageUrl(firstUser.getImageUrl()); + userWithUpperCaseEmail.setLangKey(firstUser.getLangKey()); + userWithUpperCaseEmail.setAuthorities(new HashSet<>(firstUser.getAuthorities())); + + // Register third (not activated) user + restMvc.perform( + post("/api/register") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(userWithUpperCaseEmail))) + .andExpect(status().isCreated()); + + Optional testUser4 = userRepository.findOneByLogin("test-register-duplicate-email-3"); + assertThat(testUser4.isPresent()).isTrue(); + assertThat(testUser4.get().getEmail()).isEqualTo("test-register-duplicate-email@example.com"); + + testUser4.get().setActivated(true); + userService.updateUser((new UserDTO(testUser4.get()))); + + // Register 4th (already activated) user + restMvc.perform( + post("/api/register") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(secondUser))) + .andExpect(status().is4xxClientError()); + } + + @Test + @Transactional + public void testRegisterAdminIsIgnored() throws Exception { + ManagedUserVM validUser = new ManagedUserVM(); + validUser.setLogin("badguy"); + validUser.setPassword("password"); + validUser.setFirstName("Bad"); + validUser.setLastName("Guy"); + validUser.setEmail("badguy@example.com"); + validUser.setActivated(true); + validUser.setImageUrl("http://placehold.it/50x50"); + validUser.setLangKey(Constants.DEFAULT_LANGUAGE); + validUser.setAuthorities(Collections.singleton(AuthoritiesConstants.ADMIN)); + + restMvc.perform( + post("/api/register") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(validUser))) + .andExpect(status().isCreated()); + + Optional userDup = userRepository.findOneByLogin("badguy"); + assertThat(userDup.isPresent()).isTrue(); + assertThat(userDup.get().getAuthorities()).hasSize(1) + .containsExactly(authorityRepository.findById(AuthoritiesConstants.USER).get()); + } + + @Test + @Transactional + public void testActivateAccount() throws Exception { + final String activationKey = "some activation key"; + User user = new User(); + user.setLogin("activate-account"); + user.setEmail("activate-account@example.com"); + user.setPassword(RandomStringUtils.random(60)); + user.setActivated(false); + user.setActivationKey(activationKey); + + userRepository.saveAndFlush(user); + + restMvc.perform(get("/api/activate?key={activationKey}", activationKey)) + .andExpect(status().isOk()); + + user = userRepository.findOneByLogin(user.getLogin()).orElse(null); + assertThat(user.getActivated()).isTrue(); + } + + @Test + @Transactional + public void testActivateAccountWithWrongKey() throws Exception { + restMvc.perform(get("/api/activate?key=wrongActivationKey")) + .andExpect(status().isInternalServerError()); + } + + @Test + @Transactional + @WithMockUser("save-account") + public void testSaveAccount() throws Exception { + User user = new User(); + user.setLogin("save-account"); + user.setEmail("save-account@example.com"); + user.setPassword(RandomStringUtils.random(60)); + user.setActivated(true); + + userRepository.saveAndFlush(user); + + UserDTO userDTO = new UserDTO(); + userDTO.setLogin("not-used"); + userDTO.setFirstName("firstname"); + userDTO.setLastName("lastname"); + userDTO.setEmail("save-account@example.com"); + userDTO.setActivated(false); + userDTO.setImageUrl("http://placehold.it/50x50"); + userDTO.setLangKey(Constants.DEFAULT_LANGUAGE); + userDTO.setAuthorities(Collections.singleton(AuthoritiesConstants.ADMIN)); + + restMvc.perform( + post("/api/account") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(userDTO))) + .andExpect(status().isOk()); + + User updatedUser = userRepository.findOneByLogin(user.getLogin()).orElse(null); + assertThat(updatedUser.getFirstName()).isEqualTo(userDTO.getFirstName()); + assertThat(updatedUser.getLastName()).isEqualTo(userDTO.getLastName()); + assertThat(updatedUser.getEmail()).isEqualTo(userDTO.getEmail()); + assertThat(updatedUser.getLangKey()).isEqualTo(userDTO.getLangKey()); + assertThat(updatedUser.getPassword()).isEqualTo(user.getPassword()); + assertThat(updatedUser.getImageUrl()).isEqualTo(userDTO.getImageUrl()); + assertThat(updatedUser.getActivated()).isEqualTo(true); + assertThat(updatedUser.getAuthorities()).isEmpty(); + } + + @Test + @Transactional + @WithMockUser("save-invalid-email") + public void testSaveInvalidEmail() throws Exception { + User user = new User(); + user.setLogin("save-invalid-email"); + user.setEmail("save-invalid-email@example.com"); + user.setPassword(RandomStringUtils.random(60)); + user.setActivated(true); + + userRepository.saveAndFlush(user); + + UserDTO userDTO = new UserDTO(); + userDTO.setLogin("not-used"); + userDTO.setFirstName("firstname"); + userDTO.setLastName("lastname"); + userDTO.setEmail("invalid email"); + userDTO.setActivated(false); + userDTO.setImageUrl("http://placehold.it/50x50"); + userDTO.setLangKey(Constants.DEFAULT_LANGUAGE); + userDTO.setAuthorities(Collections.singleton(AuthoritiesConstants.ADMIN)); + + restMvc.perform( + post("/api/account") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(userDTO))) + .andExpect(status().isBadRequest()); + + Assertions.assertThat(userRepository.findOneByEmailIgnoreCase("invalid email")).isNotPresent(); + } + + @Test + @Transactional + @WithMockUser("save-existing-email") + public void testSaveExistingEmail() throws Exception { + User user = new User(); + user.setLogin("save-existing-email"); + user.setEmail("save-existing-email@example.com"); + user.setPassword(RandomStringUtils.random(60)); + user.setActivated(true); + + userRepository.saveAndFlush(user); + + User anotherUser = new User(); + anotherUser.setLogin("save-existing-email2"); + anotherUser.setEmail("save-existing-email2@example.com"); + anotherUser.setPassword(RandomStringUtils.random(60)); + anotherUser.setActivated(true); + + userRepository.saveAndFlush(anotherUser); + + UserDTO userDTO = new UserDTO(); + userDTO.setLogin("not-used"); + userDTO.setFirstName("firstname"); + userDTO.setLastName("lastname"); + userDTO.setEmail("save-existing-email2@example.com"); + userDTO.setActivated(false); + userDTO.setImageUrl("http://placehold.it/50x50"); + userDTO.setLangKey(Constants.DEFAULT_LANGUAGE); + userDTO.setAuthorities(Collections.singleton(AuthoritiesConstants.ADMIN)); + + restMvc.perform( + post("/api/account") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(userDTO))) + .andExpect(status().isBadRequest()); + + User updatedUser = userRepository.findOneByLogin("save-existing-email").orElse(null); + assertThat(updatedUser.getEmail()).isEqualTo("save-existing-email@example.com"); + } + + @Test + @Transactional + @WithMockUser("save-existing-email-and-login") + public void testSaveExistingEmailAndLogin() throws Exception { + User user = new User(); + user.setLogin("save-existing-email-and-login"); + user.setEmail("save-existing-email-and-login@example.com"); + user.setPassword(RandomStringUtils.random(60)); + user.setActivated(true); + + userRepository.saveAndFlush(user); + + UserDTO userDTO = new UserDTO(); + userDTO.setLogin("not-used"); + userDTO.setFirstName("firstname"); + userDTO.setLastName("lastname"); + userDTO.setEmail("save-existing-email-and-login@example.com"); + userDTO.setActivated(false); + userDTO.setImageUrl("http://placehold.it/50x50"); + userDTO.setLangKey(Constants.DEFAULT_LANGUAGE); + userDTO.setAuthorities(Collections.singleton(AuthoritiesConstants.ADMIN)); + + restMvc.perform( + post("/api/account") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(userDTO))) + .andExpect(status().isOk()); + + User updatedUser = userRepository.findOneByLogin("save-existing-email-and-login").orElse(null); + assertThat(updatedUser.getEmail()).isEqualTo("save-existing-email-and-login@example.com"); + } + + @Test + @Transactional + @WithMockUser("change-password-wrong-existing-password") + public void testChangePasswordWrongExistingPassword() throws Exception { + User user = new User(); + String currentPassword = RandomStringUtils.random(60); + user.setPassword(passwordEncoder.encode(currentPassword)); + user.setLogin("change-password-wrong-existing-password"); + user.setEmail("change-password-wrong-existing-password@example.com"); + userRepository.saveAndFlush(user); + + restMvc.perform(post("/api/account/change-password") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(new PasswordChangeDTO("1"+currentPassword, "new password")))) + .andExpect(status().isBadRequest()); + + User updatedUser = userRepository.findOneByLogin("change-password-wrong-existing-password").orElse(null); + assertThat(passwordEncoder.matches("new password", updatedUser.getPassword())).isFalse(); + assertThat(passwordEncoder.matches(currentPassword, updatedUser.getPassword())).isTrue(); + } + + @Test + @Transactional + @WithMockUser("change-password") + public void testChangePassword() throws Exception { + User user = new User(); + String currentPassword = RandomStringUtils.random(60); + user.setPassword(passwordEncoder.encode(currentPassword)); + user.setLogin("change-password"); + user.setEmail("change-password@example.com"); + userRepository.saveAndFlush(user); + + restMvc.perform(post("/api/account/change-password") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(new PasswordChangeDTO(currentPassword, "new password")))) + .andExpect(status().isOk()); + + User updatedUser = userRepository.findOneByLogin("change-password").orElse(null); + assertThat(passwordEncoder.matches("new password", updatedUser.getPassword())).isTrue(); + } + + @Test + @Transactional + @WithMockUser("change-password-too-small") + public void testChangePasswordTooSmall() throws Exception { + User user = new User(); + String currentPassword = RandomStringUtils.random(60); + user.setPassword(passwordEncoder.encode(currentPassword)); + user.setLogin("change-password-too-small"); + user.setEmail("change-password-too-small@example.com"); + userRepository.saveAndFlush(user); + + String newPassword = RandomStringUtils.random(ManagedUserVM.PASSWORD_MIN_LENGTH - 1); + + restMvc.perform(post("/api/account/change-password") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(new PasswordChangeDTO(currentPassword, newPassword)))) + .andExpect(status().isBadRequest()); + + User updatedUser = userRepository.findOneByLogin("change-password-too-small").orElse(null); + assertThat(updatedUser.getPassword()).isEqualTo(user.getPassword()); + } + + @Test + @Transactional + @WithMockUser("change-password-too-long") + public void testChangePasswordTooLong() throws Exception { + User user = new User(); + String currentPassword = RandomStringUtils.random(60); + user.setPassword(passwordEncoder.encode(currentPassword)); + user.setLogin("change-password-too-long"); + user.setEmail("change-password-too-long@example.com"); + userRepository.saveAndFlush(user); + + String newPassword = RandomStringUtils.random(ManagedUserVM.PASSWORD_MAX_LENGTH + 1); + + restMvc.perform(post("/api/account/change-password") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(new PasswordChangeDTO(currentPassword, newPassword)))) + .andExpect(status().isBadRequest()); + + User updatedUser = userRepository.findOneByLogin("change-password-too-long").orElse(null); + assertThat(updatedUser.getPassword()).isEqualTo(user.getPassword()); + } + + @Test + @Transactional + @WithMockUser("change-password-empty") + public void testChangePasswordEmpty() throws Exception { + User user = new User(); + String currentPassword = RandomStringUtils.random(60); + user.setPassword(passwordEncoder.encode(currentPassword)); + user.setLogin("change-password-empty"); + user.setEmail("change-password-empty@example.com"); + userRepository.saveAndFlush(user); + + restMvc.perform(post("/api/account/change-password") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(new PasswordChangeDTO(currentPassword, "")))) + .andExpect(status().isBadRequest()); + + User updatedUser = userRepository.findOneByLogin("change-password-empty").orElse(null); + assertThat(updatedUser.getPassword()).isEqualTo(user.getPassword()); + } + + @Test + @Transactional + public void testRequestPasswordReset() throws Exception { + User user = new User(); + user.setPassword(RandomStringUtils.random(60)); + user.setActivated(true); + user.setLogin("password-reset"); + user.setEmail("password-reset@example.com"); + userRepository.saveAndFlush(user); + + restMvc.perform(post("/api/account/reset-password/init") + .content("password-reset@example.com")) + .andExpect(status().isOk()); + } + + @Test + @Transactional + public void testRequestPasswordResetUpperCaseEmail() throws Exception { + User user = new User(); + user.setPassword(RandomStringUtils.random(60)); + user.setActivated(true); + user.setLogin("password-reset"); + user.setEmail("password-reset@example.com"); + userRepository.saveAndFlush(user); + + restMvc.perform(post("/api/account/reset-password/init") + .content("password-reset@EXAMPLE.COM")) + .andExpect(status().isOk()); + } + + @Test + public void testRequestPasswordResetWrongEmail() throws Exception { + restMvc.perform( + post("/api/account/reset-password/init") + .content("password-reset-wrong-email@example.com")) + .andExpect(status().isBadRequest()); + } + + @Test + @Transactional + public void testFinishPasswordReset() throws Exception { + User user = new User(); + user.setPassword(RandomStringUtils.random(60)); + user.setLogin("finish-password-reset"); + user.setEmail("finish-password-reset@example.com"); + user.setResetDate(Instant.now().plusSeconds(60)); + user.setResetKey("reset key"); + userRepository.saveAndFlush(user); + + KeyAndPasswordVM keyAndPassword = new KeyAndPasswordVM(); + keyAndPassword.setKey(user.getResetKey()); + keyAndPassword.setNewPassword("new password"); + + restMvc.perform( + post("/api/account/reset-password/finish") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(keyAndPassword))) + .andExpect(status().isOk()); + + User updatedUser = userRepository.findOneByLogin(user.getLogin()).orElse(null); + assertThat(passwordEncoder.matches(keyAndPassword.getNewPassword(), updatedUser.getPassword())).isTrue(); + } + + @Test + @Transactional + public void testFinishPasswordResetTooSmall() throws Exception { + User user = new User(); + user.setPassword(RandomStringUtils.random(60)); + user.setLogin("finish-password-reset-too-small"); + user.setEmail("finish-password-reset-too-small@example.com"); + user.setResetDate(Instant.now().plusSeconds(60)); + user.setResetKey("reset key too small"); + userRepository.saveAndFlush(user); + + KeyAndPasswordVM keyAndPassword = new KeyAndPasswordVM(); + keyAndPassword.setKey(user.getResetKey()); + keyAndPassword.setNewPassword("foo"); + + restMvc.perform( + post("/api/account/reset-password/finish") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(keyAndPassword))) + .andExpect(status().isBadRequest()); + + User updatedUser = userRepository.findOneByLogin(user.getLogin()).orElse(null); + assertThat(passwordEncoder.matches(keyAndPassword.getNewPassword(), updatedUser.getPassword())).isFalse(); + } + + + @Test + @Transactional + public void testFinishPasswordResetWrongKey() throws Exception { + KeyAndPasswordVM keyAndPassword = new KeyAndPasswordVM(); + keyAndPassword.setKey("wrong reset key"); + keyAndPassword.setNewPassword("new password"); + + restMvc.perform( + post("/api/account/reset-password/finish") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(keyAndPassword))) + .andExpect(status().isInternalServerError()); + } +} diff --git a/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/web/rest/AuditResourceIT.java b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/web/rest/AuditResourceIT.java new file mode 100644 index 000000000000..d9c82f48a58e --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/web/rest/AuditResourceIT.java @@ -0,0 +1,161 @@ +package com.baeldung.jhipster6.web.rest; + +import com.baeldung.jhipster6.BookstoreApp; +import com.baeldung.jhipster6.config.audit.AuditEventConverter; +import com.baeldung.jhipster6.domain.PersistentAuditEvent; +import com.baeldung.jhipster6.repository.PersistenceAuditEventRepository; + +import com.baeldung.jhipster6.service.AuditEventService; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.MockitoAnnotations; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.data.web.PageableHandlerMethodArgumentResolver; +import org.springframework.format.support.FormattingConversionService; +import org.springframework.http.MediaType; +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.transaction.annotation.Transactional; + +import java.time.Instant; + +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; +import static org.hamcrest.Matchers.hasItem; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +/** + * Integration tests for the {@link AuditResource} REST controller. + */ +@SpringBootTest(classes = BookstoreApp.class) +@Transactional +public class AuditResourceIT { + + private static final String SAMPLE_PRINCIPAL = "SAMPLE_PRINCIPAL"; + private static final String SAMPLE_TYPE = "SAMPLE_TYPE"; + private static final Instant SAMPLE_TIMESTAMP = Instant.parse("2015-08-04T10:11:30Z"); + private static final long SECONDS_PER_DAY = 60 * 60 * 24; + + @Autowired + private PersistenceAuditEventRepository auditEventRepository; + + @Autowired + private AuditEventConverter auditEventConverter; + + @Autowired + private MappingJackson2HttpMessageConverter jacksonMessageConverter; + + @Autowired + @Qualifier("mvcConversionService") + private FormattingConversionService formattingConversionService; + + @Autowired + private PageableHandlerMethodArgumentResolver pageableArgumentResolver; + + private PersistentAuditEvent auditEvent; + + private MockMvc restAuditMockMvc; + + @BeforeEach + public void setup() { + MockitoAnnotations.initMocks(this); + AuditEventService auditEventService = + new AuditEventService(auditEventRepository, auditEventConverter); + AuditResource auditResource = new AuditResource(auditEventService); + this.restAuditMockMvc = MockMvcBuilders.standaloneSetup(auditResource) + .setCustomArgumentResolvers(pageableArgumentResolver) + .setConversionService(formattingConversionService) + .setMessageConverters(jacksonMessageConverter).build(); + } + + @BeforeEach + public void initTest() { + auditEventRepository.deleteAll(); + auditEvent = new PersistentAuditEvent(); + auditEvent.setAuditEventType(SAMPLE_TYPE); + auditEvent.setPrincipal(SAMPLE_PRINCIPAL); + auditEvent.setAuditEventDate(SAMPLE_TIMESTAMP); + } + + @Test + public void getAllAudits() throws Exception { + // Initialize the database + auditEventRepository.save(auditEvent); + + // Get all the audits + restAuditMockMvc.perform(get("/management/audits")) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) + .andExpect(jsonPath("$.[*].principal").value(hasItem(SAMPLE_PRINCIPAL))); + } + + @Test + public void getAudit() throws Exception { + // Initialize the database + auditEventRepository.save(auditEvent); + + // Get the audit + restAuditMockMvc.perform(get("/management/audits/{id}", auditEvent.getId())) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) + .andExpect(jsonPath("$.principal").value(SAMPLE_PRINCIPAL)); + } + + @Test + public void getAuditsByDate() throws Exception { + // Initialize the database + auditEventRepository.save(auditEvent); + + // Generate dates for selecting audits by date, making sure the period will contain the audit + String fromDate = SAMPLE_TIMESTAMP.minusSeconds(SECONDS_PER_DAY).toString().substring(0, 10); + String toDate = SAMPLE_TIMESTAMP.plusSeconds(SECONDS_PER_DAY).toString().substring(0, 10); + + // Get the audit + restAuditMockMvc.perform(get("/management/audits?fromDate="+fromDate+"&toDate="+toDate)) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) + .andExpect(jsonPath("$.[*].principal").value(hasItem(SAMPLE_PRINCIPAL))); + } + + @Test + public void getNonExistingAuditsByDate() throws Exception { + // Initialize the database + auditEventRepository.save(auditEvent); + + // Generate dates for selecting audits by date, making sure the period will not contain the sample audit + String fromDate = SAMPLE_TIMESTAMP.minusSeconds(2*SECONDS_PER_DAY).toString().substring(0, 10); + String toDate = SAMPLE_TIMESTAMP.minusSeconds(SECONDS_PER_DAY).toString().substring(0, 10); + + // Query audits but expect no results + restAuditMockMvc.perform(get("/management/audits?fromDate=" + fromDate + "&toDate=" + toDate)) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) + .andExpect(header().string("X-Total-Count", "0")); + } + + @Test + public void getNonExistingAudit() throws Exception { + // Get the audit + restAuditMockMvc.perform(get("/management/audits/{id}", Long.MAX_VALUE)) + .andExpect(status().isNotFound()); + } + + @Test + @Transactional + public void testPersistentAuditEventEquals() throws Exception { + TestUtil.equalsVerifier(PersistentAuditEvent.class); + PersistentAuditEvent auditEvent1 = new PersistentAuditEvent(); + auditEvent1.setId(1L); + PersistentAuditEvent auditEvent2 = new PersistentAuditEvent(); + auditEvent2.setId(auditEvent1.getId()); + assertThat(auditEvent1).isEqualTo(auditEvent2); + auditEvent2.setId(2L); + assertThat(auditEvent1).isNotEqualTo(auditEvent2); + auditEvent1.setId(null); + assertThat(auditEvent1).isNotEqualTo(auditEvent2); + } +} diff --git a/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/web/rest/AuditResourceIntegrationTest.java b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/web/rest/AuditResourceIntegrationTest.java new file mode 100644 index 000000000000..d7bb995e1c29 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/web/rest/AuditResourceIntegrationTest.java @@ -0,0 +1,163 @@ +package com.baeldung.jhipster6.web.rest; + +import com.baeldung.jhipster6.BookstoreApp; +import com.baeldung.jhipster6.config.audit.AuditEventConverter; +import com.baeldung.jhipster6.domain.PersistentAuditEvent; +import com.baeldung.jhipster6.repository.PersistenceAuditEventRepository; +import com.baeldung.jhipster6.service.AuditEventService; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.MockitoAnnotations; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.data.web.PageableHandlerMethodArgumentResolver; +import org.springframework.format.support.FormattingConversionService; +import org.springframework.http.MediaType; +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.transaction.annotation.Transactional; + +import java.time.Instant; + +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; +import static org.hamcrest.Matchers.hasItem; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +/** + * Test class for the AuditResource REST controller. + * + * @see AuditResource + */ +@RunWith(SpringRunner.class) +@SpringBootTest(classes = BookstoreApp.class) +@Transactional +public class AuditResourceIntegrationTest { + + private static final String SAMPLE_PRINCIPAL = "SAMPLE_PRINCIPAL"; + private static final String SAMPLE_TYPE = "SAMPLE_TYPE"; + private static final Instant SAMPLE_TIMESTAMP = Instant.parse("2015-08-04T10:11:30Z"); + private static final long SECONDS_PER_DAY = 60 * 60 * 24; + + @Autowired + private PersistenceAuditEventRepository auditEventRepository; + + @Autowired + private AuditEventConverter auditEventConverter; + + @Autowired + private MappingJackson2HttpMessageConverter jacksonMessageConverter; + + @Autowired + private FormattingConversionService formattingConversionService; + + @Autowired + private PageableHandlerMethodArgumentResolver pageableArgumentResolver; + + private PersistentAuditEvent auditEvent; + + private MockMvc restAuditMockMvc; + + @Before + public void setup() { + MockitoAnnotations.initMocks(this); + AuditEventService auditEventService = + new AuditEventService(auditEventRepository, auditEventConverter); + AuditResource auditResource = new AuditResource(auditEventService); + this.restAuditMockMvc = MockMvcBuilders.standaloneSetup(auditResource) + .setCustomArgumentResolvers(pageableArgumentResolver) + .setConversionService(formattingConversionService) + .setMessageConverters(jacksonMessageConverter).build(); + } + + @Before + public void initTest() { + auditEventRepository.deleteAll(); + auditEvent = new PersistentAuditEvent(); + auditEvent.setAuditEventType(SAMPLE_TYPE); + auditEvent.setPrincipal(SAMPLE_PRINCIPAL); + auditEvent.setAuditEventDate(SAMPLE_TIMESTAMP); + } + + @Test + public void getAllAudits() throws Exception { + // Initialize the database + auditEventRepository.save(auditEvent); + + // Get all the audits + restAuditMockMvc.perform(get("/management/audits")) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) + .andExpect(jsonPath("$.[*].principal").value(hasItem(SAMPLE_PRINCIPAL))); + } + + @Test + public void getAudit() throws Exception { + // Initialize the database + auditEventRepository.save(auditEvent); + + // Get the audit + restAuditMockMvc.perform(get("/management/audits/{id}", auditEvent.getId())) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) + .andExpect(jsonPath("$.principal").value(SAMPLE_PRINCIPAL)); + } + + @Test + public void getAuditsByDate() throws Exception { + // Initialize the database + auditEventRepository.save(auditEvent); + + // Generate dates for selecting audits by date, making sure the period will contain the audit + String fromDate = SAMPLE_TIMESTAMP.minusSeconds(SECONDS_PER_DAY).toString().substring(0, 10); + String toDate = SAMPLE_TIMESTAMP.plusSeconds(SECONDS_PER_DAY).toString().substring(0, 10); + + // Get the audit + restAuditMockMvc.perform(get("/management/audits?fromDate="+fromDate+"&toDate="+toDate)) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) + .andExpect(jsonPath("$.[*].principal").value(hasItem(SAMPLE_PRINCIPAL))); + } + + @Test + public void getNonExistingAuditsByDate() throws Exception { + // Initialize the database + auditEventRepository.save(auditEvent); + + // Generate dates for selecting audits by date, making sure the period will not contain the sample audit + String fromDate = SAMPLE_TIMESTAMP.minusSeconds(2*SECONDS_PER_DAY).toString().substring(0, 10); + String toDate = SAMPLE_TIMESTAMP.minusSeconds(SECONDS_PER_DAY).toString().substring(0, 10); + + // Query audits but expect no results + restAuditMockMvc.perform(get("/management/audits?fromDate=" + fromDate + "&toDate=" + toDate)) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) + .andExpect(header().string("X-Total-Count", "0")); + } + + @Test + public void getNonExistingAudit() throws Exception { + // Get the audit + restAuditMockMvc.perform(get("/management/audits/{id}", Long.MAX_VALUE)) + .andExpect(status().isNotFound()); + } + + @Test + @Transactional + public void testPersistentAuditEventEquals() throws Exception { + TestUtil.equalsVerifier(PersistentAuditEvent.class); + PersistentAuditEvent auditEvent1 = new PersistentAuditEvent(); + auditEvent1.setId(1L); + PersistentAuditEvent auditEvent2 = new PersistentAuditEvent(); + auditEvent2.setId(auditEvent1.getId()); + assertThat(auditEvent1).isEqualTo(auditEvent2); + auditEvent2.setId(2L); + assertThat(auditEvent1).isNotEqualTo(auditEvent2); + auditEvent1.setId(null); + assertThat(auditEvent1).isNotEqualTo(auditEvent2); + } +} diff --git a/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/web/rest/BookResourceIntegrationTest.java b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/web/rest/BookResourceIntegrationTest.java new file mode 100644 index 000000000000..429d937f265c --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/web/rest/BookResourceIntegrationTest.java @@ -0,0 +1,414 @@ +package com.baeldung.jhipster6.web.rest; + +import com.baeldung.jhipster6.BookstoreApp; + +import com.baeldung.jhipster6.domain.Book; +import com.baeldung.jhipster6.repository.BookRepository; +import com.baeldung.jhipster6.service.BookService; +import com.baeldung.jhipster6.service.dto.BookDTO; +import com.baeldung.jhipster6.service.mapper.BookMapper; +import com.baeldung.jhipster6.web.rest.errors.ExceptionTranslator; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.MockitoAnnotations; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.data.web.PageableHandlerMethodArgumentResolver; +import org.springframework.http.MediaType; +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.validation.Validator; + +import javax.persistence.EntityManager; +import java.time.LocalDate; +import java.time.ZoneId; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.hamcrest.Matchers.hasItem; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +/** + * Test class for the BookResource REST controller. + * + * @see BookResource + */ +@RunWith(SpringRunner.class) +@SpringBootTest(classes = BookstoreApp.class) +public class BookResourceIntegrationTest { + + private static final String DEFAULT_TITLE = "AAAAAAAAAA"; + private static final String UPDATED_TITLE = "BBBBBBBBBB"; + + private static final String DEFAULT_AUTHOR = "AAAAAAAAAA"; + private static final String UPDATED_AUTHOR = "BBBBBBBBBB"; + + private static final LocalDate DEFAULT_PUBLISHED = LocalDate.ofEpochDay(0L); + private static final LocalDate UPDATED_PUBLISHED = LocalDate.now(ZoneId.systemDefault()); + + private static final Integer DEFAULT_QUANTITY = 0; + private static final Integer UPDATED_QUANTITY = 1; + + private static final Double DEFAULT_PRICE = 0D; + private static final Double UPDATED_PRICE = 1D; + + @Autowired + private BookRepository bookRepository; + + @Autowired + private BookMapper bookMapper; + + @Autowired + private BookService bookService; + + @Autowired + private MappingJackson2HttpMessageConverter jacksonMessageConverter; + + @Autowired + private PageableHandlerMethodArgumentResolver pageableArgumentResolver; + + @Autowired + private ExceptionTranslator exceptionTranslator; + + @Autowired + private EntityManager em; + + @Autowired + private Validator validator; + + private MockMvc restBookMockMvc; + + private Book book; + + @Before + public void setup() { + MockitoAnnotations.initMocks(this); + final BookResource bookResource = new BookResource(bookService); + this.restBookMockMvc = MockMvcBuilders.standaloneSetup(bookResource) + .setCustomArgumentResolvers(pageableArgumentResolver) + .setControllerAdvice(exceptionTranslator) + .setConversionService(TestUtil.createFormattingConversionService()) + .setMessageConverters(jacksonMessageConverter) + .setValidator(validator).build(); + } + + /** + * Create an entity for this test. + * + * This is a static method, as tests for other entities might also need it, + * if they test an entity which requires the current entity. + */ + public static Book createEntity(EntityManager em) { + Book book = new Book() + .title(DEFAULT_TITLE) + .author(DEFAULT_AUTHOR) + .published(DEFAULT_PUBLISHED) + .quantity(DEFAULT_QUANTITY) + .price(DEFAULT_PRICE); + return book; + } + + @Before + public void initTest() { + book = createEntity(em); + } + + @Test + @Transactional + public void createBook() throws Exception { + int databaseSizeBeforeCreate = bookRepository.findAll().size(); + + // Create the Book + BookDTO bookDTO = bookMapper.toDto(book); + restBookMockMvc.perform(post("/api/books") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(bookDTO))) + .andExpect(status().isCreated()); + + // Validate the Book in the database + List bookList = bookRepository.findAll(); + assertThat(bookList).hasSize(databaseSizeBeforeCreate + 1); + Book testBook = bookList.get(bookList.size() - 1); + assertThat(testBook.getTitle()).isEqualTo(DEFAULT_TITLE); + assertThat(testBook.getAuthor()).isEqualTo(DEFAULT_AUTHOR); + assertThat(testBook.getPublished()).isEqualTo(DEFAULT_PUBLISHED); + assertThat(testBook.getQuantity()).isEqualTo(DEFAULT_QUANTITY); + assertThat(testBook.getPrice()).isEqualTo(DEFAULT_PRICE); + } + + @Test + @Transactional + public void createBookWithExistingId() throws Exception { + int databaseSizeBeforeCreate = bookRepository.findAll().size(); + + // Create the Book with an existing ID + book.setId(1L); + BookDTO bookDTO = bookMapper.toDto(book); + + // An entity with an existing ID cannot be created, so this API call must fail + restBookMockMvc.perform(post("/api/books") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(bookDTO))) + .andExpect(status().isBadRequest()); + + // Validate the Book in the database + List bookList = bookRepository.findAll(); + assertThat(bookList).hasSize(databaseSizeBeforeCreate); + } + + @Test + @Transactional + public void checkTitleIsRequired() throws Exception { + int databaseSizeBeforeTest = bookRepository.findAll().size(); + // set the field null + book.setTitle(null); + + // Create the Book, which fails. + BookDTO bookDTO = bookMapper.toDto(book); + + restBookMockMvc.perform(post("/api/books") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(bookDTO))) + .andExpect(status().isBadRequest()); + + List bookList = bookRepository.findAll(); + assertThat(bookList).hasSize(databaseSizeBeforeTest); + } + + @Test + @Transactional + public void checkAuthorIsRequired() throws Exception { + int databaseSizeBeforeTest = bookRepository.findAll().size(); + // set the field null + book.setAuthor(null); + + // Create the Book, which fails. + BookDTO bookDTO = bookMapper.toDto(book); + + restBookMockMvc.perform(post("/api/books") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(bookDTO))) + .andExpect(status().isBadRequest()); + + List bookList = bookRepository.findAll(); + assertThat(bookList).hasSize(databaseSizeBeforeTest); + } + + @Test + @Transactional + public void checkPublishedIsRequired() throws Exception { + int databaseSizeBeforeTest = bookRepository.findAll().size(); + // set the field null + book.setPublished(null); + + // Create the Book, which fails. + BookDTO bookDTO = bookMapper.toDto(book); + + restBookMockMvc.perform(post("/api/books") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(bookDTO))) + .andExpect(status().isBadRequest()); + + List bookList = bookRepository.findAll(); + assertThat(bookList).hasSize(databaseSizeBeforeTest); + } + + @Test + @Transactional + public void checkQuantityIsRequired() throws Exception { + int databaseSizeBeforeTest = bookRepository.findAll().size(); + // set the field null + book.setQuantity(null); + + // Create the Book, which fails. + BookDTO bookDTO = bookMapper.toDto(book); + + restBookMockMvc.perform(post("/api/books") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(bookDTO))) + .andExpect(status().isBadRequest()); + + List bookList = bookRepository.findAll(); + assertThat(bookList).hasSize(databaseSizeBeforeTest); + } + + @Test + @Transactional + public void checkPriceIsRequired() throws Exception { + int databaseSizeBeforeTest = bookRepository.findAll().size(); + // set the field null + book.setPrice(null); + + // Create the Book, which fails. + BookDTO bookDTO = bookMapper.toDto(book); + + restBookMockMvc.perform(post("/api/books") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(bookDTO))) + .andExpect(status().isBadRequest()); + + List bookList = bookRepository.findAll(); + assertThat(bookList).hasSize(databaseSizeBeforeTest); + } + + @Test + @Transactional + public void getAllBooks() throws Exception { + // Initialize the database + bookRepository.saveAndFlush(book); + + // Get all the bookList + restBookMockMvc.perform(get("/api/books?sort=id,desc")) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) + .andExpect(jsonPath("$.[*].id").value(hasItem(book.getId().intValue()))) + .andExpect(jsonPath("$.[*].title").value(hasItem(DEFAULT_TITLE.toString()))) + .andExpect(jsonPath("$.[*].author").value(hasItem(DEFAULT_AUTHOR.toString()))) + .andExpect(jsonPath("$.[*].published").value(hasItem(DEFAULT_PUBLISHED.toString()))) + .andExpect(jsonPath("$.[*].quantity").value(hasItem(DEFAULT_QUANTITY))) + .andExpect(jsonPath("$.[*].price").value(hasItem(DEFAULT_PRICE.doubleValue()))); + } + + @Test + @Transactional + public void getBook() throws Exception { + // Initialize the database + bookRepository.saveAndFlush(book); + + // Get the book + restBookMockMvc.perform(get("/api/books/{id}", book.getId())) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) + .andExpect(jsonPath("$.id").value(book.getId().intValue())) + .andExpect(jsonPath("$.title").value(DEFAULT_TITLE.toString())) + .andExpect(jsonPath("$.author").value(DEFAULT_AUTHOR.toString())) + .andExpect(jsonPath("$.published").value(DEFAULT_PUBLISHED.toString())) + .andExpect(jsonPath("$.quantity").value(DEFAULT_QUANTITY)) + .andExpect(jsonPath("$.price").value(DEFAULT_PRICE.doubleValue())); + } + + @Test + @Transactional + public void getNonExistingBook() throws Exception { + // Get the book + restBookMockMvc.perform(get("/api/books/{id}", Long.MAX_VALUE)) + .andExpect(status().isNotFound()); + } + + @Test + @Transactional + public void updateBook() throws Exception { + // Initialize the database + bookRepository.saveAndFlush(book); + + int databaseSizeBeforeUpdate = bookRepository.findAll().size(); + + // Update the book + Book updatedBook = bookRepository.findById(book.getId()).get(); + // Disconnect from session so that the updates on updatedBook are not directly saved in db + em.detach(updatedBook); + updatedBook + .title(UPDATED_TITLE) + .author(UPDATED_AUTHOR) + .published(UPDATED_PUBLISHED) + .quantity(UPDATED_QUANTITY) + .price(UPDATED_PRICE); + BookDTO bookDTO = bookMapper.toDto(updatedBook); + + restBookMockMvc.perform(put("/api/books") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(bookDTO))) + .andExpect(status().isOk()); + + // Validate the Book in the database + List bookList = bookRepository.findAll(); + assertThat(bookList).hasSize(databaseSizeBeforeUpdate); + Book testBook = bookList.get(bookList.size() - 1); + assertThat(testBook.getTitle()).isEqualTo(UPDATED_TITLE); + assertThat(testBook.getAuthor()).isEqualTo(UPDATED_AUTHOR); + assertThat(testBook.getPublished()).isEqualTo(UPDATED_PUBLISHED); + assertThat(testBook.getQuantity()).isEqualTo(UPDATED_QUANTITY); + assertThat(testBook.getPrice()).isEqualTo(UPDATED_PRICE); + } + + @Test + @Transactional + public void updateNonExistingBook() throws Exception { + int databaseSizeBeforeUpdate = bookRepository.findAll().size(); + + // Create the Book + BookDTO bookDTO = bookMapper.toDto(book); + + // If the entity doesn't have an ID, it will throw BadRequestAlertException + restBookMockMvc.perform(put("/api/books") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(bookDTO))) + .andExpect(status().isBadRequest()); + + // Validate the Book in the database + List bookList = bookRepository.findAll(); + assertThat(bookList).hasSize(databaseSizeBeforeUpdate); + } + + @Test + @Transactional + public void deleteBook() throws Exception { + // Initialize the database + bookRepository.saveAndFlush(book); + + int databaseSizeBeforeDelete = bookRepository.findAll().size(); + + // Delete the book + restBookMockMvc.perform(delete("/api/books/{id}", book.getId()) + .accept(TestUtil.APPLICATION_JSON_UTF8)) + .andExpect(status().isOk()); + + // Validate the database is empty + List bookList = bookRepository.findAll(); + assertThat(bookList).hasSize(databaseSizeBeforeDelete - 1); + } + + @Test + @Transactional + public void equalsVerifier() throws Exception { + TestUtil.equalsVerifier(Book.class); + Book book1 = new Book(); + book1.setId(1L); + Book book2 = new Book(); + book2.setId(book1.getId()); + assertThat(book1).isEqualTo(book2); + book2.setId(2L); + assertThat(book1).isNotEqualTo(book2); + book1.setId(null); + assertThat(book1).isNotEqualTo(book2); + } + + @Test + @Transactional + public void dtoEqualsVerifier() throws Exception { + TestUtil.equalsVerifier(BookDTO.class); + BookDTO bookDTO1 = new BookDTO(); + bookDTO1.setId(1L); + BookDTO bookDTO2 = new BookDTO(); + assertThat(bookDTO1).isNotEqualTo(bookDTO2); + bookDTO2.setId(bookDTO1.getId()); + assertThat(bookDTO1).isEqualTo(bookDTO2); + bookDTO2.setId(2L); + assertThat(bookDTO1).isNotEqualTo(bookDTO2); + bookDTO1.setId(null); + assertThat(bookDTO1).isNotEqualTo(bookDTO2); + } + + @Test + @Transactional + public void testEntityFromId() { + assertThat(bookMapper.fromId(42L).getId()).isEqualTo(42); + assertThat(bookMapper.fromId(null)).isNull(); + } +} diff --git a/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/web/rest/ClientForwardControllerIT.java b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/web/rest/ClientForwardControllerIT.java new file mode 100644 index 000000000000..9dcc2e605504 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/web/rest/ClientForwardControllerIT.java @@ -0,0 +1,67 @@ +package com.baeldung.jhipster6.web.rest; + +import com.baeldung.jhipster6.BookstoreApp; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.http.MediaType; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.ResultActions; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.forwardedUrl; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +/** + * Integration tests for the {@link ClientForwardController} REST controller. + */ +@SpringBootTest(classes = BookstoreApp.class) +public class ClientForwardControllerIT { + + private MockMvc restMockMvc; + + @BeforeEach + public void setup() { + ClientForwardController clientForwardController = new ClientForwardController(); + this.restMockMvc = MockMvcBuilders + .standaloneSetup(clientForwardController, new TestController()) + .build(); + } + + @Test + public void getBackendEndpoint() throws Exception { + restMockMvc.perform(get("/test")) + .andExpect(status().isOk()) + .andExpect(content().contentTypeCompatibleWith(MediaType.TEXT_PLAIN_VALUE)) + .andExpect(content().string("test")); + } + + @Test + public void getClientEndpoint() throws Exception { + ResultActions perform = restMockMvc.perform(get("/non-existant-mapping")); + perform + .andExpect(status().isOk()) + .andExpect(forwardedUrl("/")); + } + + @Test + public void getNestedClientEndpoint() throws Exception { + restMockMvc.perform(get("/admin/user-management")) + .andExpect(status().isOk()) + .andExpect(forwardedUrl("/")); + } + + @RestController + public static class TestController { + + @RequestMapping(value = "/test") + public String test() { + return "test"; + } + } +} diff --git a/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/web/rest/LogsResourceIntegrationTest.java b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/web/rest/LogsResourceIntegrationTest.java new file mode 100644 index 000000000000..a9aa9b27c161 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/web/rest/LogsResourceIntegrationTest.java @@ -0,0 +1,67 @@ +package com.baeldung.jhipster6.web.rest; + +import com.baeldung.jhipster6.BookstoreApp; +import com.baeldung.jhipster6.web.rest.vm.LoggerVM; + +import ch.qos.logback.classic.AsyncAppender; +import ch.qos.logback.classic.LoggerContext; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.slf4j.LoggerFactory; +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.setup.MockMvcBuilders; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +/** + * Test class for the LogsResource REST controller. + * + * @see LogsResource + */ +@RunWith(SpringRunner.class) +@SpringBootTest(classes = BookstoreApp.class) +public class LogsResourceIntegrationTest { + + private MockMvc restLogsMockMvc; + + @Before + public void setup() { + LogsResource logsResource = new LogsResource(); + this.restLogsMockMvc = MockMvcBuilders + .standaloneSetup(logsResource) + .build(); + } + + @Test + public void getAllLogs() throws Exception { + restLogsMockMvc.perform(get("/management/logs")) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)); + } + + @Test + public void changeLogs() throws Exception { + LoggerVM logger = new LoggerVM(); + logger.setLevel("INFO"); + logger.setName("ROOT"); + + restLogsMockMvc.perform(put("/management/logs") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(logger))) + .andExpect(status().isNoContent()); + } + + @Test + public void testLogstashAppender() { + LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); + assertThat(context.getLogger("ROOT").getAppender("ASYNC_LOGSTASH")).isInstanceOf(AsyncAppender.class); + } +} diff --git a/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/web/rest/TestUtil.java b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/web/rest/TestUtil.java new file mode 100644 index 000000000000..50c6cc24a661 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/web/rest/TestUtil.java @@ -0,0 +1,141 @@ +package com.baeldung.jhipster6.web.rest; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import org.hamcrest.Description; +import org.hamcrest.TypeSafeDiagnosingMatcher; +import org.springframework.format.datetime.standard.DateTimeFormatterRegistrar; +import org.springframework.format.support.DefaultFormattingConversionService; +import org.springframework.format.support.FormattingConversionService; +import org.springframework.http.MediaType; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.time.ZonedDateTime; +import java.time.format.DateTimeParseException; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Utility class for testing REST controllers. + */ +public final class TestUtil { + + private static final ObjectMapper mapper = createObjectMapper(); + + /** MediaType for JSON UTF8 */ + public static final MediaType APPLICATION_JSON_UTF8 = new MediaType( + MediaType.APPLICATION_JSON.getType(), + MediaType.APPLICATION_JSON.getSubtype(), StandardCharsets.UTF_8); + + + private static ObjectMapper createObjectMapper() { + ObjectMapper mapper = new ObjectMapper(); + mapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY); + mapper.registerModule(new JavaTimeModule()); + return mapper; + } + + /** + * Convert an object to JSON byte array. + * + * @param object + * the object to convert + * @return the JSON byte array + * @throws IOException + */ + public static byte[] convertObjectToJsonBytes(Object object) + throws IOException { + return mapper.writeValueAsBytes(object); + } + + /** + * Create a byte array with a specific size filled with specified data. + * + * @param size the size of the byte array + * @param data the data to put in the byte array + * @return the JSON byte array + */ + public static byte[] createByteArray(int size, String data) { + byte[] byteArray = new byte[size]; + for (int i = 0; i < size; i++) { + byteArray[i] = Byte.parseByte(data, 2); + } + return byteArray; + } + + /** + * A matcher that tests that the examined string represents the same instant as the reference datetime. + */ + public static class ZonedDateTimeMatcher extends TypeSafeDiagnosingMatcher { + + private final ZonedDateTime date; + + public ZonedDateTimeMatcher(ZonedDateTime date) { + this.date = date; + } + + @Override + protected boolean matchesSafely(String item, Description mismatchDescription) { + try { + if (!date.isEqual(ZonedDateTime.parse(item))) { + mismatchDescription.appendText("was ").appendValue(item); + return false; + } + return true; + } catch (DateTimeParseException e) { + mismatchDescription.appendText("was ").appendValue(item) + .appendText(", which could not be parsed as a ZonedDateTime"); + return false; + } + + } + + @Override + public void describeTo(Description description) { + description.appendText("a String representing the same Instant as ").appendValue(date); + } + } + + /** + * Creates a matcher that matches when the examined string reprensents the same instant as the reference datetime + * @param date the reference datetime against which the examined string is checked + */ + public static ZonedDateTimeMatcher sameInstant(ZonedDateTime date) { + return new ZonedDateTimeMatcher(date); + } + + /** + * Verifies the equals/hashcode contract on the domain object. + */ + public static void equalsVerifier(Class clazz) throws Exception { + T domainObject1 = clazz.getConstructor().newInstance(); + assertThat(domainObject1.toString()).isNotNull(); + assertThat(domainObject1).isEqualTo(domainObject1); + assertThat(domainObject1.hashCode()).isEqualTo(domainObject1.hashCode()); + // Test with an instance of another class + Object testOtherObject = new Object(); + assertThat(domainObject1).isNotEqualTo(testOtherObject); + assertThat(domainObject1).isNotEqualTo(null); + // Test with an instance of the same class + T domainObject2 = clazz.getConstructor().newInstance(); + assertThat(domainObject1).isNotEqualTo(domainObject2); + // HashCodes are equals because the objects are not persisted yet + assertThat(domainObject1.hashCode()).isEqualTo(domainObject2.hashCode()); + } + + /** + * Create a FormattingConversionService which use ISO date format, instead of the localized one. + * @return the FormattingConversionService + */ + public static FormattingConversionService createFormattingConversionService() { + DefaultFormattingConversionService dfcs = new DefaultFormattingConversionService (); + DateTimeFormatterRegistrar registrar = new DateTimeFormatterRegistrar(); + registrar.setUseIsoFormat(true); + registrar.registerFormatters(dfcs); + return dfcs; + } + + private TestUtil() {} +} diff --git a/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/web/rest/UserJWTControllerIT.java b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/web/rest/UserJWTControllerIT.java new file mode 100644 index 000000000000..3ad59b31669e --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/web/rest/UserJWTControllerIT.java @@ -0,0 +1,120 @@ +package com.baeldung.jhipster6.web.rest; + +import com.baeldung.jhipster6.BookstoreApp; +import com.baeldung.jhipster6.domain.User; +import com.baeldung.jhipster6.repository.UserRepository; +import com.baeldung.jhipster6.security.jwt.TokenProvider; +import com.baeldung.jhipster6.web.rest.errors.ExceptionTranslator; +import com.baeldung.jhipster6.web.rest.vm.LoginVM; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.transaction.annotation.Transactional; + +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.header; +import static org.hamcrest.Matchers.nullValue; +import static org.hamcrest.Matchers.isEmptyString; +import static org.hamcrest.Matchers.not; + +/** + * Integration tests for the {@link UserJWTController} REST controller. + */ +@SpringBootTest(classes = BookstoreApp.class) +public class UserJWTControllerIT { + + @Autowired + private TokenProvider tokenProvider; + + @Autowired + private AuthenticationManager authenticationManager; + + @Autowired + private UserRepository userRepository; + + @Autowired + private PasswordEncoder passwordEncoder; + + @Autowired + private ExceptionTranslator exceptionTranslator; + + private MockMvc mockMvc; + + @BeforeEach + public void setup() { + UserJWTController userJWTController = new UserJWTController(tokenProvider, authenticationManager); + this.mockMvc = MockMvcBuilders.standaloneSetup(userJWTController) + .setControllerAdvice(exceptionTranslator) + .build(); + } + + @Test + @Transactional + public void testAuthorize() throws Exception { + User user = new User(); + user.setLogin("user-jwt-controller"); + user.setEmail("user-jwt-controller@example.com"); + user.setActivated(true); + user.setPassword(passwordEncoder.encode("test")); + + userRepository.saveAndFlush(user); + + LoginVM login = new LoginVM(); + login.setUsername("user-jwt-controller"); + login.setPassword("test"); + mockMvc.perform(post("/api/authenticate") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(login))) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.id_token").isString()) + .andExpect(jsonPath("$.id_token").isNotEmpty()) + .andExpect(header().string("Authorization", not(nullValue()))) + .andExpect(header().string("Authorization", not(isEmptyString()))); + } + + @Test + @Transactional + public void testAuthorizeWithRememberMe() throws Exception { + User user = new User(); + user.setLogin("user-jwt-controller-remember-me"); + user.setEmail("user-jwt-controller-remember-me@example.com"); + user.setActivated(true); + user.setPassword(passwordEncoder.encode("test")); + + userRepository.saveAndFlush(user); + + LoginVM login = new LoginVM(); + login.setUsername("user-jwt-controller-remember-me"); + login.setPassword("test"); + login.setRememberMe(true); + mockMvc.perform(post("/api/authenticate") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(login))) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.id_token").isString()) + .andExpect(jsonPath("$.id_token").isNotEmpty()) + .andExpect(header().string("Authorization", not(nullValue()))) + .andExpect(header().string("Authorization", not(isEmptyString()))); + } + + @Test + public void testAuthorizeFails() throws Exception { + LoginVM login = new LoginVM(); + login.setUsername("wrong-user"); + login.setPassword("wrong password"); + mockMvc.perform(post("/api/authenticate") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(login))) + .andExpect(status().isUnauthorized()) + .andExpect(jsonPath("$.id_token").doesNotExist()) + .andExpect(header().doesNotExist("Authorization")); + } +} diff --git a/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/web/rest/UserJWTControllerIntegrationTest.java b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/web/rest/UserJWTControllerIntegrationTest.java new file mode 100644 index 000000000000..bf62d29f1b54 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/web/rest/UserJWTControllerIntegrationTest.java @@ -0,0 +1,126 @@ +package com.baeldung.jhipster6.web.rest; + +import com.baeldung.jhipster6.BookstoreApp; +import com.baeldung.jhipster6.domain.User; +import com.baeldung.jhipster6.repository.UserRepository; +import com.baeldung.jhipster6.security.jwt.TokenProvider; +import com.baeldung.jhipster6.web.rest.errors.ExceptionTranslator; +import com.baeldung.jhipster6.web.rest.vm.LoginVM; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.transaction.annotation.Transactional; + +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.header; +import static org.hamcrest.Matchers.nullValue; +import static org.hamcrest.Matchers.isEmptyString; +import static org.hamcrest.Matchers.not; + +/** + * Test class for the UserJWTController REST controller. + * + * @see UserJWTController + */ +@RunWith(SpringRunner.class) +@SpringBootTest(classes = BookstoreApp.class) +public class UserJWTControllerIntegrationTest { + + @Autowired + private TokenProvider tokenProvider; + + @Autowired + private AuthenticationManager authenticationManager; + + @Autowired + private UserRepository userRepository; + + @Autowired + private PasswordEncoder passwordEncoder; + + @Autowired + private ExceptionTranslator exceptionTranslator; + + private MockMvc mockMvc; + + @Before + public void setup() { + UserJWTController userJWTController = new UserJWTController(tokenProvider, authenticationManager); + this.mockMvc = MockMvcBuilders.standaloneSetup(userJWTController) + .setControllerAdvice(exceptionTranslator) + .build(); + } + + @Test + @Transactional + public void testAuthorize() throws Exception { + User user = new User(); + user.setLogin("user-jwt-controller"); + user.setEmail("user-jwt-controller@example.com"); + user.setActivated(true); + user.setPassword(passwordEncoder.encode("test")); + + userRepository.saveAndFlush(user); + + LoginVM login = new LoginVM(); + login.setUsername("user-jwt-controller"); + login.setPassword("test"); + mockMvc.perform(post("/api/authenticate") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(login))) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.id_token").isString()) + .andExpect(jsonPath("$.id_token").isNotEmpty()) + .andExpect(header().string("Authorization", not(nullValue()))) + .andExpect(header().string("Authorization", not(isEmptyString()))); + } + + @Test + @Transactional + public void testAuthorizeWithRememberMe() throws Exception { + User user = new User(); + user.setLogin("user-jwt-controller-remember-me"); + user.setEmail("user-jwt-controller-remember-me@example.com"); + user.setActivated(true); + user.setPassword(passwordEncoder.encode("test")); + + userRepository.saveAndFlush(user); + + LoginVM login = new LoginVM(); + login.setUsername("user-jwt-controller-remember-me"); + login.setPassword("test"); + login.setRememberMe(true); + mockMvc.perform(post("/api/authenticate") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(login))) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.id_token").isString()) + .andExpect(jsonPath("$.id_token").isNotEmpty()) + .andExpect(header().string("Authorization", not(nullValue()))) + .andExpect(header().string("Authorization", not(isEmptyString()))); + } + + @Test + @Transactional + public void testAuthorizeFails() throws Exception { + LoginVM login = new LoginVM(); + login.setUsername("wrong-user"); + login.setPassword("wrong password"); + mockMvc.perform(post("/api/authenticate") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(login))) + .andExpect(status().isUnauthorized()) + .andExpect(jsonPath("$.id_token").doesNotExist()) + .andExpect(header().doesNotExist("Authorization")); + } +} diff --git a/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/web/rest/UserResourceIT.java b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/web/rest/UserResourceIT.java new file mode 100644 index 000000000000..420dcbbd77b0 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/web/rest/UserResourceIT.java @@ -0,0 +1,592 @@ +package com.baeldung.jhipster6.web.rest; + +import com.baeldung.jhipster6.BookstoreApp; +import com.baeldung.jhipster6.domain.Authority; +import com.baeldung.jhipster6.domain.User; +import com.baeldung.jhipster6.repository.UserRepository; +import com.baeldung.jhipster6.security.AuthoritiesConstants; +import com.baeldung.jhipster6.service.MailService; +import com.baeldung.jhipster6.service.UserService; +import com.baeldung.jhipster6.service.dto.UserDTO; +import com.baeldung.jhipster6.service.mapper.UserMapper; +import com.baeldung.jhipster6.web.rest.errors.ExceptionTranslator; +import com.baeldung.jhipster6.web.rest.vm.ManagedUserVM; + +import org.apache.commons.lang3.RandomStringUtils; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.data.web.PageableHandlerMethodArgumentResolver; +import org.springframework.http.MediaType; +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.transaction.annotation.Transactional; + +import javax.persistence.EntityManager; +import java.time.Instant; +import java.util.*; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.hamcrest.Matchers.hasItems; +import static org.hamcrest.Matchers.hasItem; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +/** + * Integration tests for the {@link UserResource} REST controller. + */ +@SpringBootTest(classes = BookstoreApp.class) +public class UserResourceIT { + + private static final String DEFAULT_LOGIN = "johndoe"; + private static final String UPDATED_LOGIN = "jhipster"; + + private static final Long DEFAULT_ID = 1L; + + private static final String DEFAULT_PASSWORD = "passjohndoe"; + private static final String UPDATED_PASSWORD = "passjhipster"; + + private static final String DEFAULT_EMAIL = "johndoe@localhost"; + private static final String UPDATED_EMAIL = "jhipster@localhost"; + + private static final String DEFAULT_FIRSTNAME = "john"; + private static final String UPDATED_FIRSTNAME = "jhipsterFirstName"; + + private static final String DEFAULT_LASTNAME = "doe"; + private static final String UPDATED_LASTNAME = "jhipsterLastName"; + + private static final String DEFAULT_IMAGEURL = "http://placehold.it/50x50"; + private static final String UPDATED_IMAGEURL = "http://placehold.it/40x40"; + + private static final String DEFAULT_LANGKEY = "en"; + private static final String UPDATED_LANGKEY = "fr"; + + @Autowired + private UserRepository userRepository; + + @Autowired + private MailService mailService; + + @Autowired + private UserService userService; + + @Autowired + private UserMapper userMapper; + + @Autowired + private MappingJackson2HttpMessageConverter jacksonMessageConverter; + + @Autowired + private PageableHandlerMethodArgumentResolver pageableArgumentResolver; + + @Autowired + private ExceptionTranslator exceptionTranslator; + + @Autowired + private EntityManager em; + + private MockMvc restUserMockMvc; + + private User user; + + @BeforeEach + public void setup() { + UserResource userResource = new UserResource(userService, userRepository, mailService); + + this.restUserMockMvc = MockMvcBuilders.standaloneSetup(userResource) + .setCustomArgumentResolvers(pageableArgumentResolver) + .setControllerAdvice(exceptionTranslator) + .setMessageConverters(jacksonMessageConverter) + .build(); + } + + /** + * Create a User. + * + * This is a static method, as tests for other entities might also need it, + * if they test an entity which has a required relationship to the User entity. + */ + public static User createEntity(EntityManager em) { + User user = new User(); + user.setLogin(DEFAULT_LOGIN + RandomStringUtils.randomAlphabetic(5)); + user.setPassword(RandomStringUtils.random(60)); + user.setActivated(true); + user.setEmail(RandomStringUtils.randomAlphabetic(5) + DEFAULT_EMAIL); + user.setFirstName(DEFAULT_FIRSTNAME); + user.setLastName(DEFAULT_LASTNAME); + user.setImageUrl(DEFAULT_IMAGEURL); + user.setLangKey(DEFAULT_LANGKEY); + return user; + } + + @BeforeEach + public void initTest() { + user = createEntity(em); + user.setLogin(DEFAULT_LOGIN); + user.setEmail(DEFAULT_EMAIL); + } + + @Test + @Transactional + public void createUser() throws Exception { + int databaseSizeBeforeCreate = userRepository.findAll().size(); + + // Create the User + ManagedUserVM managedUserVM = new ManagedUserVM(); + managedUserVM.setLogin(DEFAULT_LOGIN); + managedUserVM.setPassword(DEFAULT_PASSWORD); + managedUserVM.setFirstName(DEFAULT_FIRSTNAME); + managedUserVM.setLastName(DEFAULT_LASTNAME); + managedUserVM.setEmail(DEFAULT_EMAIL); + managedUserVM.setActivated(true); + managedUserVM.setImageUrl(DEFAULT_IMAGEURL); + managedUserVM.setLangKey(DEFAULT_LANGKEY); + managedUserVM.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); + + restUserMockMvc.perform(post("/api/users") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(managedUserVM))) + .andExpect(status().isCreated()); + + // Validate the User in the database + List userList = userRepository.findAll(); + assertThat(userList).hasSize(databaseSizeBeforeCreate + 1); + User testUser = userList.get(userList.size() - 1); + assertThat(testUser.getLogin()).isEqualTo(DEFAULT_LOGIN); + assertThat(testUser.getFirstName()).isEqualTo(DEFAULT_FIRSTNAME); + assertThat(testUser.getLastName()).isEqualTo(DEFAULT_LASTNAME); + assertThat(testUser.getEmail()).isEqualTo(DEFAULT_EMAIL); + assertThat(testUser.getImageUrl()).isEqualTo(DEFAULT_IMAGEURL); + assertThat(testUser.getLangKey()).isEqualTo(DEFAULT_LANGKEY); + } + + @Test + @Transactional + public void createUserWithExistingId() throws Exception { + int databaseSizeBeforeCreate = userRepository.findAll().size(); + + ManagedUserVM managedUserVM = new ManagedUserVM(); + managedUserVM.setId(1L); + managedUserVM.setLogin(DEFAULT_LOGIN); + managedUserVM.setPassword(DEFAULT_PASSWORD); + managedUserVM.setFirstName(DEFAULT_FIRSTNAME); + managedUserVM.setLastName(DEFAULT_LASTNAME); + managedUserVM.setEmail(DEFAULT_EMAIL); + managedUserVM.setActivated(true); + managedUserVM.setImageUrl(DEFAULT_IMAGEURL); + managedUserVM.setLangKey(DEFAULT_LANGKEY); + managedUserVM.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); + + // An entity with an existing ID cannot be created, so this API call must fail + restUserMockMvc.perform(post("/api/users") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(managedUserVM))) + .andExpect(status().isBadRequest()); + + // Validate the User in the database + List userList = userRepository.findAll(); + assertThat(userList).hasSize(databaseSizeBeforeCreate); + } + + @Test + @Transactional + public void createUserWithExistingLogin() throws Exception { + // Initialize the database + userRepository.saveAndFlush(user); + int databaseSizeBeforeCreate = userRepository.findAll().size(); + + ManagedUserVM managedUserVM = new ManagedUserVM(); + managedUserVM.setLogin(DEFAULT_LOGIN);// this login should already be used + managedUserVM.setPassword(DEFAULT_PASSWORD); + managedUserVM.setFirstName(DEFAULT_FIRSTNAME); + managedUserVM.setLastName(DEFAULT_LASTNAME); + managedUserVM.setEmail("anothermail@localhost"); + managedUserVM.setActivated(true); + managedUserVM.setImageUrl(DEFAULT_IMAGEURL); + managedUserVM.setLangKey(DEFAULT_LANGKEY); + managedUserVM.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); + + // Create the User + restUserMockMvc.perform(post("/api/users") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(managedUserVM))) + .andExpect(status().isBadRequest()); + + // Validate the User in the database + List userList = userRepository.findAll(); + assertThat(userList).hasSize(databaseSizeBeforeCreate); + } + + @Test + @Transactional + public void createUserWithExistingEmail() throws Exception { + // Initialize the database + userRepository.saveAndFlush(user); + int databaseSizeBeforeCreate = userRepository.findAll().size(); + + ManagedUserVM managedUserVM = new ManagedUserVM(); + managedUserVM.setLogin("anotherlogin"); + managedUserVM.setPassword(DEFAULT_PASSWORD); + managedUserVM.setFirstName(DEFAULT_FIRSTNAME); + managedUserVM.setLastName(DEFAULT_LASTNAME); + managedUserVM.setEmail(DEFAULT_EMAIL);// this email should already be used + managedUserVM.setActivated(true); + managedUserVM.setImageUrl(DEFAULT_IMAGEURL); + managedUserVM.setLangKey(DEFAULT_LANGKEY); + managedUserVM.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); + + // Create the User + restUserMockMvc.perform(post("/api/users") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(managedUserVM))) + .andExpect(status().isBadRequest()); + + // Validate the User in the database + List userList = userRepository.findAll(); + assertThat(userList).hasSize(databaseSizeBeforeCreate); + } + + @Test + @Transactional + public void getAllUsers() throws Exception { + // Initialize the database + userRepository.saveAndFlush(user); + + // Get all the users + restUserMockMvc.perform(get("/api/users?sort=id,desc") + .accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) + .andExpect(jsonPath("$.[*].login").value(hasItem(DEFAULT_LOGIN))) + .andExpect(jsonPath("$.[*].firstName").value(hasItem(DEFAULT_FIRSTNAME))) + .andExpect(jsonPath("$.[*].lastName").value(hasItem(DEFAULT_LASTNAME))) + .andExpect(jsonPath("$.[*].email").value(hasItem(DEFAULT_EMAIL))) + .andExpect(jsonPath("$.[*].imageUrl").value(hasItem(DEFAULT_IMAGEURL))) + .andExpect(jsonPath("$.[*].langKey").value(hasItem(DEFAULT_LANGKEY))); + } + + @Test + @Transactional + public void getUser() throws Exception { + // Initialize the database + userRepository.saveAndFlush(user); + + // Get the user + restUserMockMvc.perform(get("/api/users/{login}", user.getLogin())) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) + .andExpect(jsonPath("$.login").value(user.getLogin())) + .andExpect(jsonPath("$.firstName").value(DEFAULT_FIRSTNAME)) + .andExpect(jsonPath("$.lastName").value(DEFAULT_LASTNAME)) + .andExpect(jsonPath("$.email").value(DEFAULT_EMAIL)) + .andExpect(jsonPath("$.imageUrl").value(DEFAULT_IMAGEURL)) + .andExpect(jsonPath("$.langKey").value(DEFAULT_LANGKEY)); + } + + @Test + @Transactional + public void getNonExistingUser() throws Exception { + restUserMockMvc.perform(get("/api/users/unknown")) + .andExpect(status().isNotFound()); + } + + @Test + @Transactional + public void updateUser() throws Exception { + // Initialize the database + userRepository.saveAndFlush(user); + int databaseSizeBeforeUpdate = userRepository.findAll().size(); + + // Update the user + User updatedUser = userRepository.findById(user.getId()).get(); + + ManagedUserVM managedUserVM = new ManagedUserVM(); + managedUserVM.setId(updatedUser.getId()); + managedUserVM.setLogin(updatedUser.getLogin()); + managedUserVM.setPassword(UPDATED_PASSWORD); + managedUserVM.setFirstName(UPDATED_FIRSTNAME); + managedUserVM.setLastName(UPDATED_LASTNAME); + managedUserVM.setEmail(UPDATED_EMAIL); + managedUserVM.setActivated(updatedUser.getActivated()); + managedUserVM.setImageUrl(UPDATED_IMAGEURL); + managedUserVM.setLangKey(UPDATED_LANGKEY); + managedUserVM.setCreatedBy(updatedUser.getCreatedBy()); + managedUserVM.setCreatedDate(updatedUser.getCreatedDate()); + managedUserVM.setLastModifiedBy(updatedUser.getLastModifiedBy()); + managedUserVM.setLastModifiedDate(updatedUser.getLastModifiedDate()); + managedUserVM.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); + + restUserMockMvc.perform(put("/api/users") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(managedUserVM))) + .andExpect(status().isOk()); + + // Validate the User in the database + List userList = userRepository.findAll(); + assertThat(userList).hasSize(databaseSizeBeforeUpdate); + User testUser = userList.get(userList.size() - 1); + assertThat(testUser.getFirstName()).isEqualTo(UPDATED_FIRSTNAME); + assertThat(testUser.getLastName()).isEqualTo(UPDATED_LASTNAME); + assertThat(testUser.getEmail()).isEqualTo(UPDATED_EMAIL); + assertThat(testUser.getImageUrl()).isEqualTo(UPDATED_IMAGEURL); + assertThat(testUser.getLangKey()).isEqualTo(UPDATED_LANGKEY); + } + + @Test + @Transactional + public void updateUserLogin() throws Exception { + // Initialize the database + userRepository.saveAndFlush(user); + int databaseSizeBeforeUpdate = userRepository.findAll().size(); + + // Update the user + User updatedUser = userRepository.findById(user.getId()).get(); + + ManagedUserVM managedUserVM = new ManagedUserVM(); + managedUserVM.setId(updatedUser.getId()); + managedUserVM.setLogin(UPDATED_LOGIN); + managedUserVM.setPassword(UPDATED_PASSWORD); + managedUserVM.setFirstName(UPDATED_FIRSTNAME); + managedUserVM.setLastName(UPDATED_LASTNAME); + managedUserVM.setEmail(UPDATED_EMAIL); + managedUserVM.setActivated(updatedUser.getActivated()); + managedUserVM.setImageUrl(UPDATED_IMAGEURL); + managedUserVM.setLangKey(UPDATED_LANGKEY); + managedUserVM.setCreatedBy(updatedUser.getCreatedBy()); + managedUserVM.setCreatedDate(updatedUser.getCreatedDate()); + managedUserVM.setLastModifiedBy(updatedUser.getLastModifiedBy()); + managedUserVM.setLastModifiedDate(updatedUser.getLastModifiedDate()); + managedUserVM.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); + + restUserMockMvc.perform(put("/api/users") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(managedUserVM))) + .andExpect(status().isOk()); + + // Validate the User in the database + List userList = userRepository.findAll(); + assertThat(userList).hasSize(databaseSizeBeforeUpdate); + User testUser = userList.get(userList.size() - 1); + assertThat(testUser.getLogin()).isEqualTo(UPDATED_LOGIN); + assertThat(testUser.getFirstName()).isEqualTo(UPDATED_FIRSTNAME); + assertThat(testUser.getLastName()).isEqualTo(UPDATED_LASTNAME); + assertThat(testUser.getEmail()).isEqualTo(UPDATED_EMAIL); + assertThat(testUser.getImageUrl()).isEqualTo(UPDATED_IMAGEURL); + assertThat(testUser.getLangKey()).isEqualTo(UPDATED_LANGKEY); + } + + @Test + @Transactional + public void updateUserExistingEmail() throws Exception { + // Initialize the database with 2 users + userRepository.saveAndFlush(user); + + User anotherUser = new User(); + anotherUser.setLogin("jhipster"); + anotherUser.setPassword(RandomStringUtils.random(60)); + anotherUser.setActivated(true); + anotherUser.setEmail("jhipster@localhost"); + anotherUser.setFirstName("java"); + anotherUser.setLastName("hipster"); + anotherUser.setImageUrl(""); + anotherUser.setLangKey("en"); + userRepository.saveAndFlush(anotherUser); + + // Update the user + User updatedUser = userRepository.findById(user.getId()).get(); + + ManagedUserVM managedUserVM = new ManagedUserVM(); + managedUserVM.setId(updatedUser.getId()); + managedUserVM.setLogin(updatedUser.getLogin()); + managedUserVM.setPassword(updatedUser.getPassword()); + managedUserVM.setFirstName(updatedUser.getFirstName()); + managedUserVM.setLastName(updatedUser.getLastName()); + managedUserVM.setEmail("jhipster@localhost");// this email should already be used by anotherUser + managedUserVM.setActivated(updatedUser.getActivated()); + managedUserVM.setImageUrl(updatedUser.getImageUrl()); + managedUserVM.setLangKey(updatedUser.getLangKey()); + managedUserVM.setCreatedBy(updatedUser.getCreatedBy()); + managedUserVM.setCreatedDate(updatedUser.getCreatedDate()); + managedUserVM.setLastModifiedBy(updatedUser.getLastModifiedBy()); + managedUserVM.setLastModifiedDate(updatedUser.getLastModifiedDate()); + managedUserVM.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); + + restUserMockMvc.perform(put("/api/users") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(managedUserVM))) + .andExpect(status().isBadRequest()); + } + + @Test + @Transactional + public void updateUserExistingLogin() throws Exception { + // Initialize the database + userRepository.saveAndFlush(user); + + User anotherUser = new User(); + anotherUser.setLogin("jhipster"); + anotherUser.setPassword(RandomStringUtils.random(60)); + anotherUser.setActivated(true); + anotherUser.setEmail("jhipster@localhost"); + anotherUser.setFirstName("java"); + anotherUser.setLastName("hipster"); + anotherUser.setImageUrl(""); + anotherUser.setLangKey("en"); + userRepository.saveAndFlush(anotherUser); + + // Update the user + User updatedUser = userRepository.findById(user.getId()).get(); + + ManagedUserVM managedUserVM = new ManagedUserVM(); + managedUserVM.setId(updatedUser.getId()); + managedUserVM.setLogin("jhipster");// this login should already be used by anotherUser + managedUserVM.setPassword(updatedUser.getPassword()); + managedUserVM.setFirstName(updatedUser.getFirstName()); + managedUserVM.setLastName(updatedUser.getLastName()); + managedUserVM.setEmail(updatedUser.getEmail()); + managedUserVM.setActivated(updatedUser.getActivated()); + managedUserVM.setImageUrl(updatedUser.getImageUrl()); + managedUserVM.setLangKey(updatedUser.getLangKey()); + managedUserVM.setCreatedBy(updatedUser.getCreatedBy()); + managedUserVM.setCreatedDate(updatedUser.getCreatedDate()); + managedUserVM.setLastModifiedBy(updatedUser.getLastModifiedBy()); + managedUserVM.setLastModifiedDate(updatedUser.getLastModifiedDate()); + managedUserVM.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); + + restUserMockMvc.perform(put("/api/users") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(managedUserVM))) + .andExpect(status().isBadRequest()); + } + + @Test + @Transactional + public void deleteUser() throws Exception { + // Initialize the database + userRepository.saveAndFlush(user); + int databaseSizeBeforeDelete = userRepository.findAll().size(); + + // Delete the user + restUserMockMvc.perform(delete("/api/users/{login}", user.getLogin()) + .accept(TestUtil.APPLICATION_JSON_UTF8)) + .andExpect(status().isNoContent()); + + // Validate the database is empty + List userList = userRepository.findAll(); + assertThat(userList).hasSize(databaseSizeBeforeDelete - 1); + } + + @Test + @Transactional + public void getAllAuthorities() throws Exception { + restUserMockMvc.perform(get("/api/users/authorities") + .accept(TestUtil.APPLICATION_JSON_UTF8) + .contentType(TestUtil.APPLICATION_JSON_UTF8)) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) + .andExpect(jsonPath("$").isArray()) + .andExpect(jsonPath("$").value(hasItems(AuthoritiesConstants.USER, AuthoritiesConstants.ADMIN))); + } + + @Test + @Transactional + public void testUserEquals() throws Exception { + TestUtil.equalsVerifier(User.class); + User user1 = new User(); + user1.setId(1L); + User user2 = new User(); + user2.setId(user1.getId()); + assertThat(user1).isEqualTo(user2); + user2.setId(2L); + assertThat(user1).isNotEqualTo(user2); + user1.setId(null); + assertThat(user1).isNotEqualTo(user2); + } + + @Test + public void testUserDTOtoUser() { + UserDTO userDTO = new UserDTO(); + userDTO.setId(DEFAULT_ID); + userDTO.setLogin(DEFAULT_LOGIN); + userDTO.setFirstName(DEFAULT_FIRSTNAME); + userDTO.setLastName(DEFAULT_LASTNAME); + userDTO.setEmail(DEFAULT_EMAIL); + userDTO.setActivated(true); + userDTO.setImageUrl(DEFAULT_IMAGEURL); + userDTO.setLangKey(DEFAULT_LANGKEY); + userDTO.setCreatedBy(DEFAULT_LOGIN); + userDTO.setLastModifiedBy(DEFAULT_LOGIN); + userDTO.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); + + User user = userMapper.userDTOToUser(userDTO); + assertThat(user.getId()).isEqualTo(DEFAULT_ID); + assertThat(user.getLogin()).isEqualTo(DEFAULT_LOGIN); + assertThat(user.getFirstName()).isEqualTo(DEFAULT_FIRSTNAME); + assertThat(user.getLastName()).isEqualTo(DEFAULT_LASTNAME); + assertThat(user.getEmail()).isEqualTo(DEFAULT_EMAIL); + assertThat(user.getActivated()).isEqualTo(true); + assertThat(user.getImageUrl()).isEqualTo(DEFAULT_IMAGEURL); + assertThat(user.getLangKey()).isEqualTo(DEFAULT_LANGKEY); + assertThat(user.getCreatedBy()).isNull(); + assertThat(user.getCreatedDate()).isNotNull(); + assertThat(user.getLastModifiedBy()).isNull(); + assertThat(user.getLastModifiedDate()).isNotNull(); + assertThat(user.getAuthorities()).extracting("name").containsExactly(AuthoritiesConstants.USER); + } + + @Test + public void testUserToUserDTO() { + user.setId(DEFAULT_ID); + user.setCreatedBy(DEFAULT_LOGIN); + user.setCreatedDate(Instant.now()); + user.setLastModifiedBy(DEFAULT_LOGIN); + user.setLastModifiedDate(Instant.now()); + Set authorities = new HashSet<>(); + Authority authority = new Authority(); + authority.setName(AuthoritiesConstants.USER); + authorities.add(authority); + user.setAuthorities(authorities); + + UserDTO userDTO = userMapper.userToUserDTO(user); + + assertThat(userDTO.getId()).isEqualTo(DEFAULT_ID); + assertThat(userDTO.getLogin()).isEqualTo(DEFAULT_LOGIN); + assertThat(userDTO.getFirstName()).isEqualTo(DEFAULT_FIRSTNAME); + assertThat(userDTO.getLastName()).isEqualTo(DEFAULT_LASTNAME); + assertThat(userDTO.getEmail()).isEqualTo(DEFAULT_EMAIL); + assertThat(userDTO.isActivated()).isEqualTo(true); + assertThat(userDTO.getImageUrl()).isEqualTo(DEFAULT_IMAGEURL); + assertThat(userDTO.getLangKey()).isEqualTo(DEFAULT_LANGKEY); + assertThat(userDTO.getCreatedBy()).isEqualTo(DEFAULT_LOGIN); + assertThat(userDTO.getCreatedDate()).isEqualTo(user.getCreatedDate()); + assertThat(userDTO.getLastModifiedBy()).isEqualTo(DEFAULT_LOGIN); + assertThat(userDTO.getLastModifiedDate()).isEqualTo(user.getLastModifiedDate()); + assertThat(userDTO.getAuthorities()).containsExactly(AuthoritiesConstants.USER); + assertThat(userDTO.toString()).isNotNull(); + } + + @Test + public void testAuthorityEquals() { + Authority authorityA = new Authority(); + assertThat(authorityA).isEqualTo(authorityA); + assertThat(authorityA).isNotEqualTo(null); + assertThat(authorityA).isNotEqualTo(new Object()); + assertThat(authorityA.hashCode()).isEqualTo(0); + assertThat(authorityA.toString()).isNotNull(); + + Authority authorityB = new Authority(); + assertThat(authorityA).isEqualTo(authorityB); + + authorityB.setName(AuthoritiesConstants.ADMIN); + assertThat(authorityA).isNotEqualTo(authorityB); + + authorityA.setName(AuthoritiesConstants.USER); + assertThat(authorityA).isNotEqualTo(authorityB); + + authorityB.setName(AuthoritiesConstants.USER); + assertThat(authorityA).isEqualTo(authorityB); + assertThat(authorityA.hashCode()).isEqualTo(authorityB.hashCode()); + } +} diff --git a/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/web/rest/UserResourceIntegrationTest.java b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/web/rest/UserResourceIntegrationTest.java new file mode 100644 index 000000000000..20d8d4a85cdf --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/web/rest/UserResourceIntegrationTest.java @@ -0,0 +1,597 @@ +package com.baeldung.jhipster6.web.rest; + +import com.baeldung.jhipster6.BookstoreApp; +import com.baeldung.jhipster6.domain.Authority; +import com.baeldung.jhipster6.domain.User; +import com.baeldung.jhipster6.repository.UserRepository; +import com.baeldung.jhipster6.security.AuthoritiesConstants; +import com.baeldung.jhipster6.service.MailService; +import com.baeldung.jhipster6.service.UserService; +import com.baeldung.jhipster6.service.dto.UserDTO; +import com.baeldung.jhipster6.service.mapper.UserMapper; +import com.baeldung.jhipster6.web.rest.errors.ExceptionTranslator; +import com.baeldung.jhipster6.web.rest.vm.ManagedUserVM; + +import org.apache.commons.lang3.RandomStringUtils; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.data.web.PageableHandlerMethodArgumentResolver; +import org.springframework.http.MediaType; +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.transaction.annotation.Transactional; + +import javax.persistence.EntityManager; +import java.time.Instant; +import java.util.*; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.hamcrest.Matchers.hasItems; +import static org.hamcrest.Matchers.hasItem; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +/** + * Test class for the UserResource REST controller. + * + * @see UserResource + */ +@RunWith(SpringRunner.class) +@SpringBootTest(classes = BookstoreApp.class) +public class UserResourceIntegrationTest { + + private static final String DEFAULT_LOGIN = "johndoe"; + private static final String UPDATED_LOGIN = "jhipster"; + + private static final Long DEFAULT_ID = 1L; + + private static final String DEFAULT_PASSWORD = "passjohndoe"; + private static final String UPDATED_PASSWORD = "passjhipster"; + + private static final String DEFAULT_EMAIL = "johndoe@localhost"; + private static final String UPDATED_EMAIL = "jhipster@localhost"; + + private static final String DEFAULT_FIRSTNAME = "john"; + private static final String UPDATED_FIRSTNAME = "jhipsterFirstName"; + + private static final String DEFAULT_LASTNAME = "doe"; + private static final String UPDATED_LASTNAME = "jhipsterLastName"; + + private static final String DEFAULT_IMAGEURL = "http://placehold.it/50x50"; + private static final String UPDATED_IMAGEURL = "http://placehold.it/40x40"; + + private static final String DEFAULT_LANGKEY = "en"; + private static final String UPDATED_LANGKEY = "fr"; + + @Autowired + private UserRepository userRepository; + + @Autowired + private MailService mailService; + + @Autowired + private UserService userService; + + @Autowired + private UserMapper userMapper; + + @Autowired + private MappingJackson2HttpMessageConverter jacksonMessageConverter; + + @Autowired + private PageableHandlerMethodArgumentResolver pageableArgumentResolver; + + @Autowired + private ExceptionTranslator exceptionTranslator; + + @Autowired + private EntityManager em; + + private MockMvc restUserMockMvc; + + private User user; + + @Before + public void setup() { + UserResource userResource = new UserResource(userService, userRepository, mailService); + + this.restUserMockMvc = MockMvcBuilders.standaloneSetup(userResource) + .setCustomArgumentResolvers(pageableArgumentResolver) + .setControllerAdvice(exceptionTranslator) + .setMessageConverters(jacksonMessageConverter) + .build(); + } + + /** + * Create a User. + * + * This is a static method, as tests for other entities might also need it, + * if they test an entity which has a required relationship to the User entity. + */ + public static User createEntity(EntityManager em) { + User user = new User(); + user.setLogin(DEFAULT_LOGIN + RandomStringUtils.randomAlphabetic(5)); + user.setPassword(RandomStringUtils.random(60)); + user.setActivated(true); + user.setEmail(RandomStringUtils.randomAlphabetic(5) + DEFAULT_EMAIL); + user.setFirstName(DEFAULT_FIRSTNAME); + user.setLastName(DEFAULT_LASTNAME); + user.setImageUrl(DEFAULT_IMAGEURL); + user.setLangKey(DEFAULT_LANGKEY); + return user; + } + + @Before + public void initTest() { + user = createEntity(em); + user.setLogin(DEFAULT_LOGIN); + user.setEmail(DEFAULT_EMAIL); + } + + @Test + @Transactional + public void createUser() throws Exception { + int databaseSizeBeforeCreate = userRepository.findAll().size(); + + // Create the User + ManagedUserVM managedUserVM = new ManagedUserVM(); + managedUserVM.setLogin(DEFAULT_LOGIN); + managedUserVM.setPassword(DEFAULT_PASSWORD); + managedUserVM.setFirstName(DEFAULT_FIRSTNAME); + managedUserVM.setLastName(DEFAULT_LASTNAME); + managedUserVM.setEmail(DEFAULT_EMAIL); + managedUserVM.setActivated(true); + managedUserVM.setImageUrl(DEFAULT_IMAGEURL); + managedUserVM.setLangKey(DEFAULT_LANGKEY); + managedUserVM.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); + + restUserMockMvc.perform(post("/api/users") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(managedUserVM))) + .andExpect(status().isCreated()); + + // Validate the User in the database + List userList = userRepository.findAll(); + assertThat(userList).hasSize(databaseSizeBeforeCreate + 1); + User testUser = userList.get(userList.size() - 1); + assertThat(testUser.getLogin()).isEqualTo(DEFAULT_LOGIN); + assertThat(testUser.getFirstName()).isEqualTo(DEFAULT_FIRSTNAME); + assertThat(testUser.getLastName()).isEqualTo(DEFAULT_LASTNAME); + assertThat(testUser.getEmail()).isEqualTo(DEFAULT_EMAIL); + assertThat(testUser.getImageUrl()).isEqualTo(DEFAULT_IMAGEURL); + assertThat(testUser.getLangKey()).isEqualTo(DEFAULT_LANGKEY); + } + + @Test + @Transactional + public void createUserWithExistingId() throws Exception { + int databaseSizeBeforeCreate = userRepository.findAll().size(); + + ManagedUserVM managedUserVM = new ManagedUserVM(); + managedUserVM.setId(1L); + managedUserVM.setLogin(DEFAULT_LOGIN); + managedUserVM.setPassword(DEFAULT_PASSWORD); + managedUserVM.setFirstName(DEFAULT_FIRSTNAME); + managedUserVM.setLastName(DEFAULT_LASTNAME); + managedUserVM.setEmail(DEFAULT_EMAIL); + managedUserVM.setActivated(true); + managedUserVM.setImageUrl(DEFAULT_IMAGEURL); + managedUserVM.setLangKey(DEFAULT_LANGKEY); + managedUserVM.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); + + // An entity with an existing ID cannot be created, so this API call must fail + restUserMockMvc.perform(post("/api/users") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(managedUserVM))) + .andExpect(status().isBadRequest()); + + // Validate the User in the database + List userList = userRepository.findAll(); + assertThat(userList).hasSize(databaseSizeBeforeCreate); + } + + @Test + @Transactional + public void createUserWithExistingLogin() throws Exception { + // Initialize the database + userRepository.saveAndFlush(user); + int databaseSizeBeforeCreate = userRepository.findAll().size(); + + ManagedUserVM managedUserVM = new ManagedUserVM(); + managedUserVM.setLogin(DEFAULT_LOGIN);// this login should already be used + managedUserVM.setPassword(DEFAULT_PASSWORD); + managedUserVM.setFirstName(DEFAULT_FIRSTNAME); + managedUserVM.setLastName(DEFAULT_LASTNAME); + managedUserVM.setEmail("anothermail@localhost"); + managedUserVM.setActivated(true); + managedUserVM.setImageUrl(DEFAULT_IMAGEURL); + managedUserVM.setLangKey(DEFAULT_LANGKEY); + managedUserVM.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); + + // Create the User + restUserMockMvc.perform(post("/api/users") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(managedUserVM))) + .andExpect(status().isBadRequest()); + + // Validate the User in the database + List userList = userRepository.findAll(); + assertThat(userList).hasSize(databaseSizeBeforeCreate); + } + + @Test + @Transactional + public void createUserWithExistingEmail() throws Exception { + // Initialize the database + userRepository.saveAndFlush(user); + int databaseSizeBeforeCreate = userRepository.findAll().size(); + + ManagedUserVM managedUserVM = new ManagedUserVM(); + managedUserVM.setLogin("anotherlogin"); + managedUserVM.setPassword(DEFAULT_PASSWORD); + managedUserVM.setFirstName(DEFAULT_FIRSTNAME); + managedUserVM.setLastName(DEFAULT_LASTNAME); + managedUserVM.setEmail(DEFAULT_EMAIL);// this email should already be used + managedUserVM.setActivated(true); + managedUserVM.setImageUrl(DEFAULT_IMAGEURL); + managedUserVM.setLangKey(DEFAULT_LANGKEY); + managedUserVM.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); + + // Create the User + restUserMockMvc.perform(post("/api/users") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(managedUserVM))) + .andExpect(status().isBadRequest()); + + // Validate the User in the database + List userList = userRepository.findAll(); + assertThat(userList).hasSize(databaseSizeBeforeCreate); + } + + @Test + @Transactional + public void getAllUsers() throws Exception { + // Initialize the database + userRepository.saveAndFlush(user); + + // Get all the users + restUserMockMvc.perform(get("/api/users?sort=id,desc") + .accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) + .andExpect(jsonPath("$.[*].login").value(hasItem(DEFAULT_LOGIN))) + .andExpect(jsonPath("$.[*].firstName").value(hasItem(DEFAULT_FIRSTNAME))) + .andExpect(jsonPath("$.[*].lastName").value(hasItem(DEFAULT_LASTNAME))) + .andExpect(jsonPath("$.[*].email").value(hasItem(DEFAULT_EMAIL))) + .andExpect(jsonPath("$.[*].imageUrl").value(hasItem(DEFAULT_IMAGEURL))) + .andExpect(jsonPath("$.[*].langKey").value(hasItem(DEFAULT_LANGKEY))); + } + + @Test + @Transactional + public void getUser() throws Exception { + // Initialize the database + userRepository.saveAndFlush(user); + + // Get the user + restUserMockMvc.perform(get("/api/users/{login}", user.getLogin())) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) + .andExpect(jsonPath("$.login").value(user.getLogin())) + .andExpect(jsonPath("$.firstName").value(DEFAULT_FIRSTNAME)) + .andExpect(jsonPath("$.lastName").value(DEFAULT_LASTNAME)) + .andExpect(jsonPath("$.email").value(DEFAULT_EMAIL)) + .andExpect(jsonPath("$.imageUrl").value(DEFAULT_IMAGEURL)) + .andExpect(jsonPath("$.langKey").value(DEFAULT_LANGKEY)); + } + + @Test + @Transactional + public void getNonExistingUser() throws Exception { + restUserMockMvc.perform(get("/api/users/unknown")) + .andExpect(status().isNotFound()); + } + + @Test + @Transactional + public void updateUser() throws Exception { + // Initialize the database + userRepository.saveAndFlush(user); + int databaseSizeBeforeUpdate = userRepository.findAll().size(); + + // Update the user + User updatedUser = userRepository.findById(user.getId()).get(); + + ManagedUserVM managedUserVM = new ManagedUserVM(); + managedUserVM.setId(updatedUser.getId()); + managedUserVM.setLogin(updatedUser.getLogin()); + managedUserVM.setPassword(UPDATED_PASSWORD); + managedUserVM.setFirstName(UPDATED_FIRSTNAME); + managedUserVM.setLastName(UPDATED_LASTNAME); + managedUserVM.setEmail(UPDATED_EMAIL); + managedUserVM.setActivated(updatedUser.getActivated()); + managedUserVM.setImageUrl(UPDATED_IMAGEURL); + managedUserVM.setLangKey(UPDATED_LANGKEY); + managedUserVM.setCreatedBy(updatedUser.getCreatedBy()); + managedUserVM.setCreatedDate(updatedUser.getCreatedDate()); + managedUserVM.setLastModifiedBy(updatedUser.getLastModifiedBy()); + managedUserVM.setLastModifiedDate(updatedUser.getLastModifiedDate()); + managedUserVM.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); + + restUserMockMvc.perform(put("/api/users") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(managedUserVM))) + .andExpect(status().isOk()); + + // Validate the User in the database + List userList = userRepository.findAll(); + assertThat(userList).hasSize(databaseSizeBeforeUpdate); + User testUser = userList.get(userList.size() - 1); + assertThat(testUser.getFirstName()).isEqualTo(UPDATED_FIRSTNAME); + assertThat(testUser.getLastName()).isEqualTo(UPDATED_LASTNAME); + assertThat(testUser.getEmail()).isEqualTo(UPDATED_EMAIL); + assertThat(testUser.getImageUrl()).isEqualTo(UPDATED_IMAGEURL); + assertThat(testUser.getLangKey()).isEqualTo(UPDATED_LANGKEY); + } + + @Test + @Transactional + public void updateUserLogin() throws Exception { + // Initialize the database + userRepository.saveAndFlush(user); + int databaseSizeBeforeUpdate = userRepository.findAll().size(); + + // Update the user + User updatedUser = userRepository.findById(user.getId()).get(); + + ManagedUserVM managedUserVM = new ManagedUserVM(); + managedUserVM.setId(updatedUser.getId()); + managedUserVM.setLogin(UPDATED_LOGIN); + managedUserVM.setPassword(UPDATED_PASSWORD); + managedUserVM.setFirstName(UPDATED_FIRSTNAME); + managedUserVM.setLastName(UPDATED_LASTNAME); + managedUserVM.setEmail(UPDATED_EMAIL); + managedUserVM.setActivated(updatedUser.getActivated()); + managedUserVM.setImageUrl(UPDATED_IMAGEURL); + managedUserVM.setLangKey(UPDATED_LANGKEY); + managedUserVM.setCreatedBy(updatedUser.getCreatedBy()); + managedUserVM.setCreatedDate(updatedUser.getCreatedDate()); + managedUserVM.setLastModifiedBy(updatedUser.getLastModifiedBy()); + managedUserVM.setLastModifiedDate(updatedUser.getLastModifiedDate()); + managedUserVM.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); + + restUserMockMvc.perform(put("/api/users") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(managedUserVM))) + .andExpect(status().isOk()); + + // Validate the User in the database + List userList = userRepository.findAll(); + assertThat(userList).hasSize(databaseSizeBeforeUpdate); + User testUser = userList.get(userList.size() - 1); + assertThat(testUser.getLogin()).isEqualTo(UPDATED_LOGIN); + assertThat(testUser.getFirstName()).isEqualTo(UPDATED_FIRSTNAME); + assertThat(testUser.getLastName()).isEqualTo(UPDATED_LASTNAME); + assertThat(testUser.getEmail()).isEqualTo(UPDATED_EMAIL); + assertThat(testUser.getImageUrl()).isEqualTo(UPDATED_IMAGEURL); + assertThat(testUser.getLangKey()).isEqualTo(UPDATED_LANGKEY); + } + + @Test + @Transactional + public void updateUserExistingEmail() throws Exception { + // Initialize the database with 2 users + userRepository.saveAndFlush(user); + + User anotherUser = new User(); + anotherUser.setLogin("jhipster"); + anotherUser.setPassword(RandomStringUtils.random(60)); + anotherUser.setActivated(true); + anotherUser.setEmail("jhipster@localhost"); + anotherUser.setFirstName("java"); + anotherUser.setLastName("hipster"); + anotherUser.setImageUrl(""); + anotherUser.setLangKey("en"); + userRepository.saveAndFlush(anotherUser); + + // Update the user + User updatedUser = userRepository.findById(user.getId()).get(); + + ManagedUserVM managedUserVM = new ManagedUserVM(); + managedUserVM.setId(updatedUser.getId()); + managedUserVM.setLogin(updatedUser.getLogin()); + managedUserVM.setPassword(updatedUser.getPassword()); + managedUserVM.setFirstName(updatedUser.getFirstName()); + managedUserVM.setLastName(updatedUser.getLastName()); + managedUserVM.setEmail("jhipster@localhost");// this email should already be used by anotherUser + managedUserVM.setActivated(updatedUser.getActivated()); + managedUserVM.setImageUrl(updatedUser.getImageUrl()); + managedUserVM.setLangKey(updatedUser.getLangKey()); + managedUserVM.setCreatedBy(updatedUser.getCreatedBy()); + managedUserVM.setCreatedDate(updatedUser.getCreatedDate()); + managedUserVM.setLastModifiedBy(updatedUser.getLastModifiedBy()); + managedUserVM.setLastModifiedDate(updatedUser.getLastModifiedDate()); + managedUserVM.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); + + restUserMockMvc.perform(put("/api/users") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(managedUserVM))) + .andExpect(status().isBadRequest()); + } + + @Test + @Transactional + public void updateUserExistingLogin() throws Exception { + // Initialize the database + userRepository.saveAndFlush(user); + + User anotherUser = new User(); + anotherUser.setLogin("jhipster"); + anotherUser.setPassword(RandomStringUtils.random(60)); + anotherUser.setActivated(true); + anotherUser.setEmail("jhipster@localhost"); + anotherUser.setFirstName("java"); + anotherUser.setLastName("hipster"); + anotherUser.setImageUrl(""); + anotherUser.setLangKey("en"); + userRepository.saveAndFlush(anotherUser); + + // Update the user + User updatedUser = userRepository.findById(user.getId()).get(); + + ManagedUserVM managedUserVM = new ManagedUserVM(); + managedUserVM.setId(updatedUser.getId()); + managedUserVM.setLogin("jhipster");// this login should already be used by anotherUser + managedUserVM.setPassword(updatedUser.getPassword()); + managedUserVM.setFirstName(updatedUser.getFirstName()); + managedUserVM.setLastName(updatedUser.getLastName()); + managedUserVM.setEmail(updatedUser.getEmail()); + managedUserVM.setActivated(updatedUser.getActivated()); + managedUserVM.setImageUrl(updatedUser.getImageUrl()); + managedUserVM.setLangKey(updatedUser.getLangKey()); + managedUserVM.setCreatedBy(updatedUser.getCreatedBy()); + managedUserVM.setCreatedDate(updatedUser.getCreatedDate()); + managedUserVM.setLastModifiedBy(updatedUser.getLastModifiedBy()); + managedUserVM.setLastModifiedDate(updatedUser.getLastModifiedDate()); + managedUserVM.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); + + restUserMockMvc.perform(put("/api/users") + .contentType(TestUtil.APPLICATION_JSON_UTF8) + .content(TestUtil.convertObjectToJsonBytes(managedUserVM))) + .andExpect(status().isBadRequest()); + } + + @Test + @Transactional + public void deleteUser() throws Exception { + // Initialize the database + userRepository.saveAndFlush(user); + int databaseSizeBeforeDelete = userRepository.findAll().size(); + + // Delete the user + restUserMockMvc.perform(delete("/api/users/{login}", user.getLogin()) + .accept(TestUtil.APPLICATION_JSON_UTF8)) + .andExpect(status().isOk()); + + // Validate the database is empty + List userList = userRepository.findAll(); + assertThat(userList).hasSize(databaseSizeBeforeDelete - 1); + } + + @Test + @Transactional + public void getAllAuthorities() throws Exception { + restUserMockMvc.perform(get("/api/users/authorities") + .accept(TestUtil.APPLICATION_JSON_UTF8) + .contentType(TestUtil.APPLICATION_JSON_UTF8)) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) + .andExpect(jsonPath("$").isArray()) + .andExpect(jsonPath("$").value(hasItems(AuthoritiesConstants.USER, AuthoritiesConstants.ADMIN))); + } + + @Test + @Transactional + public void testUserEquals() throws Exception { + TestUtil.equalsVerifier(User.class); + User user1 = new User(); + user1.setId(1L); + User user2 = new User(); + user2.setId(user1.getId()); + assertThat(user1).isEqualTo(user2); + user2.setId(2L); + assertThat(user1).isNotEqualTo(user2); + user1.setId(null); + assertThat(user1).isNotEqualTo(user2); + } + + @Test + public void testUserDTOtoUser() { + UserDTO userDTO = new UserDTO(); + userDTO.setId(DEFAULT_ID); + userDTO.setLogin(DEFAULT_LOGIN); + userDTO.setFirstName(DEFAULT_FIRSTNAME); + userDTO.setLastName(DEFAULT_LASTNAME); + userDTO.setEmail(DEFAULT_EMAIL); + userDTO.setActivated(true); + userDTO.setImageUrl(DEFAULT_IMAGEURL); + userDTO.setLangKey(DEFAULT_LANGKEY); + userDTO.setCreatedBy(DEFAULT_LOGIN); + userDTO.setLastModifiedBy(DEFAULT_LOGIN); + userDTO.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); + + User user = userMapper.userDTOToUser(userDTO); + assertThat(user.getId()).isEqualTo(DEFAULT_ID); + assertThat(user.getLogin()).isEqualTo(DEFAULT_LOGIN); + assertThat(user.getFirstName()).isEqualTo(DEFAULT_FIRSTNAME); + assertThat(user.getLastName()).isEqualTo(DEFAULT_LASTNAME); + assertThat(user.getEmail()).isEqualTo(DEFAULT_EMAIL); + assertThat(user.getActivated()).isEqualTo(true); + assertThat(user.getImageUrl()).isEqualTo(DEFAULT_IMAGEURL); + assertThat(user.getLangKey()).isEqualTo(DEFAULT_LANGKEY); + assertThat(user.getCreatedBy()).isNull(); + assertThat(user.getCreatedDate()).isNotNull(); + assertThat(user.getLastModifiedBy()).isNull(); + assertThat(user.getLastModifiedDate()).isNotNull(); + assertThat(user.getAuthorities()).extracting("name").containsExactly(AuthoritiesConstants.USER); + } + + @Test + public void testUserToUserDTO() { + user.setId(DEFAULT_ID); + user.setCreatedBy(DEFAULT_LOGIN); + user.setCreatedDate(Instant.now()); + user.setLastModifiedBy(DEFAULT_LOGIN); + user.setLastModifiedDate(Instant.now()); + Set authorities = new HashSet<>(); + Authority authority = new Authority(); + authority.setName(AuthoritiesConstants.USER); + authorities.add(authority); + user.setAuthorities(authorities); + + UserDTO userDTO = userMapper.userToUserDTO(user); + + assertThat(userDTO.getId()).isEqualTo(DEFAULT_ID); + assertThat(userDTO.getLogin()).isEqualTo(DEFAULT_LOGIN); + assertThat(userDTO.getFirstName()).isEqualTo(DEFAULT_FIRSTNAME); + assertThat(userDTO.getLastName()).isEqualTo(DEFAULT_LASTNAME); + assertThat(userDTO.getEmail()).isEqualTo(DEFAULT_EMAIL); + assertThat(userDTO.isActivated()).isEqualTo(true); + assertThat(userDTO.getImageUrl()).isEqualTo(DEFAULT_IMAGEURL); + assertThat(userDTO.getLangKey()).isEqualTo(DEFAULT_LANGKEY); + assertThat(userDTO.getCreatedBy()).isEqualTo(DEFAULT_LOGIN); + assertThat(userDTO.getCreatedDate()).isEqualTo(user.getCreatedDate()); + assertThat(userDTO.getLastModifiedBy()).isEqualTo(DEFAULT_LOGIN); + assertThat(userDTO.getLastModifiedDate()).isEqualTo(user.getLastModifiedDate()); + assertThat(userDTO.getAuthorities()).containsExactly(AuthoritiesConstants.USER); + assertThat(userDTO.toString()).isNotNull(); + } + + @Test + public void testAuthorityEquals() { + Authority authorityA = new Authority(); + assertThat(authorityA).isEqualTo(authorityA); + assertThat(authorityA).isNotEqualTo(null); + assertThat(authorityA).isNotEqualTo(new Object()); + assertThat(authorityA.hashCode()).isEqualTo(0); + assertThat(authorityA.toString()).isNotNull(); + + Authority authorityB = new Authority(); + assertThat(authorityA).isEqualTo(authorityB); + + authorityB.setName(AuthoritiesConstants.ADMIN); + assertThat(authorityA).isNotEqualTo(authorityB); + + authorityA.setName(AuthoritiesConstants.USER); + assertThat(authorityA).isNotEqualTo(authorityB); + + authorityB.setName(AuthoritiesConstants.USER); + assertThat(authorityA).isEqualTo(authorityB); + assertThat(authorityA.hashCode()).isEqualTo(authorityB.hashCode()); + } +} diff --git a/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/web/rest/errors/ExceptionTranslatorIT.java b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/web/rest/errors/ExceptionTranslatorIT.java new file mode 100644 index 000000000000..2ecbe7254ed1 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/web/rest/errors/ExceptionTranslatorIT.java @@ -0,0 +1,125 @@ +package com.baeldung.jhipster6.web.rest.errors; + +import com.baeldung.jhipster6.BookstoreApp; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.http.MediaType; +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; + +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +/** + * Integration tests {@link ExceptionTranslator} controller advice. + */ +@SpringBootTest(classes = BookstoreApp.class) +public class ExceptionTranslatorIT { + + @Autowired + private ExceptionTranslatorTestController controller; + + @Autowired + private ExceptionTranslator exceptionTranslator; + + @Autowired + private MappingJackson2HttpMessageConverter jacksonMessageConverter; + + private MockMvc mockMvc; + + @BeforeEach + public void setup() { + mockMvc = MockMvcBuilders.standaloneSetup(controller) + .setControllerAdvice(exceptionTranslator) + .setMessageConverters(jacksonMessageConverter) + .build(); + } + + @Test + public void testConcurrencyFailure() throws Exception { + mockMvc.perform(get("/test/concurrency-failure")) + .andExpect(status().isConflict()) + .andExpect(content().contentType(MediaType.APPLICATION_PROBLEM_JSON)) + .andExpect(jsonPath("$.message").value(ErrorConstants.ERR_CONCURRENCY_FAILURE)); + } + + @Test + public void testMethodArgumentNotValid() throws Exception { + mockMvc.perform(post("/test/method-argument").content("{}").contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isBadRequest()) + .andExpect(content().contentType(MediaType.APPLICATION_PROBLEM_JSON)) + .andExpect(jsonPath("$.message").value(ErrorConstants.ERR_VALIDATION)) + .andExpect(jsonPath("$.fieldErrors.[0].objectName").value("testDTO")) + .andExpect(jsonPath("$.fieldErrors.[0].field").value("test")) + .andExpect(jsonPath("$.fieldErrors.[0].message").value("NotNull")); + } + + @Test + public void testMissingServletRequestPartException() throws Exception { + mockMvc.perform(get("/test/missing-servlet-request-part")) + .andExpect(status().isBadRequest()) + .andExpect(content().contentType(MediaType.APPLICATION_PROBLEM_JSON)) + .andExpect(jsonPath("$.message").value("error.http.400")); + } + + @Test + public void testMissingServletRequestParameterException() throws Exception { + mockMvc.perform(get("/test/missing-servlet-request-parameter")) + .andExpect(status().isBadRequest()) + .andExpect(content().contentType(MediaType.APPLICATION_PROBLEM_JSON)) + .andExpect(jsonPath("$.message").value("error.http.400")); + } + + @Test + public void testAccessDenied() throws Exception { + mockMvc.perform(get("/test/access-denied")) + .andExpect(status().isForbidden()) + .andExpect(content().contentType(MediaType.APPLICATION_PROBLEM_JSON)) + .andExpect(jsonPath("$.message").value("error.http.403")) + .andExpect(jsonPath("$.detail").value("test access denied!")); + } + + @Test + public void testUnauthorized() throws Exception { + mockMvc.perform(get("/test/unauthorized")) + .andExpect(status().isUnauthorized()) + .andExpect(content().contentType(MediaType.APPLICATION_PROBLEM_JSON)) + .andExpect(jsonPath("$.message").value("error.http.401")) + .andExpect(jsonPath("$.path").value("/test/unauthorized")) + .andExpect(jsonPath("$.detail").value("test authentication failed!")); + } + + @Test + public void testMethodNotSupported() throws Exception { + mockMvc.perform(post("/test/access-denied")) + .andExpect(status().isMethodNotAllowed()) + .andExpect(content().contentType(MediaType.APPLICATION_PROBLEM_JSON)) + .andExpect(jsonPath("$.message").value("error.http.405")) + .andExpect(jsonPath("$.detail").value("Request method 'POST' not supported")); + } + + @Test + public void testExceptionWithResponseStatus() throws Exception { + mockMvc.perform(get("/test/response-status")) + .andExpect(status().isBadRequest()) + .andExpect(content().contentType(MediaType.APPLICATION_PROBLEM_JSON)) + .andExpect(jsonPath("$.message").value("error.http.400")) + .andExpect(jsonPath("$.title").value("test response status")); + } + + @Test + public void testInternalServerError() throws Exception { + mockMvc.perform(get("/test/internal-server-error")) + .andExpect(status().isInternalServerError()) + .andExpect(content().contentType(MediaType.APPLICATION_PROBLEM_JSON)) + .andExpect(jsonPath("$.message").value("error.http.500")) + .andExpect(jsonPath("$.title").value("Internal Server Error")); + } + +} diff --git a/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/web/rest/errors/ExceptionTranslatorIntegrationTest.java b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/web/rest/errors/ExceptionTranslatorIntegrationTest.java new file mode 100644 index 000000000000..7b25b314edc5 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/web/rest/errors/ExceptionTranslatorIntegrationTest.java @@ -0,0 +1,150 @@ +package com.baeldung.jhipster6.web.rest.errors; + +import com.baeldung.jhipster6.BookstoreApp; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.http.MediaType; +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; + +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +/** + * Test class for the ExceptionTranslator controller advice. + * + * @see ExceptionTranslator + */ +@RunWith(SpringRunner.class) +@SpringBootTest(classes = BookstoreApp.class) +public class ExceptionTranslatorIntegrationTest { + + @Autowired + private ExceptionTranslatorTestController controller; + + @Autowired + private ExceptionTranslator exceptionTranslator; + + @Autowired + private MappingJackson2HttpMessageConverter jacksonMessageConverter; + + private MockMvc mockMvc; + + @Before + public void setup() { + mockMvc = MockMvcBuilders.standaloneSetup(controller) + .setControllerAdvice(exceptionTranslator) + .setMessageConverters(jacksonMessageConverter) + .build(); + } + + @Test + public void testConcurrencyFailure() throws Exception { + mockMvc.perform(get("/test/concurrency-failure")) + .andExpect(status().isConflict()) + .andExpect(content().contentType(MediaType.APPLICATION_PROBLEM_JSON)) + .andExpect(jsonPath("$.message").value(ErrorConstants.ERR_CONCURRENCY_FAILURE)); + } + + @Test + public void testMethodArgumentNotValid() throws Exception { + mockMvc.perform(post("/test/method-argument").content("{}").contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isBadRequest()) + .andExpect(content().contentType(MediaType.APPLICATION_PROBLEM_JSON)) + .andExpect(jsonPath("$.message").value(ErrorConstants.ERR_VALIDATION)) + .andExpect(jsonPath("$.fieldErrors.[0].objectName").value("testDTO")) + .andExpect(jsonPath("$.fieldErrors.[0].field").value("test")) + .andExpect(jsonPath("$.fieldErrors.[0].message").value("NotNull")); + } + + @Test + public void testParameterizedError() throws Exception { + mockMvc.perform(get("/test/parameterized-error")) + .andExpect(status().isBadRequest()) + .andExpect(content().contentType(MediaType.APPLICATION_PROBLEM_JSON)) + .andExpect(jsonPath("$.message").value("test parameterized error")) + .andExpect(jsonPath("$.params.param0").value("param0_value")) + .andExpect(jsonPath("$.params.param1").value("param1_value")); + } + + @Test + public void testParameterizedError2() throws Exception { + mockMvc.perform(get("/test/parameterized-error2")) + .andExpect(status().isBadRequest()) + .andExpect(content().contentType(MediaType.APPLICATION_PROBLEM_JSON)) + .andExpect(jsonPath("$.message").value("test parameterized error")) + .andExpect(jsonPath("$.params.foo").value("foo_value")) + .andExpect(jsonPath("$.params.bar").value("bar_value")); + } + + @Test + public void testMissingServletRequestPartException() throws Exception { + mockMvc.perform(get("/test/missing-servlet-request-part")) + .andExpect(status().isBadRequest()) + .andExpect(content().contentType(MediaType.APPLICATION_PROBLEM_JSON)) + .andExpect(jsonPath("$.message").value("error.http.400")); + } + + @Test + public void testMissingServletRequestParameterException() throws Exception { + mockMvc.perform(get("/test/missing-servlet-request-parameter")) + .andExpect(status().isBadRequest()) + .andExpect(content().contentType(MediaType.APPLICATION_PROBLEM_JSON)) + .andExpect(jsonPath("$.message").value("error.http.400")); + } + + @Test + public void testAccessDenied() throws Exception { + mockMvc.perform(get("/test/access-denied")) + .andExpect(status().isForbidden()) + .andExpect(content().contentType(MediaType.APPLICATION_PROBLEM_JSON)) + .andExpect(jsonPath("$.message").value("error.http.403")) + .andExpect(jsonPath("$.detail").value("test access denied!")); + } + + @Test + public void testUnauthorized() throws Exception { + mockMvc.perform(get("/test/unauthorized")) + .andExpect(status().isUnauthorized()) + .andExpect(content().contentType(MediaType.APPLICATION_PROBLEM_JSON)) + .andExpect(jsonPath("$.message").value("error.http.401")) + .andExpect(jsonPath("$.path").value("/test/unauthorized")) + .andExpect(jsonPath("$.detail").value("test authentication failed!")); + } + + @Test + public void testMethodNotSupported() throws Exception { + mockMvc.perform(post("/test/access-denied")) + .andExpect(status().isMethodNotAllowed()) + .andExpect(content().contentType(MediaType.APPLICATION_PROBLEM_JSON)) + .andExpect(jsonPath("$.message").value("error.http.405")) + .andExpect(jsonPath("$.detail").value("Request method 'POST' not supported")); + } + + @Test + public void testExceptionWithResponseStatus() throws Exception { + mockMvc.perform(get("/test/response-status")) + .andExpect(status().isBadRequest()) + .andExpect(content().contentType(MediaType.APPLICATION_PROBLEM_JSON)) + .andExpect(jsonPath("$.message").value("error.http.400")) + .andExpect(jsonPath("$.title").value("test response status")); + } + + @Test + public void testInternalServerError() throws Exception { + mockMvc.perform(get("/test/internal-server-error")) + .andExpect(status().isInternalServerError()) + .andExpect(content().contentType(MediaType.APPLICATION_PROBLEM_JSON)) + .andExpect(jsonPath("$.message").value("error.http.500")) + .andExpect(jsonPath("$.title").value("Internal Server Error")); + } + +} diff --git a/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/web/rest/errors/ExceptionTranslatorTestController.java b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/web/rest/errors/ExceptionTranslatorTestController.java new file mode 100644 index 000000000000..a0e6e0317804 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/web/rest/errors/ExceptionTranslatorTestController.java @@ -0,0 +1,86 @@ +package com.baeldung.jhipster6.web.rest.errors; + +import org.springframework.dao.ConcurrencyFailureException; +import org.springframework.http.HttpStatus; +import org.springframework.security.access.AccessDeniedException; +import org.springframework.security.authentication.BadCredentialsException; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import javax.validation.constraints.NotNull; +import java.util.HashMap; +import java.util.Map; + +@RestController +public class ExceptionTranslatorTestController { + + @GetMapping("/test/concurrency-failure") + public void concurrencyFailure() { + throw new ConcurrencyFailureException("test concurrency failure"); + } + + @PostMapping("/test/method-argument") + public void methodArgument(@Valid @RequestBody TestDTO testDTO) { + } + + @GetMapping("/test/parameterized-error") + public void parameterizedError() { + throw new CustomParameterizedException("test parameterized error", "param0_value", "param1_value"); + } + + @GetMapping("/test/parameterized-error2") + public void parameterizedError2() { + Map params = new HashMap<>(); + params.put("foo", "foo_value"); + params.put("bar", "bar_value"); + throw new CustomParameterizedException("test parameterized error", params); + } + + @GetMapping("/test/missing-servlet-request-part") + public void missingServletRequestPartException(@RequestPart String part) { + } + + @GetMapping("/test/missing-servlet-request-parameter") + public void missingServletRequestParameterException(@RequestParam String param) { + } + + @GetMapping("/test/access-denied") + public void accessdenied() { + throw new AccessDeniedException("test access denied!"); + } + + @GetMapping("/test/unauthorized") + public void unauthorized() { + throw new BadCredentialsException("test authentication failed!"); + } + + @GetMapping("/test/response-status") + public void exceptionWithReponseStatus() { + throw new TestResponseStatusException(); + } + + @GetMapping("/test/internal-server-error") + public void internalServerError() { + throw new RuntimeException(); + } + + public static class TestDTO { + + @NotNull + private String test; + + public String getTest() { + return test; + } + + public void setTest(String test) { + this.test = test; + } + } + + @ResponseStatus(value = HttpStatus.BAD_REQUEST, reason = "test response status") + @SuppressWarnings("serial") + public static class TestResponseStatusException extends RuntimeException { + } + +} diff --git a/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/web/rest/util/PaginationUtilUnitTest.java b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/web/rest/util/PaginationUtilUnitTest.java new file mode 100644 index 000000000000..da7c2ae1f52c --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/java/com/baeldung/jhipster6/web/rest/util/PaginationUtilUnitTest.java @@ -0,0 +1,44 @@ +package com.baeldung.jhipster6.web.rest.util; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import java.util.ArrayList; +import java.util.List; + +import org.junit.Test; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.PageRequest; +import org.springframework.http.HttpHeaders; + +/** + * Tests based on parsing algorithm in app/components/util/pagination-util.service.js + * + * @see PaginationUtil + */ +public class PaginationUtilUnitTest { + + @Test + public void generatePaginationHttpHeadersTest() { + String baseUrl = "/api/_search/example"; + List content = new ArrayList<>(); + Page page = new PageImpl<>(content, PageRequest.of(6, 50), 400L); + HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(page, baseUrl); + List strHeaders = headers.get(HttpHeaders.LINK); + assertNotNull(strHeaders); + assertTrue(strHeaders.size() == 1); + String headerData = strHeaders.get(0); + assertTrue(headerData.split(",").length == 4); + String expectedData = "; rel=\"next\"," + + "; rel=\"prev\"," + + "; rel=\"last\"," + + "; rel=\"first\""; + assertEquals(expectedData, headerData); + List xTotalCountHeaders = headers.get("X-Total-Count"); + assertTrue(xTotalCountHeaders.size() == 1); + assertTrue(Long.valueOf(xTotalCountHeaders.get(0)).equals(400L)); + } + +} diff --git a/jhipster-6/bookstore-monolith/src/test/javascript/jest-global-mocks.ts b/jhipster-6/bookstore-monolith/src/test/javascript/jest-global-mocks.ts new file mode 100644 index 000000000000..a99825985793 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/javascript/jest-global-mocks.ts @@ -0,0 +1,15 @@ +const mock = () => { + let storage = {}; + return { + getItem: key => (key in storage ? storage[key] : null), + setItem: (key, value) => (storage[key] = value || ''), + removeItem: key => delete storage[key], + clear: () => (storage = {}) + }; +}; + +Object.defineProperty(window, 'localStorage', { value: mock() }); +Object.defineProperty(window, 'sessionStorage', { value: mock() }); +Object.defineProperty(window, 'getComputedStyle', { + value: () => ['-webkit-appearance'] +}); diff --git a/jhipster-6/bookstore-monolith/src/test/javascript/jest.conf.js b/jhipster-6/bookstore-monolith/src/test/javascript/jest.conf.js new file mode 100644 index 000000000000..05054a94b82f --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/javascript/jest.conf.js @@ -0,0 +1,26 @@ +module.exports = { + preset: 'jest-preset-angular', + setupTestFrameworkScriptFile: '/src/test/javascript/jest.ts', + coverageDirectory: '/target/test-results/', + globals: { + 'ts-jest': { + tsConfigFile: 'tsconfig.json' + }, + __TRANSFORM_HTML__: true + }, + coveragePathIgnorePatterns: [ + '/src/test/javascript' + ], + moduleNameMapper: { + 'app/(.*)': '/src/main/webapp/app/$1' + }, + reporters: [ + 'default', + [ 'jest-junit', { output: './target/test-results/TESTS-results-jest.xml' } ] + ], + testResultsProcessor: 'jest-sonar-reporter', + transformIgnorePatterns: ['node_modules/(?!@angular/common/locales)'], + testMatch: ['/src/test/javascript/spec/**/+(*.)+(spec.ts)'], + rootDir: '../../../', + testURL: "http://localhost/" +}; diff --git a/jhipster-6/bookstore-monolith/src/test/javascript/jest.ts b/jhipster-6/bookstore-monolith/src/test/javascript/jest.ts new file mode 100644 index 000000000000..904329f538cb --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/javascript/jest.ts @@ -0,0 +1,2 @@ +import 'jest-preset-angular'; +import './jest-global-mocks'; diff --git a/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/account/activate/activate.component.spec.ts b/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/account/activate/activate.component.spec.ts new file mode 100644 index 000000000000..87a550e8ef03 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/account/activate/activate.component.spec.ts @@ -0,0 +1,72 @@ +import { TestBed, async, tick, fakeAsync, inject } from '@angular/core/testing'; +import { ActivatedRoute } from '@angular/router'; +import { Observable, of, throwError } from 'rxjs'; + +import { BookstoreTestModule } from '../../../test.module'; +import { MockActivatedRoute } from '../../../helpers/mock-route.service'; +import { ActivateService } from 'app/account/activate/activate.service'; +import { ActivateComponent } from 'app/account/activate/activate.component'; + +describe('Component Tests', () => { + describe('ActivateComponent', () => { + let comp: ActivateComponent; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + imports: [BookstoreTestModule], + declarations: [ActivateComponent], + providers: [ + { + provide: ActivatedRoute, + useValue: new MockActivatedRoute({ key: 'ABC123' }) + } + ] + }) + .overrideTemplate(ActivateComponent, '') + .compileComponents(); + })); + + beforeEach(() => { + const fixture = TestBed.createComponent(ActivateComponent); + comp = fixture.componentInstance; + }); + + it('calls activate.get with the key from params', inject( + [ActivateService], + fakeAsync((service: ActivateService) => { + spyOn(service, 'get').and.returnValue(of()); + + comp.ngOnInit(); + tick(); + + expect(service.get).toHaveBeenCalledWith('ABC123'); + }) + )); + + it('should set set success to OK upon successful activation', inject( + [ActivateService], + fakeAsync((service: ActivateService) => { + spyOn(service, 'get').and.returnValue(of({})); + + comp.ngOnInit(); + tick(); + + expect(comp.error).toBe(null); + expect(comp.success).toEqual('OK'); + }) + )); + + it('should set set error to ERROR upon activation failure', inject( + [ActivateService], + fakeAsync((service: ActivateService) => { + spyOn(service, 'get').and.returnValue(throwError('ERROR')); + + comp.ngOnInit(); + tick(); + + expect(comp.error).toBe('ERROR'); + expect(comp.success).toEqual(null); + }) + )); + }); +}); diff --git a/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/account/password-reset/finish/password-reset-finish.component.spec.ts b/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/account/password-reset/finish/password-reset-finish.component.spec.ts new file mode 100644 index 000000000000..36a3b8db65e0 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/account/password-reset/finish/password-reset-finish.component.spec.ts @@ -0,0 +1,119 @@ +import { ComponentFixture, TestBed, inject, tick, fakeAsync } from '@angular/core/testing'; +import { Observable, of, throwError } from 'rxjs'; +import { Renderer, ElementRef } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; + +import { BookstoreTestModule } from '../../../../test.module'; +import { PasswordResetFinishComponent } from 'app/account/password-reset/finish/password-reset-finish.component'; +import { PasswordResetFinishService } from 'app/account/password-reset/finish/password-reset-finish.service'; +import { MockActivatedRoute } from '../../../../helpers/mock-route.service'; + +describe('Component Tests', () => { + describe('PasswordResetFinishComponent', () => { + let fixture: ComponentFixture; + let comp: PasswordResetFinishComponent; + + beforeEach(() => { + fixture = TestBed.configureTestingModule({ + imports: [BookstoreTestModule], + declarations: [PasswordResetFinishComponent], + providers: [ + { + provide: ActivatedRoute, + useValue: new MockActivatedRoute({ key: 'XYZPDQ' }) + }, + { + provide: Renderer, + useValue: { + invokeElementMethod(renderElement: any, methodName: string, args?: any[]) {} + } + }, + { + provide: ElementRef, + useValue: new ElementRef(null) + } + ] + }) + .overrideTemplate(PasswordResetFinishComponent, '') + .createComponent(PasswordResetFinishComponent); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(PasswordResetFinishComponent); + comp = fixture.componentInstance; + comp.ngOnInit(); + }); + + it('should define its initial state', () => { + comp.ngOnInit(); + + expect(comp.keyMissing).toBeFalsy(); + expect(comp.key).toEqual('XYZPDQ'); + expect(comp.resetAccount).toEqual({}); + }); + + it('sets focus after the view has been initialized', inject([ElementRef], (elementRef: ElementRef) => { + const element = fixture.nativeElement; + const node = { + focus() {} + }; + + elementRef.nativeElement = element; + spyOn(element, 'querySelector').and.returnValue(node); + spyOn(node, 'focus'); + + comp.ngAfterViewInit(); + + expect(element.querySelector).toHaveBeenCalledWith('#password'); + expect(node.focus).toHaveBeenCalled(); + })); + + it('should ensure the two passwords entered match', () => { + comp.resetAccount.password = 'password'; + comp.confirmPassword = 'non-matching'; + + comp.finishReset(); + + expect(comp.doNotMatch).toEqual('ERROR'); + }); + + it('should update success to OK after resetting password', inject( + [PasswordResetFinishService], + fakeAsync((service: PasswordResetFinishService) => { + spyOn(service, 'save').and.returnValue(of({})); + + comp.resetAccount.password = 'password'; + comp.confirmPassword = 'password'; + + comp.finishReset(); + tick(); + + expect(service.save).toHaveBeenCalledWith({ + key: 'XYZPDQ', + newPassword: 'password' + }); + expect(comp.success).toEqual('OK'); + }) + )); + + it('should notify of generic error', inject( + [PasswordResetFinishService], + fakeAsync((service: PasswordResetFinishService) => { + spyOn(service, 'save').and.returnValue(throwError('ERROR')); + + comp.resetAccount.password = 'password'; + comp.confirmPassword = 'password'; + + comp.finishReset(); + tick(); + + expect(service.save).toHaveBeenCalledWith({ + key: 'XYZPDQ', + newPassword: 'password' + }); + expect(comp.success).toBeNull(); + expect(comp.error).toEqual('ERROR'); + }) + )); + }); +}); diff --git a/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/account/password-reset/init/password-reset-init.component.spec.ts b/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/account/password-reset/init/password-reset-init.component.spec.ts new file mode 100644 index 000000000000..f121a4dd2792 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/account/password-reset/init/password-reset-init.component.spec.ts @@ -0,0 +1,110 @@ +import { ComponentFixture, TestBed, inject } from '@angular/core/testing'; +import { Renderer, ElementRef } from '@angular/core'; +import { Observable, of, throwError } from 'rxjs'; + +import { BookstoreTestModule } from '../../../../test.module'; +import { PasswordResetInitComponent } from 'app/account/password-reset/init/password-reset-init.component'; +import { PasswordResetInitService } from 'app/account/password-reset/init/password-reset-init.service'; +import { EMAIL_NOT_FOUND_TYPE } from 'app/shared'; + +describe('Component Tests', () => { + describe('PasswordResetInitComponent', () => { + let fixture: ComponentFixture; + let comp: PasswordResetInitComponent; + + beforeEach(() => { + fixture = TestBed.configureTestingModule({ + imports: [BookstoreTestModule], + declarations: [PasswordResetInitComponent], + providers: [ + { + provide: Renderer, + useValue: { + invokeElementMethod(renderElement: any, methodName: string, args?: any[]) {} + } + }, + { + provide: ElementRef, + useValue: new ElementRef(null) + } + ] + }) + .overrideTemplate(PasswordResetInitComponent, '') + .createComponent(PasswordResetInitComponent); + comp = fixture.componentInstance; + comp.ngOnInit(); + }); + + it('should define its initial state', () => { + expect(comp.success).toBeUndefined(); + expect(comp.error).toBeUndefined(); + expect(comp.errorEmailNotExists).toBeUndefined(); + expect(comp.resetAccount).toEqual({}); + }); + + it('sets focus after the view has been initialized', inject([ElementRef], (elementRef: ElementRef) => { + const element = fixture.nativeElement; + const node = { + focus() {} + }; + + elementRef.nativeElement = element; + spyOn(element, 'querySelector').and.returnValue(node); + spyOn(node, 'focus'); + + comp.ngAfterViewInit(); + + expect(element.querySelector).toHaveBeenCalledWith('#email'); + expect(node.focus).toHaveBeenCalled(); + })); + + it('notifies of success upon successful requestReset', inject([PasswordResetInitService], (service: PasswordResetInitService) => { + spyOn(service, 'save').and.returnValue(of({})); + comp.resetAccount.email = 'user@domain.com'; + + comp.requestReset(); + + expect(service.save).toHaveBeenCalledWith('user@domain.com'); + expect(comp.success).toEqual('OK'); + expect(comp.error).toBeNull(); + expect(comp.errorEmailNotExists).toBeNull(); + })); + + it('notifies of unknown email upon email address not registered/400', inject( + [PasswordResetInitService], + (service: PasswordResetInitService) => { + spyOn(service, 'save').and.returnValue( + throwError({ + status: 400, + error: { type: EMAIL_NOT_FOUND_TYPE } + }) + ); + comp.resetAccount.email = 'user@domain.com'; + + comp.requestReset(); + + expect(service.save).toHaveBeenCalledWith('user@domain.com'); + expect(comp.success).toBeNull(); + expect(comp.error).toBeNull(); + expect(comp.errorEmailNotExists).toEqual('ERROR'); + } + )); + + it('notifies of error upon error response', inject([PasswordResetInitService], (service: PasswordResetInitService) => { + spyOn(service, 'save').and.returnValue( + throwError({ + status: 503, + data: 'something else' + }) + ); + comp.resetAccount.email = 'user@domain.com'; + + comp.requestReset(); + + expect(service.save).toHaveBeenCalledWith('user@domain.com'); + expect(comp.success).toBeNull(); + expect(comp.errorEmailNotExists).toBeNull(); + expect(comp.error).toEqual('ERROR'); + })); + }); +}); diff --git a/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/account/password/password-strength-bar.component.spec.ts b/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/account/password/password-strength-bar.component.spec.ts new file mode 100644 index 000000000000..35e923ac00fb --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/account/password/password-strength-bar.component.spec.ts @@ -0,0 +1,48 @@ +import { ComponentFixture, TestBed, async } from '@angular/core/testing'; + +import { PasswordStrengthBarComponent } from 'app/account/password/password-strength-bar.component'; + +describe('Component Tests', () => { + describe('PasswordStrengthBarComponent', () => { + let comp: PasswordStrengthBarComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [PasswordStrengthBarComponent] + }) + .overrideTemplate(PasswordStrengthBarComponent, '') + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(PasswordStrengthBarComponent); + comp = fixture.componentInstance; + }); + + describe('PasswordStrengthBarComponents', () => { + it('should initialize with default values', () => { + expect(comp.measureStrength('')).toBe(0); + expect(comp.colors).toEqual(['#F00', '#F90', '#FF0', '#9F0', '#0F0']); + expect(comp.getColor(0).idx).toBe(1); + expect(comp.getColor(0).col).toBe(comp.colors[0]); + }); + + it('should increase strength upon password value change', () => { + expect(comp.measureStrength('')).toBe(0); + expect(comp.measureStrength('aa')).toBeGreaterThanOrEqual(comp.measureStrength('')); + expect(comp.measureStrength('aa^6')).toBeGreaterThanOrEqual(comp.measureStrength('aa')); + expect(comp.measureStrength('Aa090(**)')).toBeGreaterThanOrEqual(comp.measureStrength('aa^6')); + expect(comp.measureStrength('Aa090(**)+-07365')).toBeGreaterThanOrEqual(comp.measureStrength('Aa090(**)')); + }); + + it('should change the color based on strength', () => { + expect(comp.getColor(0).col).toBe(comp.colors[0]); + expect(comp.getColor(11).col).toBe(comp.colors[1]); + expect(comp.getColor(22).col).toBe(comp.colors[2]); + expect(comp.getColor(33).col).toBe(comp.colors[3]); + expect(comp.getColor(44).col).toBe(comp.colors[4]); + }); + }); + }); +}); diff --git a/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/account/password/password.component.spec.ts b/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/account/password/password.component.spec.ts new file mode 100644 index 000000000000..86edf940bde0 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/account/password/password.component.spec.ts @@ -0,0 +1,89 @@ +import { ComponentFixture, TestBed, async } from '@angular/core/testing'; +import { HttpResponse } from '@angular/common/http'; +import { Observable, of, throwError } from 'rxjs'; + +import { BookstoreTestModule } from '../../../test.module'; +import { PasswordComponent } from 'app/account/password/password.component'; +import { PasswordService } from 'app/account/password/password.service'; + +describe('Component Tests', () => { + describe('PasswordComponent', () => { + let comp: PasswordComponent; + let fixture: ComponentFixture; + let service: PasswordService; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + imports: [BookstoreTestModule], + declarations: [PasswordComponent], + providers: [] + }) + .overrideTemplate(PasswordComponent, '') + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(PasswordComponent); + comp = fixture.componentInstance; + service = fixture.debugElement.injector.get(PasswordService); + }); + + it('should show error if passwords do not match', () => { + // GIVEN + comp.newPassword = 'password1'; + comp.confirmPassword = 'password2'; + // WHEN + comp.changePassword(); + // THEN + expect(comp.doNotMatch).toBe('ERROR'); + expect(comp.error).toBeNull(); + expect(comp.success).toBeNull(); + }); + + it('should call Auth.changePassword when passwords match', () => { + // GIVEN + const passwordValues = { + currentPassword: 'oldPassword', + newPassword: 'myPassword' + }; + + spyOn(service, 'save').and.returnValue(of(new HttpResponse({ body: true }))); + comp.currentPassword = passwordValues.currentPassword; + comp.newPassword = comp.confirmPassword = passwordValues.newPassword; + + // WHEN + comp.changePassword(); + + // THEN + expect(service.save).toHaveBeenCalledWith(passwordValues.newPassword, passwordValues.currentPassword); + }); + + it('should set success to OK upon success', function() { + // GIVEN + spyOn(service, 'save').and.returnValue(of(new HttpResponse({ body: true }))); + comp.newPassword = comp.confirmPassword = 'myPassword'; + + // WHEN + comp.changePassword(); + + // THEN + expect(comp.doNotMatch).toBeNull(); + expect(comp.error).toBeNull(); + expect(comp.success).toBe('OK'); + }); + + it('should notify of error if change password fails', function() { + // GIVEN + spyOn(service, 'save').and.returnValue(throwError('ERROR')); + comp.newPassword = comp.confirmPassword = 'myPassword'; + + // WHEN + comp.changePassword(); + + // THEN + expect(comp.doNotMatch).toBeNull(); + expect(comp.success).toBeNull(); + expect(comp.error).toBe('ERROR'); + }); + }); +}); diff --git a/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/account/register/register.component.spec.ts b/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/account/register/register.component.spec.ts new file mode 100644 index 000000000000..ae02abbb91e4 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/account/register/register.component.spec.ts @@ -0,0 +1,118 @@ +import { ComponentFixture, TestBed, async, inject, tick, fakeAsync } from '@angular/core/testing'; +import { Observable, of, throwError } from 'rxjs'; + +import { BookstoreTestModule } from '../../../test.module'; +import { EMAIL_ALREADY_USED_TYPE, LOGIN_ALREADY_USED_TYPE } from 'app/shared'; +import { Register } from 'app/account/register/register.service'; +import { RegisterComponent } from 'app/account/register/register.component'; + +describe('Component Tests', () => { + describe('RegisterComponent', () => { + let fixture: ComponentFixture; + let comp: RegisterComponent; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + imports: [BookstoreTestModule], + declarations: [RegisterComponent] + }) + .overrideTemplate(RegisterComponent, '') + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(RegisterComponent); + comp = fixture.componentInstance; + comp.ngOnInit(); + }); + + it('should ensure the two passwords entered match', () => { + comp.registerAccount.password = 'password'; + comp.confirmPassword = 'non-matching'; + + comp.register(); + + expect(comp.doNotMatch).toEqual('ERROR'); + }); + + it('should update success to OK after creating an account', inject( + [Register], + fakeAsync((service: Register) => { + spyOn(service, 'save').and.returnValue(of({})); + comp.registerAccount.password = comp.confirmPassword = 'password'; + + comp.register(); + tick(); + + expect(service.save).toHaveBeenCalledWith({ + password: 'password', + langKey: 'en' + }); + expect(comp.success).toEqual(true); + expect(comp.registerAccount.langKey).toEqual('en'); + expect(comp.errorUserExists).toBeNull(); + expect(comp.errorEmailExists).toBeNull(); + expect(comp.error).toBeNull(); + }) + )); + + it('should notify of user existence upon 400/login already in use', inject( + [Register], + fakeAsync((service: Register) => { + spyOn(service, 'save').and.returnValue( + throwError({ + status: 400, + error: { type: LOGIN_ALREADY_USED_TYPE } + }) + ); + comp.registerAccount.password = comp.confirmPassword = 'password'; + + comp.register(); + tick(); + + expect(comp.errorUserExists).toEqual('ERROR'); + expect(comp.errorEmailExists).toBeNull(); + expect(comp.error).toBeNull(); + }) + )); + + it('should notify of email existence upon 400/email address already in use', inject( + [Register], + fakeAsync((service: Register) => { + spyOn(service, 'save').and.returnValue( + throwError({ + status: 400, + error: { type: EMAIL_ALREADY_USED_TYPE } + }) + ); + comp.registerAccount.password = comp.confirmPassword = 'password'; + + comp.register(); + tick(); + + expect(comp.errorEmailExists).toEqual('ERROR'); + expect(comp.errorUserExists).toBeNull(); + expect(comp.error).toBeNull(); + }) + )); + + it('should notify of generic error', inject( + [Register], + fakeAsync((service: Register) => { + spyOn(service, 'save').and.returnValue( + throwError({ + status: 503 + }) + ); + comp.registerAccount.password = comp.confirmPassword = 'password'; + + comp.register(); + tick(); + + expect(comp.errorUserExists).toBeNull(); + expect(comp.errorEmailExists).toBeNull(); + expect(comp.error).toEqual('ERROR'); + }) + )); + }); +}); diff --git a/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/account/settings/settings.component.spec.ts b/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/account/settings/settings.component.spec.ts new file mode 100644 index 000000000000..b6a6d34c1915 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/account/settings/settings.component.spec.ts @@ -0,0 +1,81 @@ +import { ComponentFixture, TestBed, async } from '@angular/core/testing'; +import { Observable, throwError } from 'rxjs'; + +import { BookstoreTestModule } from '../../../test.module'; +import { AccountService } from 'app/core'; +import { SettingsComponent } from 'app/account/settings/settings.component'; + +describe('Component Tests', () => { + describe('SettingsComponent', () => { + let comp: SettingsComponent; + let fixture: ComponentFixture; + let mockAuth: any; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + imports: [BookstoreTestModule], + declarations: [SettingsComponent], + providers: [] + }) + .overrideTemplate(SettingsComponent, '') + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(SettingsComponent); + comp = fixture.componentInstance; + mockAuth = fixture.debugElement.injector.get(AccountService); + }); + + it('should send the current identity upon save', () => { + // GIVEN + const accountValues = { + firstName: 'John', + lastName: 'Doe', + + activated: true, + email: 'john.doe@mail.com', + langKey: 'en', + login: 'john' + }; + mockAuth.setIdentityResponse(accountValues); + + // WHEN + comp.settingsAccount = accountValues; + comp.save(); + + // THEN + expect(mockAuth.identitySpy).toHaveBeenCalled(); + expect(mockAuth.saveSpy).toHaveBeenCalledWith(accountValues); + expect(comp.settingsAccount).toEqual(accountValues); + }); + + it('should notify of success upon successful save', () => { + // GIVEN + const accountValues = { + firstName: 'John', + lastName: 'Doe' + }; + mockAuth.setIdentityResponse(accountValues); + + // WHEN + comp.save(); + + // THEN + expect(comp.error).toBeNull(); + expect(comp.success).toBe('OK'); + }); + + it('should notify of error upon failed save', () => { + // GIVEN + mockAuth.saveSpy.and.returnValue(throwError('ERROR')); + + // WHEN + comp.save(); + + // THEN + expect(comp.error).toEqual('ERROR'); + expect(comp.success).toBeNull(); + }); + }); +}); diff --git a/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/admin/audits/audits.component.spec.ts b/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/admin/audits/audits.component.spec.ts new file mode 100644 index 000000000000..254791f51ab0 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/admin/audits/audits.component.spec.ts @@ -0,0 +1,133 @@ +import { ComponentFixture, TestBed, async } from '@angular/core/testing'; +import { Observable, of } from 'rxjs'; +import { HttpHeaders, HttpResponse } from '@angular/common/http'; + +import { BookstoreTestModule } from '../../../test.module'; +import { AuditsComponent } from 'app/admin/audits/audits.component'; +import { AuditsService } from 'app/admin/audits/audits.service'; +import { Audit } from 'app/admin/audits/audit.model'; +import { ITEMS_PER_PAGE } from 'app/shared'; + +function build2DigitsDatePart(datePart: number) { + return `0${datePart}`.slice(-2); +} + +function getDate(isToday = true) { + let date: Date = new Date(); + if (isToday) { + // Today + 1 day - needed if the current day must be included + date.setDate(date.getDate() + 1); + } else { + // get last month + if (date.getMonth() === 0) { + date = new Date(date.getFullYear() - 1, 11, date.getDate()); + } else { + date = new Date(date.getFullYear(), date.getMonth() - 1, date.getDate()); + } + } + const monthString = build2DigitsDatePart(date.getMonth() + 1); + const dateString = build2DigitsDatePart(date.getDate()); + return `${date.getFullYear()}-${monthString}-${dateString}`; +} + +describe('Component Tests', () => { + describe('AuditsComponent', () => { + let comp: AuditsComponent; + let fixture: ComponentFixture; + let service: AuditsService; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + imports: [BookstoreTestModule], + declarations: [AuditsComponent], + providers: [AuditsService] + }) + .overrideTemplate(AuditsComponent, '') + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(AuditsComponent); + comp = fixture.componentInstance; + service = fixture.debugElement.injector.get(AuditsService); + }); + + describe('today function ', () => { + it('should set toDate to current date', () => { + comp.today(); + expect(comp.toDate).toBe(getDate()); + }); + }); + + describe('previousMonth function ', () => { + it('should set fromDate to current date', () => { + comp.previousMonth(); + expect(comp.fromDate).toBe(getDate(false)); + }); + }); + + describe('By default, on init', () => { + it('should set all default values correctly', () => { + fixture.detectChanges(); + expect(comp.toDate).toBe(getDate()); + expect(comp.fromDate).toBe(getDate(false)); + expect(comp.itemsPerPage).toBe(ITEMS_PER_PAGE); + expect(comp.page).toBe(10); + expect(comp.reverse).toBeFalsy(); + expect(comp.predicate).toBe('id'); + }); + }); + + describe('OnInit', () => { + it('Should call load all on init', () => { + // GIVEN + const headers = new HttpHeaders().append('link', 'link;link'); + const audit = new Audit({ remoteAddress: '127.0.0.1', sessionId: '123' }, 'user', '20140101', 'AUTHENTICATION_SUCCESS'); + spyOn(service, 'query').and.returnValue( + of( + new HttpResponse({ + body: [audit], + headers + }) + ) + ); + + // WHEN + comp.ngOnInit(); + + // THEN + expect(service.query).toHaveBeenCalled(); + expect(comp.audits[0]).toEqual(jasmine.objectContaining(audit)); + }); + }); + + describe('Create sort object', () => { + it('Should sort only by id asc', () => { + // GIVEN + comp.predicate = 'id'; + comp.reverse = false; + + // WHEN + const sort = comp.sort(); + + // THEN + expect(sort.length).toEqual(1); + expect(sort[0]).toEqual('id,desc'); + }); + + it('Should sort by timestamp asc then by id', () => { + // GIVEN + comp.predicate = 'timestamp'; + comp.reverse = true; + + // WHEN + const sort = comp.sort(); + + // THEN + expect(sort.length).toEqual(2); + expect(sort[0]).toEqual('timestamp,asc'); + expect(sort[1]).toEqual('id'); + }); + }); + }); +}); diff --git a/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/admin/audits/audits.service.spec.ts b/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/admin/audits/audits.service.spec.ts new file mode 100644 index 000000000000..84ff79f633d5 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/admin/audits/audits.service.spec.ts @@ -0,0 +1,59 @@ +import { TestBed } from '@angular/core/testing'; + +import { AuditsService } from 'app/admin/audits/audits.service'; +import { Audit } from 'app/admin/audits/audit.model'; +import { SERVER_API_URL } from 'app/app.constants'; +import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; + +describe('Service Tests', () => { + describe('Audits Service', () => { + let service: AuditsService; + let httpMock; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [HttpClientTestingModule] + }); + + service = TestBed.get(AuditsService); + httpMock = TestBed.get(HttpTestingController); + }); + + afterEach(() => { + httpMock.verify(); + }); + + describe('Service methods', () => { + it('should call correct URL', () => { + service.query({}).subscribe(() => {}); + + const req = httpMock.expectOne({ method: 'GET' }); + const resourceUrl = SERVER_API_URL + 'management/audits'; + expect(req.request.url).toEqual(resourceUrl); + }); + + it('should return Audits', () => { + const audit = new Audit({ remoteAddress: '127.0.0.1', sessionId: '123' }, 'user', '20140101', 'AUTHENTICATION_SUCCESS'); + + service.query({}).subscribe(received => { + expect(received.body[0]).toEqual(audit); + }); + + const req = httpMock.expectOne({ method: 'GET' }); + req.flush([audit]); + }); + + it('should propagate not found response', () => { + service.query({}).subscribe(null, (_error: any) => { + expect(_error.status).toEqual(404); + }); + + const req = httpMock.expectOne({ method: 'GET' }); + req.flush('Invalid request parameters', { + status: 404, + statusText: 'Bad Request' + }); + }); + }); + }); +}); diff --git a/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/admin/configuration/configuration.component.spec.ts b/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/admin/configuration/configuration.component.spec.ts new file mode 100644 index 000000000000..d21f87b57b66 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/admin/configuration/configuration.component.spec.ts @@ -0,0 +1,71 @@ +import { ComponentFixture, TestBed, async } from '@angular/core/testing'; +import { of } from 'rxjs'; +import { HttpHeaders, HttpResponse } from '@angular/common/http'; + +import { BookstoreTestModule } from '../../../test.module'; +import { JhiConfigurationComponent } from 'app/admin/configuration/configuration.component'; +import { JhiConfigurationService } from 'app/admin/configuration/configuration.service'; +import { ITEMS_PER_PAGE } from 'app/shared'; +import { Log } from 'app/admin'; + +describe('Component Tests', () => { + describe('JhiConfigurationComponent', () => { + let comp: JhiConfigurationComponent; + let fixture: ComponentFixture; + let service: JhiConfigurationService; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + imports: [BookstoreTestModule], + declarations: [JhiConfigurationComponent], + providers: [JhiConfigurationService] + }) + .overrideTemplate(JhiConfigurationComponent, '') + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(JhiConfigurationComponent); + comp = fixture.componentInstance; + service = fixture.debugElement.injector.get(JhiConfigurationService); + }); + + describe('OnInit', () => { + it('should set all default values correctly', () => { + expect(comp.configKeys).toEqual([]); + expect(comp.filter).toBe(''); + expect(comp.orderProp).toBe('prefix'); + expect(comp.reverse).toBe(false); + }); + it('Should call load all on init', () => { + // GIVEN + const body = [{ config: 'test', properties: 'test' }, { config: 'test2' }]; + const envConfig = { envConfig: 'test' }; + spyOn(service, 'get').and.returnValue(of(body)); + spyOn(service, 'getEnv').and.returnValue(of(envConfig)); + + // WHEN + comp.ngOnInit(); + + // THEN + expect(service.get).toHaveBeenCalled(); + expect(service.getEnv).toHaveBeenCalled(); + expect(comp.configKeys).toEqual([['0', '1', '2', '3']]); + expect(comp.allConfiguration).toEqual(envConfig); + }); + }); + describe('keys method', () => { + it('should return the keys of an Object', () => { + // GIVEN + const data = { + key1: 'test', + key2: 'test2' + }; + + // THEN + expect(comp.keys(data)).toEqual(['key1', 'key2']); + expect(comp.keys(undefined)).toEqual([]); + }); + }); + }); +}); diff --git a/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/admin/configuration/configuration.service.spec.ts b/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/admin/configuration/configuration.service.spec.ts new file mode 100644 index 000000000000..6039044b7f9d --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/admin/configuration/configuration.service.spec.ts @@ -0,0 +1,64 @@ +import { TestBed } from '@angular/core/testing'; + +import { JhiConfigurationService } from 'app/admin/configuration/configuration.service'; +import { SERVER_API_URL } from 'app/app.constants'; +import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; +import { HttpResponse } from '@angular/common/http'; + +describe('Service Tests', () => { + describe('Logs Service', () => { + let service: JhiConfigurationService; + let httpMock; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [HttpClientTestingModule] + }); + + service = TestBed.get(JhiConfigurationService); + httpMock = TestBed.get(HttpTestingController); + }); + + afterEach(() => { + httpMock.verify(); + }); + + describe('Service methods', () => { + it('should call correct URL', () => { + service.get().subscribe(() => {}); + + const req = httpMock.expectOne({ method: 'GET' }); + const resourceUrl = SERVER_API_URL + 'management/configprops'; + expect(req.request.url).toEqual(resourceUrl); + }); + + it('should get the config', () => { + const angularConfig = { + contexts: { + angular: { + beans: ['test2'] + } + } + }; + service.get().subscribe(received => { + expect(received.body[0]).toEqual(angularConfig); + }); + + const req = httpMock.expectOne({ method: 'GET' }); + req.flush(angularConfig); + }); + + it('should get the env', () => { + const propertySources = new HttpResponse({ + body: [{ name: 'test1', properties: 'test1' }, { name: 'test2', properties: 'test2' }] + }); + service.get().subscribe(received => { + expect(received.body[0]).toEqual(propertySources); + }); + + const req = httpMock.expectOne({ method: 'GET' }); + req.flush(propertySources); + }); + }); + }); +}); diff --git a/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/admin/health/health.component.spec.ts b/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/admin/health/health.component.spec.ts new file mode 100644 index 000000000000..549b430f6702 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/admin/health/health.component.spec.ts @@ -0,0 +1,321 @@ +import { ComponentFixture, TestBed, async } from '@angular/core/testing'; +import { HttpResponse, HttpErrorResponse } from '@angular/common/http'; +import { of, throwError } from 'rxjs'; + +import { BookstoreTestModule } from '../../../test.module'; +import { JhiHealthCheckComponent } from 'app/admin/health/health.component'; +import { JhiHealthService } from 'app/admin/health/health.service'; + +describe('Component Tests', () => { + describe('JhiHealthCheckComponent', () => { + let comp: JhiHealthCheckComponent; + let fixture: ComponentFixture; + let service: JhiHealthService; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + imports: [BookstoreTestModule], + declarations: [JhiHealthCheckComponent] + }) + .overrideTemplate(JhiHealthCheckComponent, '') + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(JhiHealthCheckComponent); + comp = fixture.componentInstance; + service = fixture.debugElement.injector.get(JhiHealthService); + }); + + describe('baseName and subSystemName', () => { + it('should return the basename when it has no sub system', () => { + expect(comp.baseName('base')).toBe('base'); + }); + + it('should return the basename when it has sub systems', () => { + expect(comp.baseName('base.subsystem.system')).toBe('base'); + }); + + it('should return the sub system name', () => { + expect(comp.subSystemName('subsystem')).toBe(''); + }); + + it('should return the subsystem when it has multiple keys', () => { + expect(comp.subSystemName('subsystem.subsystem.system')).toBe(' - subsystem.system'); + }); + }); + + describe('transformHealthData', () => { + it('should flatten empty health data', () => { + const data = {}; + const expected = []; + expect(service.transformHealthData(data)).toEqual(expected); + }); + + it('should flatten health data with no subsystems', () => { + const data = { + details: { + status: 'UP', + db: { + status: 'UP', + database: 'H2', + hello: '1' + }, + mail: { + status: 'UP', + error: 'mail.a.b.c' + } + } + }; + const expected = [ + { + name: 'db', + status: 'UP', + details: { + database: 'H2', + hello: '1' + } + }, + { + name: 'mail', + error: 'mail.a.b.c', + status: 'UP' + } + ]; + expect(service.transformHealthData(data)).toEqual(expected); + }); + + it('should flatten health data with subsystems at level 1, main system has no additional information', () => { + const data = { + details: { + status: 'UP', + db: { + status: 'UP', + database: 'H2', + hello: '1' + }, + mail: { + status: 'UP', + error: 'mail.a.b.c' + }, + system: { + status: 'DOWN', + subsystem1: { + status: 'UP', + property1: 'system.subsystem1.property1' + }, + subsystem2: { + status: 'DOWN', + error: 'system.subsystem1.error', + property2: 'system.subsystem2.property2' + } + } + } + }; + const expected = [ + { + name: 'db', + status: 'UP', + details: { + database: 'H2', + hello: '1' + } + }, + { + name: 'mail', + error: 'mail.a.b.c', + status: 'UP' + }, + { + name: 'system.subsystem1', + status: 'UP', + details: { + property1: 'system.subsystem1.property1' + } + }, + { + name: 'system.subsystem2', + error: 'system.subsystem1.error', + status: 'DOWN', + details: { + property2: 'system.subsystem2.property2' + } + } + ]; + expect(service.transformHealthData(data)).toEqual(expected); + }); + + it('should flatten health data with subsystems at level 1, main system has additional information', () => { + const data = { + details: { + status: 'UP', + db: { + status: 'UP', + database: 'H2', + hello: '1' + }, + mail: { + status: 'UP', + error: 'mail.a.b.c' + }, + system: { + status: 'DOWN', + property1: 'system.property1', + subsystem1: { + status: 'UP', + property1: 'system.subsystem1.property1' + }, + subsystem2: { + status: 'DOWN', + error: 'system.subsystem1.error', + property2: 'system.subsystem2.property2' + } + } + } + }; + const expected = [ + { + name: 'db', + status: 'UP', + details: { + database: 'H2', + hello: '1' + } + }, + { + name: 'mail', + error: 'mail.a.b.c', + status: 'UP' + }, + { + name: 'system', + status: 'DOWN', + details: { + property1: 'system.property1' + } + }, + { + name: 'system.subsystem1', + status: 'UP', + details: { + property1: 'system.subsystem1.property1' + } + }, + { + name: 'system.subsystem2', + error: 'system.subsystem1.error', + status: 'DOWN', + details: { + property2: 'system.subsystem2.property2' + } + } + ]; + expect(service.transformHealthData(data)).toEqual(expected); + }); + + it('should flatten health data with subsystems at level 1, main system has additional error', () => { + const data = { + details: { + status: 'UP', + db: { + status: 'UP', + database: 'H2', + hello: '1' + }, + mail: { + status: 'UP', + error: 'mail.a.b.c' + }, + system: { + status: 'DOWN', + error: 'show me', + subsystem1: { + status: 'UP', + property1: 'system.subsystem1.property1' + }, + subsystem2: { + status: 'DOWN', + error: 'system.subsystem1.error', + property2: 'system.subsystem2.property2' + } + } + } + }; + const expected = [ + { + name: 'db', + status: 'UP', + details: { + database: 'H2', + hello: '1' + } + }, + { + name: 'mail', + error: 'mail.a.b.c', + status: 'UP' + }, + { + name: 'system', + error: 'show me', + status: 'DOWN' + }, + { + name: 'system.subsystem1', + status: 'UP', + details: { + property1: 'system.subsystem1.property1' + } + }, + { + name: 'system.subsystem2', + error: 'system.subsystem1.error', + status: 'DOWN', + details: { + property2: 'system.subsystem2.property2' + } + } + ]; + expect(service.transformHealthData(data)).toEqual(expected); + }); + }); + + describe('getBadgeClass', () => { + it('should get badge class', () => { + const upBadgeClass = comp.getBadgeClass('UP'); + const downBadgeClass = comp.getBadgeClass('DOWN'); + expect(upBadgeClass).toEqual('badge-success'); + expect(downBadgeClass).toEqual('badge-danger'); + }); + }); + + describe('refresh', () => { + it('should call refresh on init', () => { + // GIVEN + spyOn(service, 'checkHealth').and.returnValue(of(new HttpResponse())); + spyOn(service, 'transformHealthData').and.returnValue(of({ data: 'test' })); + + // WHEN + comp.ngOnInit(); + + // THEN + expect(service.checkHealth).toHaveBeenCalled(); + expect(service.transformHealthData).toHaveBeenCalled(); + expect(comp.healthData.value).toEqual({ data: 'test' }); + }); + it('should handle a 503 on refreshing health data', () => { + // GIVEN + spyOn(service, 'checkHealth').and.returnValue(throwError(new HttpErrorResponse({ status: 503, error: 'Mail down' }))); + spyOn(service, 'transformHealthData').and.returnValue(of({ health: 'down' })); + + // WHEN + comp.refresh(); + + // THEN + expect(service.checkHealth).toHaveBeenCalled(); + expect(service.transformHealthData).toHaveBeenCalled(); + expect(comp.healthData.value).toEqual({ health: 'down' }); + }); + }); + }); +}); diff --git a/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/admin/metrics/metrics.component.spec.ts b/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/admin/metrics/metrics.component.spec.ts new file mode 100644 index 000000000000..d4a992b9633a --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/admin/metrics/metrics.component.spec.ts @@ -0,0 +1,55 @@ +import { ComponentFixture, TestBed, async } from '@angular/core/testing'; +import { HttpResponse, HttpErrorResponse } from '@angular/common/http'; +import { of, throwError } from 'rxjs'; + +import { BookstoreTestModule } from '../../../test.module'; +import { JhiMetricsMonitoringComponent } from 'app/admin/metrics/metrics.component'; +import { JhiMetricsService } from 'app/admin/metrics/metrics.service'; + +describe('Component Tests', () => { + describe('JhiMetricsMonitoringComponent', () => { + let comp: JhiMetricsMonitoringComponent; + let fixture: ComponentFixture; + let service: JhiMetricsService; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + imports: [BookstoreTestModule], + declarations: [JhiMetricsMonitoringComponent] + }) + .overrideTemplate(JhiMetricsMonitoringComponent, '') + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(JhiMetricsMonitoringComponent); + comp = fixture.componentInstance; + service = fixture.debugElement.injector.get(JhiMetricsService); + }); + + describe('refresh', () => { + it('should call refresh on init', () => { + // GIVEN + const response = { + timers: { + service: 'test', + unrelatedKey: 'test' + }, + gauges: { + 'jcache.statistics': { + value: 2 + }, + unrelatedKey: 'test' + } + }; + spyOn(service, 'getMetrics').and.returnValue(of(response)); + + // WHEN + comp.ngOnInit(); + + // THEN + expect(service.getMetrics).toHaveBeenCalled(); + }); + }); + }); +}); diff --git a/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/admin/metrics/metrics.service.spec.ts b/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/admin/metrics/metrics.service.spec.ts new file mode 100644 index 000000000000..2c3665b06269 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/admin/metrics/metrics.service.spec.ts @@ -0,0 +1,57 @@ +import { TestBed } from '@angular/core/testing'; + +import { JhiMetricsService } from 'app/admin/metrics/metrics.service'; +import { SERVER_API_URL } from 'app/app.constants'; +import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; + +describe('Service Tests', () => { + describe('Logs Service', () => { + let service: JhiMetricsService; + let httpMock; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [HttpClientTestingModule] + }); + + service = TestBed.get(JhiMetricsService); + httpMock = TestBed.get(HttpTestingController); + }); + + afterEach(() => { + httpMock.verify(); + }); + + describe('Service methods', () => { + it('should call correct URL', () => { + service.getMetrics().subscribe(() => {}); + + const req = httpMock.expectOne({ method: 'GET' }); + const resourceUrl = SERVER_API_URL + 'management/jhi-metrics'; + expect(req.request.url).toEqual(resourceUrl); + }); + + it('should return Metrics', () => { + const metrics = []; + + service.getMetrics().subscribe(received => { + expect(received.body[0]).toEqual(metrics); + }); + + const req = httpMock.expectOne({ method: 'GET' }); + req.flush([metrics]); + }); + + it('should return Thread Dump', () => { + const dump = [{ name: 'test1', threadState: 'RUNNABLE' }]; + + service.threadDump().subscribe(received => { + expect(received.body[0]).toEqual(dump); + }); + + const req = httpMock.expectOne({ method: 'GET' }); + req.flush([dump]); + }); + }); + }); +}); diff --git a/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/admin/user-management/user-management-delete-dialog.component.spec.ts b/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/admin/user-management/user-management-delete-dialog.component.spec.ts new file mode 100644 index 000000000000..596e1b560994 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/admin/user-management/user-management-delete-dialog.component.spec.ts @@ -0,0 +1,54 @@ +import { ComponentFixture, TestBed, async, inject, fakeAsync, tick } from '@angular/core/testing'; +import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; +import { Observable, of } from 'rxjs'; +import { JhiEventManager } from 'ng-jhipster'; + +import { BookstoreTestModule } from '../../../test.module'; +import { UserMgmtDeleteDialogComponent } from 'app/admin/user-management/user-management-delete-dialog.component'; +import { UserService } from 'app/core'; + +describe('Component Tests', () => { + describe('User Management Delete Component', () => { + let comp: UserMgmtDeleteDialogComponent; + let fixture: ComponentFixture; + let service: UserService; + let mockEventManager: any; + let mockActiveModal: any; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + imports: [BookstoreTestModule], + declarations: [UserMgmtDeleteDialogComponent] + }) + .overrideTemplate(UserMgmtDeleteDialogComponent, '') + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(UserMgmtDeleteDialogComponent); + comp = fixture.componentInstance; + service = fixture.debugElement.injector.get(UserService); + mockEventManager = fixture.debugElement.injector.get(JhiEventManager); + mockActiveModal = fixture.debugElement.injector.get(NgbActiveModal); + }); + + describe('confirmDelete', () => { + it('Should call delete service on confirmDelete', inject( + [], + fakeAsync(() => { + // GIVEN + spyOn(service, 'delete').and.returnValue(of({})); + + // WHEN + comp.confirmDelete('user'); + tick(); + + // THEN + expect(service.delete).toHaveBeenCalledWith('user'); + expect(mockActiveModal.dismissSpy).toHaveBeenCalled(); + expect(mockEventManager.broadcastSpy).toHaveBeenCalled(); + }) + )); + }); + }); +}); diff --git a/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/admin/user-management/user-management-detail.component.spec.ts b/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/admin/user-management/user-management-detail.component.spec.ts new file mode 100644 index 000000000000..f64b8bb88b9d --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/admin/user-management/user-management-detail.component.spec.ts @@ -0,0 +1,65 @@ +import { ComponentFixture, TestBed, async } from '@angular/core/testing'; +import { ActivatedRoute } from '@angular/router'; +import { of } from 'rxjs'; + +import { BookstoreTestModule } from '../../../test.module'; +import { UserMgmtDetailComponent } from 'app/admin/user-management/user-management-detail.component'; +import { User } from 'app/core'; + +describe('Component Tests', () => { + describe('User Management Detail Component', () => { + let comp: UserMgmtDetailComponent; + let fixture: ComponentFixture; + const route = ({ + data: of({ user: new User(1, 'user', 'first', 'last', 'first@last.com', true, 'en', ['ROLE_USER'], 'admin', null, null, null) }) + } as any) as ActivatedRoute; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + imports: [BookstoreTestModule], + declarations: [UserMgmtDetailComponent], + providers: [ + { + provide: ActivatedRoute, + useValue: route + } + ] + }) + .overrideTemplate(UserMgmtDetailComponent, '') + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(UserMgmtDetailComponent); + comp = fixture.componentInstance; + }); + + describe('OnInit', () => { + it('Should call load all on init', () => { + // GIVEN + + // WHEN + comp.ngOnInit(); + + // THEN + expect(comp.user).toEqual( + jasmine.objectContaining({ + id: 1, + login: 'user', + firstName: 'first', + lastName: 'last', + email: 'first@last.com', + activated: true, + langKey: 'en', + authorities: ['ROLE_USER'], + createdBy: 'admin', + createdDate: null, + lastModifiedBy: null, + lastModifiedDate: null, + password: null + }) + ); + }); + }); + }); +}); diff --git a/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/admin/user-management/user-management-update.component.spec.ts b/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/admin/user-management/user-management-update.component.spec.ts new file mode 100644 index 000000000000..c98694ba823e --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/admin/user-management/user-management-update.component.spec.ts @@ -0,0 +1,99 @@ +import { ComponentFixture, TestBed, async, inject, fakeAsync, tick } from '@angular/core/testing'; +import { HttpResponse } from '@angular/common/http'; +import { ActivatedRoute } from '@angular/router'; +import { Observable, of } from 'rxjs'; + +import { BookstoreTestModule } from '../../../test.module'; +import { UserMgmtUpdateComponent } from 'app/admin/user-management/user-management-update.component'; +import { UserService, User } from 'app/core'; + +describe('Component Tests', () => { + describe('User Management Update Component', () => { + let comp: UserMgmtUpdateComponent; + let fixture: ComponentFixture; + let service: UserService; + const route = ({ + data: of({ user: new User(1, 'user', 'first', 'last', 'first@last.com', true, 'en', ['ROLE_USER'], 'admin', null, null, null) }) + } as any) as ActivatedRoute; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + imports: [BookstoreTestModule], + declarations: [UserMgmtUpdateComponent], + providers: [ + { + provide: ActivatedRoute, + useValue: route + } + ] + }) + .overrideTemplate(UserMgmtUpdateComponent, '') + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(UserMgmtUpdateComponent); + comp = fixture.componentInstance; + service = fixture.debugElement.injector.get(UserService); + }); + + describe('OnInit', () => { + it('Should load authorities and language on init', inject( + [], + fakeAsync(() => { + // GIVEN + spyOn(service, 'authorities').and.returnValue(of(['USER'])); + + // WHEN + comp.ngOnInit(); + + // THEN + expect(service.authorities).toHaveBeenCalled(); + expect(comp.authorities).toEqual(['USER']); + }) + )); + }); + + describe('save', () => { + it('Should call update service on save for existing user', inject( + [], + fakeAsync(() => { + // GIVEN + const entity = new User(123); + spyOn(service, 'update').and.returnValue( + of( + new HttpResponse({ + body: entity + }) + ) + ); + comp.user = entity; + // WHEN + comp.save(); + tick(); // simulate async + + // THEN + expect(service.update).toHaveBeenCalledWith(entity); + expect(comp.isSaving).toEqual(false); + }) + )); + + it('Should call create service on save for new user', inject( + [], + fakeAsync(() => { + // GIVEN + const entity = new User(); + spyOn(service, 'create').and.returnValue(of(new HttpResponse({ body: entity }))); + comp.user = entity; + // WHEN + comp.save(); + tick(); // simulate async + + // THEN + expect(service.create).toHaveBeenCalledWith(entity); + expect(comp.isSaving).toEqual(false); + }) + )); + }); + }); +}); diff --git a/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/admin/user-management/user-management.component.spec.ts b/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/admin/user-management/user-management.component.spec.ts new file mode 100644 index 000000000000..31fea387b81d --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/admin/user-management/user-management.component.spec.ts @@ -0,0 +1,85 @@ +import { ComponentFixture, TestBed, async, inject, fakeAsync, tick } from '@angular/core/testing'; +import { Observable, of } from 'rxjs'; +import { HttpHeaders, HttpResponse } from '@angular/common/http'; + +import { BookstoreTestModule } from '../../../test.module'; +import { UserMgmtComponent } from 'app/admin/user-management/user-management.component'; +import { UserService, User } from 'app/core'; + +describe('Component Tests', () => { + describe('User Management Component', () => { + let comp: UserMgmtComponent; + let fixture: ComponentFixture; + let service: UserService; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + imports: [BookstoreTestModule], + declarations: [UserMgmtComponent] + }) + .overrideTemplate(UserMgmtComponent, '') + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(UserMgmtComponent); + comp = fixture.componentInstance; + service = fixture.debugElement.injector.get(UserService); + }); + + describe('OnInit', () => { + it('Should call load all on init', inject( + [], + fakeAsync(() => { + // GIVEN + const headers = new HttpHeaders().append('link', 'link;link'); + spyOn(service, 'query').and.returnValue( + of( + new HttpResponse({ + body: [new User(123)], + headers + }) + ) + ); + + // WHEN + comp.ngOnInit(); + tick(); // simulate async + + // THEN + expect(service.query).toHaveBeenCalled(); + expect(comp.users[0]).toEqual(jasmine.objectContaining({ id: 123 })); + }) + )); + }); + + describe('setActive', () => { + it('Should update user and call load all', inject( + [], + fakeAsync(() => { + // GIVEN + const headers = new HttpHeaders().append('link', 'link;link'); + const user = new User(123); + spyOn(service, 'query').and.returnValue( + of( + new HttpResponse({ + body: [user], + headers + }) + ) + ); + spyOn(service, 'update').and.returnValue(of(new HttpResponse({ status: 200 }))); + + // WHEN + comp.setActive(user, true); + tick(); // simulate async + + // THEN + expect(service.update).toHaveBeenCalledWith(user); + expect(service.query).toHaveBeenCalled(); + expect(comp.users[0]).toEqual(jasmine.objectContaining({ id: 123 })); + }) + )); + }); + }); +}); diff --git a/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/core/user/account.service.spec.ts b/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/core/user/account.service.spec.ts new file mode 100644 index 000000000000..01ed421f57b3 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/core/user/account.service.spec.ts @@ -0,0 +1,102 @@ +import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; +import { TestBed } from '@angular/core/testing'; +import { SERVER_API_URL } from 'app/app.constants'; +import { AccountService } from 'app/core'; +import { JhiDateUtils } from 'ng-jhipster'; +import { SessionStorageService } from 'ngx-webstorage'; + +describe('Service Tests', () => { + describe('Account Service', () => { + let service: AccountService; + let httpMock; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [HttpClientTestingModule], + providers: [JhiDateUtils, SessionStorageService] + }); + + service = TestBed.get(AccountService); + httpMock = TestBed.get(HttpTestingController); + }); + + afterEach(() => { + httpMock.verify(); + }); + + describe('Service methods', () => { + it('should call /account if user is undefined', () => { + service.identity().then(() => {}); + const req = httpMock.expectOne({ method: 'GET' }); + const resourceUrl = SERVER_API_URL + 'api/account'; + + expect(req.request.url).toEqual(`${resourceUrl}`); + }); + + it('should call /account only once', () => { + service.identity().then(() => service.identity().then(() => {})); + const req = httpMock.expectOne({ method: 'GET' }); + const resourceUrl = SERVER_API_URL + 'api/account'; + + expect(req.request.url).toEqual(`${resourceUrl}`); + req.flush({ + firstName: 'John' + }); + }); + + describe('hasAuthority', () => { + it('should return false if user is not logged', async () => { + const hasAuthority = await service.hasAuthority('ROLE_USER'); + expect(hasAuthority).toBeFalsy(); + }); + + it('should return false if user is logged and has not authority', async () => { + service.authenticate({ + authorities: ['ROLE_USER'] + }); + + const hasAuthority = await service.hasAuthority('ROLE_ADMIN'); + + expect(hasAuthority).toBeFalsy(); + }); + + it('should return true if user is logged and has authority', async () => { + service.authenticate({ + authorities: ['ROLE_USER'] + }); + + const hasAuthority = await service.hasAuthority('ROLE_USER'); + + expect(hasAuthority).toBeTruthy(); + }); + }); + + describe('hasAnyAuthority', () => { + it('should return false if user is not logged', async () => { + const hasAuthority = await service.hasAnyAuthority(['ROLE_USER']); + expect(hasAuthority).toBeFalsy(); + }); + + it('should return false if user is logged and has not authority', async () => { + service.authenticate({ + authorities: ['ROLE_USER'] + }); + + const hasAuthority = await service.hasAnyAuthority(['ROLE_ADMIN']); + + expect(hasAuthority).toBeFalsy(); + }); + + it('should return true if user is logged and has authority', async () => { + service.authenticate({ + authorities: ['ROLE_USER'] + }); + + const hasAuthority = await service.hasAnyAuthority(['ROLE_USER', 'ROLE_ADMIN']); + + expect(hasAuthority).toBeTruthy(); + }); + }); + }); + }); +}); diff --git a/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/core/user/user.service.spec.ts b/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/core/user/user.service.spec.ts new file mode 100644 index 000000000000..9c05839a5712 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/core/user/user.service.spec.ts @@ -0,0 +1,66 @@ +import { TestBed } from '@angular/core/testing'; +import { JhiDateUtils } from 'ng-jhipster'; + +import { UserService, User } from 'app/core'; +import { SERVER_API_URL } from 'app/app.constants'; +import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; + +describe('Service Tests', () => { + describe('User Service', () => { + let service: UserService; + let httpMock; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [HttpClientTestingModule], + providers: [JhiDateUtils] + }); + + service = TestBed.get(UserService); + httpMock = TestBed.get(HttpTestingController); + }); + + afterEach(() => { + httpMock.verify(); + }); + + describe('Service methods', () => { + it('should call correct URL', () => { + service.find('user').subscribe(() => {}); + + const req = httpMock.expectOne({ method: 'GET' }); + const resourceUrl = SERVER_API_URL + 'api/users'; + expect(req.request.url).toEqual(`${resourceUrl}/user`); + }); + it('should return User', () => { + service.find('user').subscribe(received => { + expect(received.body.login).toEqual('user'); + }); + + const req = httpMock.expectOne({ method: 'GET' }); + req.flush(new User(1, 'user')); + }); + + it('should return Authorities', () => { + service.authorities().subscribe(_authorities => { + expect(_authorities).toEqual(['ROLE_USER', 'ROLE_ADMIN']); + }); + const req = httpMock.expectOne({ method: 'GET' }); + + req.flush(['ROLE_USER', 'ROLE_ADMIN']); + }); + + it('should propagate not found response', () => { + service.find('user').subscribe(null, (_error: any) => { + expect(_error.status).toEqual(404); + }); + + const req = httpMock.expectOne({ method: 'GET' }); + req.flush('Invalid request parameters', { + status: 404, + statusText: 'Bad Request' + }); + }); + }); + }); +}); diff --git a/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/entities/book/book-delete-dialog.component.spec.ts b/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/entities/book/book-delete-dialog.component.spec.ts new file mode 100644 index 000000000000..6ffba6ee1e7b --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/entities/book/book-delete-dialog.component.spec.ts @@ -0,0 +1,52 @@ +/* tslint:disable max-line-length */ +import { ComponentFixture, TestBed, inject, fakeAsync, tick } from '@angular/core/testing'; +import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; +import { Observable, of } from 'rxjs'; +import { JhiEventManager } from 'ng-jhipster'; + +import { BookstoreTestModule } from '../../../test.module'; +import { BookDeleteDialogComponent } from 'app/entities/book/book-delete-dialog.component'; +import { BookService } from 'app/entities/book/book.service'; + +describe('Component Tests', () => { + describe('Book Management Delete Component', () => { + let comp: BookDeleteDialogComponent; + let fixture: ComponentFixture; + let service: BookService; + let mockEventManager: any; + let mockActiveModal: any; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [BookstoreTestModule], + declarations: [BookDeleteDialogComponent] + }) + .overrideTemplate(BookDeleteDialogComponent, '') + .compileComponents(); + fixture = TestBed.createComponent(BookDeleteDialogComponent); + comp = fixture.componentInstance; + service = fixture.debugElement.injector.get(BookService); + mockEventManager = fixture.debugElement.injector.get(JhiEventManager); + mockActiveModal = fixture.debugElement.injector.get(NgbActiveModal); + }); + + describe('confirmDelete', () => { + it('Should call delete service on confirmDelete', inject( + [], + fakeAsync(() => { + // GIVEN + spyOn(service, 'delete').and.returnValue(of({})); + + // WHEN + comp.confirmDelete(123); + tick(); + + // THEN + expect(service.delete).toHaveBeenCalledWith(123); + expect(mockActiveModal.dismissSpy).toHaveBeenCalled(); + expect(mockEventManager.broadcastSpy).toHaveBeenCalled(); + }) + )); + }); + }); +}); diff --git a/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/entities/book/book-detail.component.spec.ts b/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/entities/book/book-detail.component.spec.ts new file mode 100644 index 000000000000..b0ff94b3ea77 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/entities/book/book-detail.component.spec.ts @@ -0,0 +1,40 @@ +/* tslint:disable max-line-length */ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { ActivatedRoute } from '@angular/router'; +import { of } from 'rxjs'; + +import { BookstoreTestModule } from '../../../test.module'; +import { BookDetailComponent } from 'app/entities/book/book-detail.component'; +import { Book } from 'app/shared/model/book.model'; + +describe('Component Tests', () => { + describe('Book Management Detail Component', () => { + let comp: BookDetailComponent; + let fixture: ComponentFixture; + const route = ({ data: of({ book: new Book(123) }) } as any) as ActivatedRoute; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [BookstoreTestModule], + declarations: [BookDetailComponent], + providers: [{ provide: ActivatedRoute, useValue: route }] + }) + .overrideTemplate(BookDetailComponent, '') + .compileComponents(); + fixture = TestBed.createComponent(BookDetailComponent); + comp = fixture.componentInstance; + }); + + describe('OnInit', () => { + it('Should call load all on init', () => { + // GIVEN + + // WHEN + comp.ngOnInit(); + + // THEN + expect(comp.book).toEqual(jasmine.objectContaining({ id: 123 })); + }); + }); + }); +}); diff --git a/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/entities/book/book-update.component.spec.ts b/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/entities/book/book-update.component.spec.ts new file mode 100644 index 000000000000..336a2e2397ed --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/entities/book/book-update.component.spec.ts @@ -0,0 +1,60 @@ +/* tslint:disable max-line-length */ +import { ComponentFixture, TestBed, fakeAsync, tick } from '@angular/core/testing'; +import { HttpResponse } from '@angular/common/http'; +import { Observable, of } from 'rxjs'; + +import { BookstoreTestModule } from '../../../test.module'; +import { BookUpdateComponent } from 'app/entities/book/book-update.component'; +import { BookService } from 'app/entities/book/book.service'; +import { Book } from 'app/shared/model/book.model'; + +describe('Component Tests', () => { + describe('Book Management Update Component', () => { + let comp: BookUpdateComponent; + let fixture: ComponentFixture; + let service: BookService; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [BookstoreTestModule], + declarations: [BookUpdateComponent] + }) + .overrideTemplate(BookUpdateComponent, '') + .compileComponents(); + + fixture = TestBed.createComponent(BookUpdateComponent); + comp = fixture.componentInstance; + service = fixture.debugElement.injector.get(BookService); + }); + + describe('save', () => { + it('Should call update service on save for existing entity', fakeAsync(() => { + // GIVEN + const entity = new Book(123); + spyOn(service, 'update').and.returnValue(of(new HttpResponse({ body: entity }))); + comp.book = entity; + // WHEN + comp.save(); + tick(); // simulate async + + // THEN + expect(service.update).toHaveBeenCalledWith(entity); + expect(comp.isSaving).toEqual(false); + })); + + it('Should call create service on save for new entity', fakeAsync(() => { + // GIVEN + const entity = new Book(); + spyOn(service, 'create').and.returnValue(of(new HttpResponse({ body: entity }))); + comp.book = entity; + // WHEN + comp.save(); + tick(); // simulate async + + // THEN + expect(service.create).toHaveBeenCalledWith(entity); + expect(comp.isSaving).toEqual(false); + })); + }); + }); +}); diff --git a/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/entities/book/book.component.spec.ts b/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/entities/book/book.component.spec.ts new file mode 100644 index 000000000000..3b3d4726508a --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/entities/book/book.component.spec.ts @@ -0,0 +1,51 @@ +/* tslint:disable max-line-length */ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { Observable, of } from 'rxjs'; +import { HttpHeaders, HttpResponse } from '@angular/common/http'; + +import { BookstoreTestModule } from '../../../test.module'; +import { BookComponent } from 'app/entities/book/book.component'; +import { BookService } from 'app/entities/book/book.service'; +import { Book } from 'app/shared/model/book.model'; + +describe('Component Tests', () => { + describe('Book Management Component', () => { + let comp: BookComponent; + let fixture: ComponentFixture; + let service: BookService; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [BookstoreTestModule], + declarations: [BookComponent], + providers: [] + }) + .overrideTemplate(BookComponent, '') + .compileComponents(); + + fixture = TestBed.createComponent(BookComponent); + comp = fixture.componentInstance; + service = fixture.debugElement.injector.get(BookService); + }); + + it('Should call load all on init', () => { + // GIVEN + const headers = new HttpHeaders().append('link', 'link;link'); + spyOn(service, 'query').and.returnValue( + of( + new HttpResponse({ + body: [new Book(123)], + headers + }) + ) + ); + + // WHEN + comp.ngOnInit(); + + // THEN + expect(service.query).toHaveBeenCalled(); + expect(comp.books[0]).toEqual(jasmine.objectContaining({ id: 123 })); + }); + }); +}); diff --git a/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/entities/book/book.service.spec.ts b/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/entities/book/book.service.spec.ts new file mode 100644 index 000000000000..cd0c5b731808 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/entities/book/book.service.spec.ts @@ -0,0 +1,137 @@ +/* tslint:disable max-line-length */ +import { TestBed, getTestBed } from '@angular/core/testing'; +import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; +import { HttpClient, HttpResponse } from '@angular/common/http'; +import { of } from 'rxjs'; +import { take, map } from 'rxjs/operators'; +import * as moment from 'moment'; +import { DATE_FORMAT } from 'app/shared/constants/input.constants'; +import { BookService } from 'app/entities/book/book.service'; +import { IBook, Book } from 'app/shared/model/book.model'; + +describe('Service Tests', () => { + describe('Book Service', () => { + let injector: TestBed; + let service: BookService; + let httpMock: HttpTestingController; + let elemDefault: IBook; + let currentDate: moment.Moment; + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [HttpClientTestingModule] + }); + injector = getTestBed(); + service = injector.get(BookService); + httpMock = injector.get(HttpTestingController); + currentDate = moment(); + + elemDefault = new Book(0, 'AAAAAAA', 'AAAAAAA', currentDate, 0, 0); + }); + + describe('Service methods', async () => { + it('should find an element', async () => { + const returnedFromService = Object.assign( + { + published: currentDate.format(DATE_FORMAT) + }, + elemDefault + ); + service + .find(123) + .pipe(take(1)) + .subscribe(resp => expect(resp).toMatchObject({ body: elemDefault })); + + const req = httpMock.expectOne({ method: 'GET' }); + req.flush(JSON.stringify(returnedFromService)); + }); + + it('should create a Book', async () => { + const returnedFromService = Object.assign( + { + id: 0, + published: currentDate.format(DATE_FORMAT) + }, + elemDefault + ); + const expected = Object.assign( + { + published: currentDate + }, + returnedFromService + ); + service + .create(new Book(null)) + .pipe(take(1)) + .subscribe(resp => expect(resp).toMatchObject({ body: expected })); + const req = httpMock.expectOne({ method: 'POST' }); + req.flush(JSON.stringify(returnedFromService)); + }); + + it('should update a Book', async () => { + const returnedFromService = Object.assign( + { + title: 'BBBBBB', + author: 'BBBBBB', + published: currentDate.format(DATE_FORMAT), + quantity: 1, + price: 1 + }, + elemDefault + ); + + const expected = Object.assign( + { + published: currentDate + }, + returnedFromService + ); + service + .update(expected) + .pipe(take(1)) + .subscribe(resp => expect(resp).toMatchObject({ body: expected })); + const req = httpMock.expectOne({ method: 'PUT' }); + req.flush(JSON.stringify(returnedFromService)); + }); + + it('should return a list of Book', async () => { + const returnedFromService = Object.assign( + { + title: 'BBBBBB', + author: 'BBBBBB', + published: currentDate.format(DATE_FORMAT), + quantity: 1, + price: 1 + }, + elemDefault + ); + const expected = Object.assign( + { + published: currentDate + }, + returnedFromService + ); + service + .query(expected) + .pipe( + take(1), + map(resp => resp.body) + ) + .subscribe(body => expect(body).toContainEqual(expected)); + const req = httpMock.expectOne({ method: 'GET' }); + req.flush(JSON.stringify([returnedFromService])); + httpMock.verify(); + }); + + it('should delete a Book', async () => { + const rxPromise = service.delete(123).subscribe(resp => expect(resp.ok)); + + const req = httpMock.expectOne({ method: 'DELETE' }); + req.flush({ status: 200 }); + }); + }); + + afterEach(() => { + httpMock.verify(); + }); + }); +}); diff --git a/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/shared/alert/alert-error.component.spec.ts b/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/shared/alert/alert-error.component.spec.ts new file mode 100644 index 000000000000..93f344e63383 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/shared/alert/alert-error.component.spec.ts @@ -0,0 +1,134 @@ +import { ComponentFixture, TestBed, async, inject, fakeAsync, tick } from '@angular/core/testing'; +import { HttpErrorResponse, HttpHeaders } from '@angular/common/http'; +import { JhiAlertService, JhiEventManager } from 'ng-jhipster'; + +import { BookstoreTestModule } from '../../../test.module'; +import { JhiAlertErrorComponent } from 'app/shared/alert/alert-error.component'; +import { MockAlertService } from '../../../helpers/mock-alert.service'; + +describe('Component Tests', () => { + describe('Alert Error Component', () => { + let comp: JhiAlertErrorComponent; + let fixture: ComponentFixture; + let eventManager: JhiEventManager; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + imports: [BookstoreTestModule], + declarations: [JhiAlertErrorComponent], + providers: [ + JhiEventManager, + { + provide: JhiAlertService, + useClass: MockAlertService + } + ] + }) + .overrideTemplate(JhiAlertErrorComponent, '') + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(JhiAlertErrorComponent); + comp = fixture.componentInstance; + eventManager = fixture.debugElement.injector.get(JhiEventManager); + }); + + describe('Error Handling', () => { + it('Should display an alert on status 0', () => { + // GIVEN + eventManager.broadcast({ name: 'bookstoreApp.httpError', content: { status: 0 } }); + // THEN + expect(comp.alerts.length).toBe(1); + expect(comp.alerts[0].msg).toBe('Server not reachable'); + }); + it('Should display an alert on status 404', () => { + // GIVEN + eventManager.broadcast({ name: 'bookstoreApp.httpError', content: { status: 404 } }); + // THEN + expect(comp.alerts.length).toBe(1); + expect(comp.alerts[0].msg).toBe('Not found'); + }); + it('Should display an alert on generic error', () => { + // GIVEN + eventManager.broadcast({ name: 'bookstoreApp.httpError', content: { error: { message: 'Error Message' } } }); + eventManager.broadcast({ name: 'bookstoreApp.httpError', content: { error: 'Second Error Message' } }); + // THEN + expect(comp.alerts.length).toBe(2); + expect(comp.alerts[0].msg).toBe('Error Message'); + expect(comp.alerts[1].msg).toBe('Second Error Message'); + }); + it('Should display an alert on status 400 for generic error', () => { + // GIVEN + const response = new HttpErrorResponse({ + url: 'http://localhost:8080/api/foos', + headers: new HttpHeaders(), + status: 400, + statusText: 'Bad Request', + error: { + type: 'https://www.jhipster.tech/problem/constraint-violation', + title: 'Bad Request', + status: 400, + path: '/api/foos', + message: 'error.validation' + } + }); + eventManager.broadcast({ name: 'bookstoreApp.httpError', content: response }); + // THEN + expect(comp.alerts.length).toBe(1); + expect(comp.alerts[0].msg).toBe('error.validation'); + }); + it('Should display an alert on status 400 for generic error without message', () => { + // GIVEN + const response = new HttpErrorResponse({ + url: 'http://localhost:8080/api/foos', + headers: new HttpHeaders(), + status: 400, + error: 'Bad Request' + }); + eventManager.broadcast({ name: 'bookstoreApp.httpError', content: response }); + // THEN + expect(comp.alerts.length).toBe(1); + expect(comp.alerts[0].msg).toBe('Bad Request'); + }); + it('Should display an alert on status 400 for invalid parameters', () => { + // GIVEN + const response = new HttpErrorResponse({ + url: 'http://localhost:8080/api/foos', + headers: new HttpHeaders(), + status: 400, + statusText: 'Bad Request', + error: { + type: 'https://www.jhipster.tech/problem/constraint-violation', + title: 'Method argument not valid', + status: 400, + path: '/api/foos', + message: 'error.validation', + fieldErrors: [{ objectName: 'foo', field: 'minField', message: 'Min' }] + } + }); + eventManager.broadcast({ name: 'bookstoreApp.httpError', content: response }); + // THEN + expect(comp.alerts.length).toBe(1); + expect(comp.alerts[0].msg).toBe('Error on field "MinField"'); + }); + it('Should display an alert on status 400 for error headers', () => { + // GIVEN + const response = new HttpErrorResponse({ + url: 'http://localhost:8080/api/foos', + headers: new HttpHeaders().append('app-error', 'Error Message').append('app-params', 'foo'), + status: 400, + statusText: 'Bad Request', + error: { + status: 400, + message: 'error.validation' + } + }); + eventManager.broadcast({ name: 'bookstoreApp.httpError', content: response }); + // THEN + expect(comp.alerts.length).toBe(1); + expect(comp.alerts[0].msg).toBe('Error Message'); + }); + }); + }); +}); diff --git a/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/shared/login/login.component.spec.ts b/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/shared/login/login.component.spec.ts new file mode 100644 index 000000000000..814af6461079 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/javascript/spec/app/shared/login/login.component.spec.ts @@ -0,0 +1,157 @@ +import { ComponentFixture, TestBed, async, inject, fakeAsync, tick } from '@angular/core/testing'; +import { Router } from '@angular/router'; +import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; +import { JhiEventManager } from 'ng-jhipster'; + +import { LoginService } from 'app/core/login/login.service'; +import { JhiLoginModalComponent } from 'app/shared/login/login.component'; +import { StateStorageService } from 'app/core/auth/state-storage.service'; +import { BookstoreTestModule } from '../../../test.module'; +import { MockLoginService } from '../../../helpers/mock-login.service'; +import { MockStateStorageService } from '../../../helpers/mock-state-storage.service'; + +describe('Component Tests', () => { + describe('LoginComponent', () => { + let comp: JhiLoginModalComponent; + let fixture: ComponentFixture; + let mockLoginService: any; + let mockStateStorageService: any; + let mockRouter: any; + let mockEventManager: any; + let mockActiveModal: any; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + imports: [BookstoreTestModule], + declarations: [JhiLoginModalComponent], + providers: [ + { + provide: LoginService, + useClass: MockLoginService + }, + { + provide: StateStorageService, + useClass: MockStateStorageService + } + ] + }) + .overrideTemplate(JhiLoginModalComponent, '') + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(JhiLoginModalComponent); + comp = fixture.componentInstance; + mockLoginService = fixture.debugElement.injector.get(LoginService); + mockStateStorageService = fixture.debugElement.injector.get(StateStorageService); + mockRouter = fixture.debugElement.injector.get(Router); + mockEventManager = fixture.debugElement.injector.get(JhiEventManager); + mockActiveModal = fixture.debugElement.injector.get(NgbActiveModal); + }); + + it('should authenticate the user upon login when previous state was set', inject( + [], + fakeAsync(() => { + // GIVEN + const credentials = { + username: 'admin', + password: 'admin', + rememberMe: true + }; + comp.username = 'admin'; + comp.password = 'admin'; + comp.rememberMe = true; + comp.credentials = credentials; + mockLoginService.setResponse({}); + mockStateStorageService.setResponse({ redirect: 'dummy' }); + + // WHEN/ + comp.login(); + tick(); // simulate async + + // THEN + expect(comp.authenticationError).toEqual(false); + expect(mockActiveModal.dismissSpy).toHaveBeenCalledWith('login success'); + expect(mockEventManager.broadcastSpy).toHaveBeenCalledTimes(1); + expect(mockLoginService.loginSpy).toHaveBeenCalledWith(credentials); + expect(mockStateStorageService.getUrlSpy).toHaveBeenCalledTimes(1); + expect(mockStateStorageService.storeUrlSpy).toHaveBeenCalledWith(null); + expect(mockRouter.navigateSpy).toHaveBeenCalledWith([{ redirect: 'dummy' }]); + }) + )); + + it('should authenticate the user upon login when previous state was not set', inject( + [], + fakeAsync(() => { + // GIVEN + const credentials = { + username: 'admin', + password: 'admin', + rememberMe: true + }; + comp.username = 'admin'; + comp.password = 'admin'; + comp.rememberMe = true; + comp.credentials = credentials; + mockLoginService.setResponse({}); + mockStateStorageService.setResponse(null); + + // WHEN + comp.login(); + tick(); // simulate async + + // THEN + expect(comp.authenticationError).toEqual(false); + expect(mockActiveModal.dismissSpy).toHaveBeenCalledWith('login success'); + expect(mockEventManager.broadcastSpy).toHaveBeenCalledTimes(1); + expect(mockLoginService.loginSpy).toHaveBeenCalledWith(credentials); + expect(mockStateStorageService.getUrlSpy).toHaveBeenCalledTimes(1); + expect(mockStateStorageService.storeUrlSpy).not.toHaveBeenCalled(); + expect(mockRouter.navigateSpy).not.toHaveBeenCalled(); + }) + )); + + it('should empty the credentials upon cancel', () => { + // GIVEN + const credentials = { + username: 'admin', + password: 'admin', + rememberMe: true + }; + + const expected = { + username: null, + password: null, + rememberMe: true + }; + + comp.credentials = credentials; + + // WHEN + comp.cancel(); + + // THEN + expect(comp.authenticationError).toEqual(false); + expect(comp.credentials).toEqual(expected); + expect(mockActiveModal.dismissSpy).toHaveBeenCalledWith('cancel'); + }); + + it('should redirect user when register', () => { + // WHEN + comp.register(); + + // THEN + expect(mockActiveModal.dismissSpy).toHaveBeenCalledWith('to state register'); + expect(mockRouter.navigateSpy).toHaveBeenCalledWith(['/register']); + }); + + it('should redirect user when request password', () => { + // WHEN + comp.requestResetPassword(); + + // THEN + expect(mockActiveModal.dismissSpy).toHaveBeenCalledWith('to state requestReset'); + expect(mockRouter.navigateSpy).toHaveBeenCalledWith(['/reset', 'request']); + }); + }); +}); diff --git a/jhipster-6/bookstore-monolith/src/test/javascript/spec/helpers/mock-account.service.ts b/jhipster-6/bookstore-monolith/src/test/javascript/spec/helpers/mock-account.service.ts new file mode 100644 index 000000000000..659bf4d37930 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/javascript/spec/helpers/mock-account.service.ts @@ -0,0 +1,35 @@ +import { SpyObject } from './spyobject'; +import { AccountService } from 'app/core/auth/account.service'; +import Spy = jasmine.Spy; + +export class MockAccountService extends SpyObject { + getSpy: Spy; + saveSpy: Spy; + fakeResponse: any; + identitySpy: Spy; + + constructor() { + super(AccountService); + + this.fakeResponse = null; + this.getSpy = this.spy('get').andReturn(this); + this.saveSpy = this.spy('save').andReturn(this); + this.setIdentitySpy({}); + } + + subscribe(callback: any) { + callback(this.fakeResponse); + } + + setResponse(json: any): void { + this.fakeResponse = json; + } + + setIdentitySpy(json: any): any { + this.identitySpy = this.spy('identity').andReturn(Promise.resolve(json)); + } + + setIdentityResponse(json: any): void { + this.setIdentitySpy(json); + } +} diff --git a/jhipster-6/bookstore-monolith/src/test/javascript/spec/helpers/mock-active-modal.service.ts b/jhipster-6/bookstore-monolith/src/test/javascript/spec/helpers/mock-active-modal.service.ts new file mode 100644 index 000000000000..8bf0cc966fa3 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/javascript/spec/helpers/mock-active-modal.service.ts @@ -0,0 +1,12 @@ +import { SpyObject } from './spyobject'; +import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; +import Spy = jasmine.Spy; + +export class MockActiveModal extends SpyObject { + dismissSpy: Spy; + + constructor() { + super(NgbActiveModal); + this.dismissSpy = this.spy('dismiss').andReturn(this); + } +} diff --git a/jhipster-6/bookstore-monolith/src/test/javascript/spec/helpers/mock-alert.service.ts b/jhipster-6/bookstore-monolith/src/test/javascript/spec/helpers/mock-alert.service.ts new file mode 100644 index 000000000000..87f36c71e2f0 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/javascript/spec/helpers/mock-alert.service.ts @@ -0,0 +1,11 @@ +import { SpyObject } from './spyobject'; +import { JhiAlertService, JhiAlert } from 'ng-jhipster'; + +export class MockAlertService extends SpyObject { + constructor() { + super(JhiAlertService); + } + addAlert(alertOptions: JhiAlert) { + return alertOptions; + } +} diff --git a/jhipster-6/bookstore-monolith/src/test/javascript/spec/helpers/mock-event-manager.service.ts b/jhipster-6/bookstore-monolith/src/test/javascript/spec/helpers/mock-event-manager.service.ts new file mode 100644 index 000000000000..a71b5d931421 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/javascript/spec/helpers/mock-event-manager.service.ts @@ -0,0 +1,12 @@ +import { SpyObject } from './spyobject'; +import { JhiEventManager } from 'ng-jhipster'; +import Spy = jasmine.Spy; + +export class MockEventManager extends SpyObject { + broadcastSpy: Spy; + + constructor() { + super(JhiEventManager); + this.broadcastSpy = this.spy('broadcast').andReturn(this); + } +} diff --git a/jhipster-6/bookstore-monolith/src/test/javascript/spec/helpers/mock-login.service.ts b/jhipster-6/bookstore-monolith/src/test/javascript/spec/helpers/mock-login.service.ts new file mode 100644 index 000000000000..93a8ca575f21 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/javascript/spec/helpers/mock-login.service.ts @@ -0,0 +1,29 @@ +import { SpyObject } from './spyobject'; +import { LoginService } from 'app/core/login/login.service'; +import Spy = jasmine.Spy; + +export class MockLoginService extends SpyObject { + loginSpy: Spy; + logoutSpy: Spy; + registerSpy: Spy; + requestResetPasswordSpy: Spy; + cancelSpy: Spy; + + constructor() { + super(LoginService); + + this.setLoginSpy({}); + this.logoutSpy = this.spy('logout').andReturn(this); + this.registerSpy = this.spy('register').andReturn(this); + this.requestResetPasswordSpy = this.spy('requestResetPassword').andReturn(this); + this.cancelSpy = this.spy('cancel').andReturn(this); + } + + setLoginSpy(json: any) { + this.loginSpy = this.spy('login').andReturn(Promise.resolve(json)); + } + + setResponse(json: any): void { + this.setLoginSpy(json); + } +} diff --git a/jhipster-6/bookstore-monolith/src/test/javascript/spec/helpers/mock-route.service.ts b/jhipster-6/bookstore-monolith/src/test/javascript/spec/helpers/mock-route.service.ts new file mode 100644 index 000000000000..3465e055248c --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/javascript/spec/helpers/mock-route.service.ts @@ -0,0 +1,29 @@ +import { ActivatedRoute, Router } from '@angular/router'; +import { SpyObject } from './spyobject'; +import { Observable, of } from 'rxjs'; +import Spy = jasmine.Spy; + +export class MockActivatedRoute extends ActivatedRoute { + constructor(parameters?: any) { + super(); + this.queryParams = of(parameters); + this.params = of(parameters); + this.data = of({ + ...parameters, + pagingParams: { + page: 10, + ascending: false, + predicate: 'id' + } + }); + } +} + +export class MockRouter extends SpyObject { + navigateSpy: Spy; + + constructor() { + super(Router); + this.navigateSpy = this.spy('navigate'); + } +} diff --git a/jhipster-6/bookstore-monolith/src/test/javascript/spec/helpers/mock-state-storage.service.ts b/jhipster-6/bookstore-monolith/src/test/javascript/spec/helpers/mock-state-storage.service.ts new file mode 100644 index 000000000000..1398c7b28be7 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/javascript/spec/helpers/mock-state-storage.service.ts @@ -0,0 +1,22 @@ +import { SpyObject } from './spyobject'; +import { StateStorageService } from 'app/core/auth/state-storage.service'; +import Spy = jasmine.Spy; + +export class MockStateStorageService extends SpyObject { + getUrlSpy: Spy; + storeUrlSpy: Spy; + + constructor() { + super(StateStorageService); + this.setUrlSpy({}); + this.storeUrlSpy = this.spy('storeUrl').andReturn(this); + } + + setUrlSpy(json) { + this.getUrlSpy = this.spy('getUrl').andReturn(json); + } + + setResponse(json: any): void { + this.setUrlSpy(json); + } +} diff --git a/jhipster-6/bookstore-monolith/src/test/javascript/spec/helpers/spyobject.ts b/jhipster-6/bookstore-monolith/src/test/javascript/spec/helpers/spyobject.ts new file mode 100644 index 000000000000..949e067ef58f --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/javascript/spec/helpers/spyobject.ts @@ -0,0 +1,69 @@ +export interface GuinessCompatibleSpy extends jasmine.Spy { + /** By chaining the spy with and.returnValue, all calls to the function will return a specific + * value. */ + andReturn(val: any): void; + /** By chaining the spy with and.callFake, all calls to the spy will delegate to the supplied + * function. */ + andCallFake(fn: Function): GuinessCompatibleSpy; + /** removes all recorded calls */ + reset(); +} + +export class SpyObject { + static stub(object = null, config = null, overrides = null) { + if (!(object instanceof SpyObject)) { + overrides = config; + config = object; + object = new SpyObject(); + } + + const m = {}; + Object.keys(config).forEach(key => (m[key] = config[key])); + Object.keys(overrides).forEach(key => (m[key] = overrides[key])); + Object.keys(m).forEach(key => { + object.spy(key).andReturn(m[key]); + }); + return object; + } + + constructor(type = null) { + if (type) { + Object.keys(type.prototype).forEach(prop => { + let m = null; + try { + m = type.prototype[prop]; + } catch (e) { + // As we are creating spys for abstract classes, + // these classes might have getters that throw when they are accessed. + // As we are only auto creating spys for methods, this + // should not matter. + } + if (typeof m === 'function') { + this.spy(prop); + } + }); + } + } + + spy(name) { + if (!this[name]) { + this[name] = this._createGuinnessCompatibleSpy(name); + } + return this[name]; + } + + prop(name, value) { + this[name] = value; + } + + /** @internal */ + _createGuinnessCompatibleSpy(name): GuinessCompatibleSpy { + const newSpy: GuinessCompatibleSpy = jasmine.createSpy(name); + newSpy.andCallFake = newSpy.and.callFake; + newSpy.andReturn = newSpy.and.returnValue; + newSpy.reset = newSpy.calls.reset; + // revisit return null here (previously needed for rtts_assert). + newSpy.and.returnValue(null); + return newSpy; + } +} diff --git a/jhipster-6/bookstore-monolith/src/test/javascript/spec/test.module.ts b/jhipster-6/bookstore-monolith/src/test/javascript/spec/test.module.ts new file mode 100644 index 000000000000..c66241f9bbce --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/javascript/spec/test.module.ts @@ -0,0 +1,63 @@ +import { DatePipe } from '@angular/common'; +import { ActivatedRoute, Router } from '@angular/router'; +import { NgModule, ElementRef, Renderer } from '@angular/core'; +import { HttpClientTestingModule } from '@angular/common/http/testing'; +import { NgbActiveModal, NgbModal } from '@ng-bootstrap/ng-bootstrap'; +import { JhiDataUtils, JhiDateUtils, JhiEventManager, JhiAlertService, JhiParseLinks } from 'ng-jhipster'; + +import { AccountService, LoginModalService } from 'app/core'; +import { MockAccountService } from './helpers/mock-account.service'; +import { MockActivatedRoute, MockRouter } from './helpers/mock-route.service'; +import { MockActiveModal } from './helpers/mock-active-modal.service'; +import { MockEventManager } from './helpers/mock-event-manager.service'; + +@NgModule({ + providers: [ + DatePipe, + JhiDataUtils, + JhiDateUtils, + JhiParseLinks, + { + provide: JhiEventManager, + useClass: MockEventManager + }, + { + provide: NgbActiveModal, + useClass: MockActiveModal + }, + { + provide: ActivatedRoute, + useValue: new MockActivatedRoute({ id: 123 }) + }, + { + provide: Router, + useClass: MockRouter + }, + { + provide: AccountService, + useClass: MockAccountService + }, + { + provide: LoginModalService, + useValue: null + }, + { + provide: ElementRef, + useValue: null + }, + { + provide: Renderer, + useValue: null + }, + { + provide: JhiAlertService, + useValue: null + }, + { + provide: NgbModal, + useValue: null + } + ], + imports: [HttpClientTestingModule] +}) +export class BookstoreTestModule {} diff --git a/jhipster-6/bookstore-monolith/src/test/resources/config/application.yml b/jhipster-6/bookstore-monolith/src/test/resources/config/application.yml new file mode 100644 index 000000000000..34c6ca3e159c --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/resources/config/application.yml @@ -0,0 +1,105 @@ +# =================================================================== +# Spring Boot configuration. +# +# This configuration is used for unit/integration tests. +# +# More information on profiles: https://www.jhipster.tech/profiles/ +# More information on configuration properties: https://www.jhipster.tech/common-application-properties/ +# =================================================================== + +# =================================================================== +# Standard Spring Boot properties. +# Full reference is available at: +# http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html +# =================================================================== + + +spring: + application: + name: Bookstore + datasource: + type: com.zaxxer.hikari.HikariDataSource + url: jdbc:h2:mem:Bookstore;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE + name: + username: + password: + hikari: + auto-commit: false + jpa: + database-platform: io.github.jhipster.domain.util.FixedH2Dialect + database: H2 + open-in-view: false + show-sql: false + hibernate: + ddl-auto: none + naming: + physical-strategy: org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy + implicit-strategy: org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy + properties: + hibernate.id.new_generator_mappings: true + hibernate.connection.provider_disables_autocommit: true + hibernate.cache.use_second_level_cache: false + hibernate.cache.use_query_cache: false + hibernate.generate_statistics: false + hibernate.hbm2ddl.auto: validate + hibernate.jdbc.time_zone: UTC + liquibase: + contexts: test + mail: + host: localhost + messages: + basename: i18n/messages + mvc: + favicon: + enabled: false + thymeleaf: + mode: HTML + + +server: + port: 10344 + address: localhost + +# =================================================================== +# JHipster specific properties +# +# Full reference is available at: https://www.jhipster.tech/common-application-properties/ +# =================================================================== + +jhipster: + async: + core-pool-size: 1 + max-pool-size: 50 + queue-capacity: 10000 + # To test logstash appender + logging: + logstash: + enabled: true + host: localhost + port: 5000 + queue-size: 512 + mail: + from: test@localhost + base-url: http://127.0.0.1:8080 + security: + authentication: + jwt: + # This token must be encoded using Base64 (you can type `echo 'secret-key'|base64` on your command line) + base64-secret: NDJmOTVlZjI2NzhlZDRjNmVkNTM1NDE2NjkyNDljZDJiNzBlMjI5YmZjMjY3MzdjZmZlMjI3NjE4OTRkNzc5MWYzNDNlYWMzYmJjOWRmMjc5ZWQyZTZmOWZkOTMxZWZhNWE1MTVmM2U2NjFmYjhlNDc2Y2Q3NzliMGY0YzFkNmI= + # Token is valid 24 hours + token-validity-in-seconds: 86400 + metrics: + logs: # Reports metrics in the logs + enabled: true + report-frequency: 60 # in seconds + +# =================================================================== +# Application specific properties +# Add your own application properties here, see the ApplicationProperties class +# to have type-safe configuration, like in the JHipsterProperties above +# +# More documentation is available at: +# https://www.jhipster.tech/common-application-properties/ +# =================================================================== + +# application: diff --git a/jhipster-6/bookstore-monolith/src/test/resources/i18n/messages_en.properties b/jhipster-6/bookstore-monolith/src/test/resources/i18n/messages_en.properties new file mode 100644 index 000000000000..f19db8692f20 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/resources/i18n/messages_en.properties @@ -0,0 +1 @@ +email.test.title=test title diff --git a/jhipster-6/bookstore-monolith/src/test/resources/logback.xml b/jhipster-6/bookstore-monolith/src/test/resources/logback.xml new file mode 100644 index 000000000000..de8cf57b93c3 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/resources/logback.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/jhipster-6/bookstore-monolith/src/test/resources/templates/mail/testEmail.html b/jhipster-6/bookstore-monolith/src/test/resources/templates/mail/testEmail.html new file mode 100644 index 000000000000..a4ca16a79f05 --- /dev/null +++ b/jhipster-6/bookstore-monolith/src/test/resources/templates/mail/testEmail.html @@ -0,0 +1 @@ + diff --git a/jhipster-6/bookstore-monolith/tsconfig-aot.json b/jhipster-6/bookstore-monolith/tsconfig-aot.json new file mode 100644 index 000000000000..110cde9fd6d4 --- /dev/null +++ b/jhipster-6/bookstore-monolith/tsconfig-aot.json @@ -0,0 +1,28 @@ +{ + "compilerOptions": { + "target": "es5", + "module": "es2015", + "moduleResolution": "node", + "sourceMap": false, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "removeComments": false, + "noImplicitAny": false, + "suppressImplicitAnyIndexErrors": true, + "skipLibCheck": true, + "outDir": "target/www/app", + "lib": ["es7", "dom"], + "typeRoots": ["node_modules/@types"], + "baseUrl": "./", + "paths": { + "app/*": ["src/main/webapp/app/*"] + }, + "importHelpers": true + }, + "angularCompilerOptions": { + "genDir": "target/aot", + "skipMetadataEmit": true, + "fullTemplateTypeCheck": true, + "preserveWhitespaces": true + } +} diff --git a/jhipster-6/bookstore-monolith/tsconfig.json b/jhipster-6/bookstore-monolith/tsconfig.json new file mode 100644 index 000000000000..dd6343ab6278 --- /dev/null +++ b/jhipster-6/bookstore-monolith/tsconfig.json @@ -0,0 +1,25 @@ +{ + "compilerOptions": { + "target": "es5", + "module": "commonjs", + "moduleResolution": "node", + "sourceMap": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "removeComments": false, + "noImplicitAny": false, + "skipLibCheck": true, + "suppressImplicitAnyIndexErrors": true, + "outDir": "target/www/app", + "lib": ["es7", "dom"], + "typeRoots": ["node_modules/@types"], + "baseUrl": "./", + "paths": { + "app/*": ["src/main/webapp/app/*"] + }, + "importHelpers": true, + "allowJs": true + }, + "include": ["src/main/webapp/app", "src/test/javascript/"], + "exclude": ["node_modules"] +} diff --git a/jhipster-6/bookstore-monolith/tslint.json b/jhipster-6/bookstore-monolith/tslint.json new file mode 100644 index 000000000000..3b8456d2fda3 --- /dev/null +++ b/jhipster-6/bookstore-monolith/tslint.json @@ -0,0 +1,76 @@ +{ + "rulesDirectory": ["node_modules/codelyzer"], + "extends": ["tslint-config-prettier"], + "rules": { + "class-name": true, + "comment-format": [true, "check-space"], + "curly": true, + "eofline": true, + "forin": true, + "indent": [true, "spaces"], + "label-position": true, + "member-access": false, + "member-ordering": [true, "static-before-instance", "variables-before-functions"], + "no-arg": true, + "no-bitwise": true, + "no-console": [true, "debug", "info", "time", "timeEnd", "trace"], + "no-construct": true, + "no-debugger": true, + "no-duplicate-variable": true, + "no-empty": false, + "no-eval": true, + "no-inferrable-types": [true], + "no-shadowed-variable": true, + "no-string-literal": false, + "no-switch-case-fall-through": true, + "no-trailing-whitespace": true, + "no-unused-expression": true, + "no-var-keyword": true, + "object-literal-sort-keys": false, + "one-line": [true, "check-open-brace", "check-catch", "check-else", "check-whitespace"], + "quotemark": [true, "single", "avoid-escape"], + "radix": true, + "semicolon": [true, "always", "ignore-bound-class-methods"], + "triple-equals": [true, "allow-null-check"], + "typedef-whitespace": [ + true, + { + "call-signature": "nospace", + "index-signature": "nospace", + "parameter": "nospace", + "property-declaration": "nospace", + "variable-declaration": "nospace" + } + ], + "variable-name": false, + "whitespace": [true, "check-branch", "check-decl", "check-operator", "check-separator", "check-type"], + "prefer-const": true, + "arrow-parens": [true, "ban-single-arg-parens"], + "arrow-return-shorthand": [true], + "import-spacing": true, + "no-consecutive-blank-lines": [true], + "object-literal-shorthand": true, + "space-before-function-paren": [ + true, + { + "asyncArrow": "always", + "anonymous": "never", + "constructor": "never", + "method": "never", + "named": "never" + } + ], + + "directive-selector": [true, "attribute", "jhi", "camelCase"], + "component-selector": [true, "element", "jhi", "kebab-case"], + "use-input-property-decorator": true, + "use-output-property-decorator": true, + "use-host-property-decorator": true, + "no-input-rename": true, + "no-output-rename": true, + "use-life-cycle-interface": true, + "use-pipe-transform-interface": false, + "component-class-suffix": true, + "directive-class-suffix": true + } +} diff --git a/jhipster-6/bookstore-monolith/webpack/logo-jhipster.png b/jhipster-6/bookstore-monolith/webpack/logo-jhipster.png new file mode 100644 index 0000000000000000000000000000000000000000..d8eb48da05c157571eed9fd7303f8d9566f2ea12 GIT binary patch literal 4459 zcmX|E1yB@V)238FK~j(qNkODUIgmU;(gO(*P${JZ=?3XM8YCs8kB$SRLmH0mJmRPW zjygDwxc}z=zWHYM-FJ7N_u1LmnVoqzLJOo!LC!=@KtMpDs-mckzrWy*J1H?wbcBiIKI{l~?l|FQ8} zGHf6(+!t^B7X_K9f{bfoefMF_h_P-2VhbNfP4`Pj4&zy(j>UKvG2D*N^Cq~ z3ULNT!6=*t3j-aGm&Rya2O$w2`K^=SsxjR0HtuxidS@xe$9fOe){q>6Ma&n5xud3f zXId+p(!xQBBTODckT6%=#XjzMrY9%*WNrvC(g~~1#bM@f$T7!)F>b%%r`|&&MTxDy z!O+COn=9hJxj*L-JH@Zfj;7-=_>W5}WdMaao@(9S|ZqIR7s7ut2 zRO%LPYr1)0d}d-)EOdCaF55pWI_Zazx`G-P2RAV>@!8s_UG^}KO+iXV7MWg(A7sSr z_efP`c@YGXpP!eVlTG&}D`(FLc@R8?9{`YxHb{qn-wCvDW+EGJ zElW?f_TlvtI&`K#aao|+bLQSgwp%O`F+S3m{XYGBjnPednx=>?{N(x zqvhlXI|2%;{U)c9lZfFoHzjk)O$733PeHPHS!wW{oHvFz`@#u8{5?Fo_Gd@U7g-nM z18myb1IANM1va-Q|NL^a%AKL?Tq%C`?ufGBZfY|i@I>U4azx{{#4AfEX=vVtHI8~U zkA!1nWv5N5IV2o*H(&aQCGcq2^;qECmXh-6Q_}#{*z5h+;Kh^O^HWYhH3JEYES%&b zn~`IQ4wS_3-GPLjbm^uQ9`8#*Np5r~?w!#3DUdUjU%W~f(;qWT-KNePOb4pohLdh~ zaW7E_M_L^Cqlm)<0BL8gQS$*Wq|$s|NoiX?30DYG`!#798_Mw8#H1GORusc9N6CUU zP@f%DBQw)FigQ|Xo}2g0b_nJyft<}!g~9G9ACjd}ynGVcO=b3}pvoBd`!%iDpD80M ziDoEmFvDhIWgTUL$1Y!W>lmfcl?8=}_Vg*ymq5WoA|iO!wpMt2h0J3Nv(esXqMh)u zCnGVu8xcw_nQt!piI`~vh8e!XKE>)N=F>wWbsVWk470IAZ7enF*+LsBCIt zrVUJ&R2^m7|er zR`k5JtaQ}dyu&>(#K4Ybfp0R@N8*r4+B~1Pq-6CqR`lxLqA`5k)mNbAJI2~;)mF@? zb;as@o`Sae%~#})Wk^Ylg1%R)qp~P%pU$vS?c`OKpg>7UOw=vhwB8VQ*6$m<^1DRb z=X{oCCc*0A&Ed+Q5?C^Ip|qC#h5FfB^R^31TDut*nRn<^#b3NQMSJw;A&v8T1n}jb zpnwuCrFPuF0%^i0ZlGiC8tr7JjA2#57toQr9M5ucNj|({?XY*0-q>$c>uN>)oBr7? z<{|eMZN@9QzT+KWYpTZtIK8L48w{}b63NmSo_I@cXZ?rY&Qwd0*J`eqCTF>SYfMC? z``;AgDi7}Hr6v06eQFrBrl8S!&G5c(%Fckt$;F`GyO{%Tt05G^7khxZSwZp(68n); z6?*8is~k`Wars8O!dUEElYgCWWyRHiN=58p$C^?>LW;KbG+^Hbs@u5B-cfmrKvwh@ z*&F**D^}nu_gTyNo~+B%c&|T%A!s=&63Q9j_&t!Az@0mJ??eve?u^f+k1pI)39k%B zQ%CRe^4!x-gFqU&K55%+Lp#3Rd#RH)6~slq37;p8LC=k)TeR_hLUPmn^NQ=AQ(+); ziU*JfPHgJ*XgPH=Q~<3uw)LMS=dQZlQxrV-7|x>%rQo9$+yg7)Xll*}TN9L;#g0YyG+5zfcN5Ou)ef_O&HZPzR0Is+goj`iUR;ca)<#R7at8nf>X#8 zfk3V+JN=>L*GO3#b~a{@$i{mU81eAfydg{|>$+R|Y!ee4+sw+@>m-wLS+xGMC{dd# z#8Jr37&Uc%4!Dasduy`mm6A;KfWq;|n0tp$;@cTzH+Iw!wl#;0%VjP5W5$<`{bMAp zjbuzd=sG-apRTJJ18USIeQ%N_RH}b%D6c-OQU$W(ebunRT z>W}VLA`hY-S#1E$^gR?3M*4X6JdOticP#mszBkRTu3`322pW?wJFZfpN8tPJ4%g!+ zD0-H5QPE|G*moD7gbUbW`_1l;5+lCXHQl-P40iwiAdkY+9Ly4vU8Y+))PHM6E5yTL z`EG|{P9--wb|YuoXgb?}n|LqGY2{#K_F6=O^mtmO7~z2YAbTj&)zYeC*`g`QeqM37bl%$mk2m^@@y&WEwtQXhdSL`c6)0J zS9;!6)92o+OptB0cG)f2QenpN3%SK()G}pmOAlw z;V;Jwcr|pc#yOsi56A88BsX<;n2T)0tR0GbJy)a7-P(#?h^R6XWKI%WT7KU6cp-*R z))-sFUI}hMaGi<1v`^3KwoTO_t8^(e3a7-hm!*xWFPbp+EwlW9yJpo7k#tVp&AMy; z#CbKRssTPPgTz{;cG&P;ks zCK=NTkv9~J{(jY(&vi7QzQQ9lx=r>(=q&3?vC>x^g}V9qA>|GH7n1e49$HhxbtU@g zurasC?2 zpSV+LOR8ry;d`rq(;nM7)zD9dFL{I_1L02;h}u;-T540Mdh%O!qAiX#0I033rG@sF zE2bjRr?i0+V&4KPU+*S)8gzLt2{=cb-f5fwSu!NL9kRsxyI5Wy{BH1S*SIUbnj7N5 z)z=`wLHg%o+dEN3XJZ3}XboI|; zw$wN=wz)#G?^5$Q!+%HHMa1(5bUTtD5l$oW;ld;pfXmx1N);-qi09(zj-6xLsoZy# zh|R~HP;R-_X$X7Y8n3}XK5k{?}!pLX)rY{_UUfu#VUb{(7$|a7K169Sg5ld|Up*q5gfl@ChTK{qZb-;uhx{ z%Le-;u|%5UOyw@?F@^HCuF24RY9Tl4+EJz0mxdoQbg^08G$ltWIH#SyQNI=xu5?;>Amv4PB-Q^XbyB^*O>oqurI-2z% z!jbbv%2#2{(TNFfSgsq^=P&*(*RFTQ_h$ra)tsTv`UZg2)!u%L7>I0ns=5mEd%93d z+8wSQITdztdd2Y6zgp|W%g~Pn%SlLH1E{=v;gI}il|Nejy>9U@njE5pAqF7{(B77$ zxCCgZNhcTgmMK(^Ebz7V3mGcw`>pP&!(XFjttWpDNu;5&E=Re+w3=^x{~)19f+~iOopzsOqPCO^+0B(Q-PVeg^emHYpY_2J|xyo{9yA9|~+- zJAJ6^(+%oCu?Z%sbAJ$nxYItG!)yi|5FAz-T-idyryDq%Y2fLrVX#vSEo4bEb=*@VxG&b#1g { + if (err) { + throw new Error('Failed to parse pom.xml: ' + err); + } + if (result.project.version && result.project.version[0]) { + version = result.project.version[0]; + } else if (result.project.parent && result.project.parent[0] && result.project.parent[0].version && result.project.parent[0].version[0]) { + version = result.project.parent[0].version[0]; + } + }); + if (version === null) { + throw new Error('pom.xml is malformed. No version is defined'); + } + return version; +} + +const _root = path.resolve(__dirname, '..'); + +function root(args) { + args = Array.prototype.slice.call(arguments, 0); + return path.join.apply(path, [_root].concat(args)); +} + +function isExternalLib(module, check = /node_modules/) { + const req = module.userRequest; + if (typeof req !== 'string') { + return false; + } + return req.search(check) >= 0; +} diff --git a/jhipster-6/bookstore-monolith/webpack/webpack.common.js b/jhipster-6/bookstore-monolith/webpack/webpack.common.js new file mode 100644 index 000000000000..d8fd26c1578b --- /dev/null +++ b/jhipster-6/bookstore-monolith/webpack/webpack.common.js @@ -0,0 +1,86 @@ +const webpack = require('webpack'); +const CopyWebpackPlugin = require('copy-webpack-plugin'); +const HtmlWebpackPlugin = require('html-webpack-plugin'); +const rxPaths = require('rxjs/_esm5/path-mapping'); + +const utils = require('./utils.js'); + +module.exports = (options) => ({ + resolve: { + extensions: ['.ts', '.js'], + modules: ['node_modules'], + alias: { + app: utils.root('src/main/webapp/app/'), + ...rxPaths() + } + }, + stats: { + children: false + }, + module: { + rules: [ + { + test: /\.html$/, + loader: 'html-loader', + options: { + minimize: true, + caseSensitive: true, + removeAttributeQuotes:false, + minifyJS:false, + minifyCSS:false + }, + exclude: /(src\/main\/webapp\/index.html)/ + }, + { + test: /\.(jpe?g|png|gif|svg|woff2?|ttf|eot)$/i, + loader: 'file-loader', + options: { + digest: 'hex', + hash: 'sha512', + name: 'content/[hash].[ext]' + } + }, + { + test: /manifest.webapp$/, + loader: 'file-loader', + options: { + name: 'manifest.webapp' + } + }, + // Ignore warnings about System.import in Angular + { test: /[\/\\]@angular[\/\\].+\.js$/, parser: { system: true } }, + ] + }, + plugins: [ + new webpack.DefinePlugin({ + 'process.env': { + NODE_ENV: `'${options.env}'`, + BUILD_TIMESTAMP: `'${new Date().getTime()}'`, + VERSION: `'${utils.parseVersion()}'`, + DEBUG_INFO_ENABLED: options.env === 'development', + // The root URL for API calls, ending with a '/' - for example: `"https://www.jhipster.tech:8081/myservice/"`. + // If this URL is left empty (""), then it will be relative to the current context. + // If you use an API server, in `prod` mode, you will need to enable CORS + // (see the `jhipster.cors` common JHipster property in the `application-*.yml` configurations) + SERVER_API_URL: `''` + } + }), + new CopyWebpackPlugin([ + { from: './node_modules/swagger-ui/dist/css', to: 'swagger-ui/dist/css' }, + { from: './node_modules/swagger-ui/dist/lib', to: 'swagger-ui/dist/lib' }, + { from: './node_modules/swagger-ui/dist/swagger-ui.min.js', to: 'swagger-ui/dist/swagger-ui.min.js' }, + { from: './src/main/webapp/swagger-ui/', to: 'swagger-ui' }, + { from: './src/main/webapp/content/', to: 'content' }, + { from: './src/main/webapp/favicon.ico', to: 'favicon.ico' }, + { from: './src/main/webapp/manifest.webapp', to: 'manifest.webapp' }, + // jhipster-needle-add-assets-to-webpack - JHipster will add/remove third-party resources in this array + { from: './src/main/webapp/robots.txt', to: 'robots.txt' } + ]), + new HtmlWebpackPlugin({ + template: './src/main/webapp/index.html', + chunks: ['vendors', 'polyfills', 'main', 'global'], + chunksSortMode: 'manual', + inject: 'body' + }) + ] +}); diff --git a/jhipster-6/bookstore-monolith/webpack/webpack.dev.js b/jhipster-6/bookstore-monolith/webpack/webpack.dev.js new file mode 100644 index 000000000000..d05a7ddea830 --- /dev/null +++ b/jhipster-6/bookstore-monolith/webpack/webpack.dev.js @@ -0,0 +1,148 @@ +const webpack = require('webpack'); +const writeFilePlugin = require('write-file-webpack-plugin'); +const webpackMerge = require('webpack-merge'); +const BrowserSyncPlugin = require('browser-sync-webpack-plugin'); +const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin'); +const FriendlyErrorsWebpackPlugin = require('friendly-errors-webpack-plugin'); +const SimpleProgressWebpackPlugin = require('simple-progress-webpack-plugin'); +const WebpackNotifierPlugin = require('webpack-notifier'); +const path = require('path'); +const sass = require('sass'); + +const utils = require('./utils.js'); +const commonConfig = require('./webpack.common.js'); + +const ENV = 'development'; + +module.exports = (options) => webpackMerge(commonConfig({ env: ENV }), { + devtool: 'eval-source-map', + devServer: { + contentBase: './target/www', + proxy: [{ + context: [ + /* jhipster-needle-add-entity-to-webpack - JHipster will add entity api paths here */ + '/api', + '/management', + '/swagger-resources', + '/v2/api-docs', + '/h2-console', + '/auth' + ], + target: `http${options.tls ? 's' : ''}://127.0.0.1:8080`, + secure: false, + changeOrigin: options.tls, + headers: { host: 'localhost:9000' } + }], + stats: options.stats, + watchOptions: { + ignored: /node_modules/ + } + }, + entry: { + polyfills: './src/main/webapp/app/polyfills', + global: './src/main/webapp/content/scss/global.scss', + main: './src/main/webapp/app/app.main' + }, + output: { + path: utils.root('target/www'), + filename: 'app/[name].bundle.js', + chunkFilename: 'app/[id].chunk.js' + }, + module: { + rules: [{ + test: /\.ts$/, + enforce: 'pre', + loader: 'tslint-loader', + exclude: [/(node_modules)/, new RegExp('reflect-metadata\\' + path.sep + 'Reflect\\.ts')] + }, + { + test: /\.ts$/, + use: [ + 'angular2-template-loader', + { + loader: 'cache-loader', + options: { + cacheDirectory: path.resolve('target/cache-loader') + } + }, + { + loader: 'thread-loader', + options: { + // there should be 1 cpu for the fork-ts-checker-webpack-plugin + workers: require('os').cpus().length - 1 + } + }, + { + loader: 'ts-loader', + options: { + transpileOnly: true, + happyPackMode: true + } + }, + 'angular-router-loader' + ], + exclude: /(node_modules)/ + }, + { + test: /\.scss$/, + use: ['to-string-loader', 'css-loader', { + loader: 'sass-loader', + options: { implementation: sass } + }], + exclude: /(vendor\.scss|global\.scss)/ + }, + { + test: /(vendor\.scss|global\.scss)/, + use: ['style-loader', 'css-loader', 'postcss-loader', { + loader: 'sass-loader', + options: { implementation: sass } + }] + }, + { + test: /\.css$/, + use: ['to-string-loader', 'css-loader'], + exclude: /(vendor\.css|global\.css)/ + }, + { + test: /(vendor\.css|global\.css)/, + use: ['style-loader', 'css-loader'] + }] + }, + stats: process.env.JHI_DISABLE_WEBPACK_LOGS ? 'none' : options.stats, + plugins: [ + process.env.JHI_DISABLE_WEBPACK_LOGS + ? null + : new SimpleProgressWebpackPlugin({ + format: options.stats === 'minimal' ? 'compact' : 'expanded' + }), + new FriendlyErrorsWebpackPlugin(), + new ForkTsCheckerWebpackPlugin(), + new BrowserSyncPlugin({ + host: 'localhost', + port: 9000, + proxy: { + target: 'http://localhost:9060' + }, + socket: { + clients: { + heartbeatTimeout: 60000 + } + } + }, { + reload: false + }), + new webpack.ContextReplacementPlugin( + /angular(\\|\/)core(\\|\/)/, + path.resolve(__dirname, './src/main/webapp') + ), + new writeFilePlugin(), + new webpack.WatchIgnorePlugin([ + utils.root('src/test'), + ]), + new WebpackNotifierPlugin({ + title: 'JHipster', + contentImage: path.join(__dirname, 'logo-jhipster.png') + }) + ].filter(Boolean), + mode: 'development' +}); diff --git a/jhipster-6/bookstore-monolith/webpack/webpack.prod.js b/jhipster-6/bookstore-monolith/webpack/webpack.prod.js new file mode 100644 index 000000000000..ebafa2f631fc --- /dev/null +++ b/jhipster-6/bookstore-monolith/webpack/webpack.prod.js @@ -0,0 +1,144 @@ +const webpack = require('webpack'); +const webpackMerge = require('webpack-merge'); +const MiniCssExtractPlugin = require('mini-css-extract-plugin'); +const OptimizeCSSAssetsPlugin = require("optimize-css-assets-webpack-plugin"); +const Visualizer = require('webpack-visualizer-plugin'); +const MomentLocalesPlugin = require('moment-locales-webpack-plugin'); +const TerserPlugin = require('terser-webpack-plugin'); +const WorkboxPlugin = require('workbox-webpack-plugin'); +const AngularCompilerPlugin = require('@ngtools/webpack').AngularCompilerPlugin; +const path = require('path'); + +const utils = require('./utils.js'); +const commonConfig = require('./webpack.common.js'); + +const ENV = 'production'; +const sass = require('sass'); + +module.exports = webpackMerge(commonConfig({ env: ENV }), { + // Enable source maps. Please note that this will slow down the build. + // You have to enable it in UglifyJSPlugin config below and in tsconfig-aot.json as well + // devtool: 'source-map', + entry: { + polyfills: './src/main/webapp/app/polyfills', + global: './src/main/webapp/content/scss/global.scss', + main: './src/main/webapp/app/app.main' + }, + output: { + path: utils.root('target/www'), + filename: 'app/[name].[hash].bundle.js', + chunkFilename: 'app/[id].[hash].chunk.js' + }, + module: { + rules: [{ + test: /(?:\.ngfactory\.js|\.ngstyle\.js|\.ts)$/, + loader: '@ngtools/webpack' + }, + { + test: /\.scss$/, + use: ['to-string-loader', 'css-loader', { + loader: 'sass-loader', + options: { implementation: sass } + }], + exclude: /(vendor\.scss|global\.scss)/ + }, + { + test: /(vendor\.scss|global\.scss)/, + use: [ + MiniCssExtractPlugin.loader, + 'css-loader', + 'postcss-loader', + { + loader: 'sass-loader', + options: { implementation: sass } + } + ] + }, + { + test: /\.css$/, + use: ['to-string-loader', 'css-loader'], + exclude: /(vendor\.css|global\.css)/ + }, + { + test: /(vendor\.css|global\.css)/, + use: [ + MiniCssExtractPlugin.loader, + 'css-loader', + 'postcss-loader' + ] + }] + }, + optimization: { + runtimeChunk: false, + splitChunks: { + cacheGroups: { + commons: { + test: /[\\/]node_modules[\\/]/, + name: 'vendors', + chunks: 'all' + } + } + }, + minimizer: [ + new TerserPlugin({ + parallel: true, + cache: true, + terserOptions: { + ie8: false, + // sourceMap: true, // Enable source maps. Please note that this will slow down the build + compress: { + dead_code: true, + warnings: false, + properties: true, + drop_debugger: true, + conditionals: true, + booleans: true, + loops: true, + unused: true, + toplevel: true, + if_return: true, + inline: true, + join_vars: true + }, + output: { + comments: false, + beautify: false, + indent_level: 2 + } + } + }), + new OptimizeCSSAssetsPlugin({}) + ] + }, + plugins: [ + new MiniCssExtractPlugin({ + // Options similar to the same options in webpackOptions.output + // both options are optional + filename: '[name].[contenthash].css', + chunkFilename: '[id].css' + }), + new MomentLocalesPlugin({ + localesToKeep: [ + // jhipster-needle-i18n-language-moment-webpack - JHipster will add/remove languages in this array + ] + }), + new Visualizer({ + // Webpack statistics in target folder + filename: '../stats.html' + }), + new AngularCompilerPlugin({ + mainPath: utils.root('src/main/webapp/app/app.main.ts'), + tsConfigPath: utils.root('tsconfig-aot.json'), + sourceMap: true + }), + new webpack.LoaderOptionsPlugin({ + minimize: true, + debug: false + }), + new WorkboxPlugin.GenerateSW({ + clientsClaim: true, + skipWaiting: true, + }) + ], + mode: 'production' +}); diff --git a/jhipster-6/pom.xml b/jhipster-6/pom.xml new file mode 100644 index 000000000000..b3c5e5831930 --- /dev/null +++ b/jhipster-6/pom.xml @@ -0,0 +1,21 @@ + + 4.0.0 + com.baeldung.jhipster + jhipster-6 + 1.0.0-SNAPSHOT + jhipster-6 + pom + + + parent-boot-2 + com.baeldung + 0.0.1-SNAPSHOT + ../parent-boot-2 + + + + bookstore-monolith + + + diff --git a/pom.xml b/pom.xml index ca50f630ae4d..1cc5f92cf8f1 100644 --- a/pom.xml +++ b/pom.xml @@ -818,6 +818,7 @@ guava-modules kubernetes-modules libraries-concurrency + jhipster-6 libraries-testing maven-modules optaplanner @@ -1068,6 +1069,7 @@ guava-modules kubernetes-modules libraries-concurrency + jhipster-6 libraries-testing maven-modules optaplanner From 56750f13d1c156b8d72e7be869049911bebbddb5 Mon Sep 17 00:00:00 2001 From: Ulisses Lima Date: Mon, 10 Apr 2023 14:17:51 -0300 Subject: [PATCH 056/390] check client still readable --- .../src/main/java/com/baeldung/selector/EchoServer.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/core-java-modules/core-java-nio-2/src/main/java/com/baeldung/selector/EchoServer.java b/core-java-modules/core-java-nio-2/src/main/java/com/baeldung/selector/EchoServer.java index 9e9edcd0baef..c8b638dc046c 100644 --- a/core-java-modules/core-java-nio-2/src/main/java/com/baeldung/selector/EchoServer.java +++ b/core-java-modules/core-java-nio-2/src/main/java/com/baeldung/selector/EchoServer.java @@ -45,8 +45,9 @@ public static void main(String[] args) throws IOException { private static void answerWithEcho(ByteBuffer buffer, SelectionKey key) throws IOException { SocketChannel client = (SocketChannel) key.channel(); - client.read(buffer); - if (new String(buffer.array()).trim().equals(POISON_PILL)) { + int r = client.read(buffer); + if (r == -1 || new String(buffer.array()).trim() + .equals(POISON_PILL)) { client.close(); System.out.println("Not accepting client messages anymore"); } else { From 48255ee387e412840f114d11b30d87407a481a68 Mon Sep 17 00:00:00 2001 From: Bhaskar Date: Mon, 10 Apr 2023 23:49:37 +0530 Subject: [PATCH 057/390] [JAVA-6173] stream.parallelStream and Collections parallel stream differences --- core-java-modules/core-java-streams-5/pom.xml | 72 +++++++++++++++++++ .../baeldung/streams/parallelstream/Book.java | 2 +- .../parallelstream/BookSpliterator.java | 2 +- .../parallelstream/MyBookContainer.java | 2 +- .../ParallelStreamApplication.java | 2 +- .../ParallelStreamUnitTest.java | 3 +- 6 files changed, 77 insertions(+), 6 deletions(-) create mode 100644 core-java-modules/core-java-streams-5/pom.xml rename core-java-modules/{core-java-streams-4 => core-java-streams-5}/src/main/java/com/baeldung/streams/parallelstream/Book.java (99%) rename core-java-modules/{core-java-streams-4 => core-java-streams-5}/src/main/java/com/baeldung/streams/parallelstream/BookSpliterator.java (99%) rename core-java-modules/{core-java-streams-4 => core-java-streams-5}/src/main/java/com/baeldung/streams/parallelstream/MyBookContainer.java (99%) rename core-java-modules/{core-java-streams-4 => core-java-streams-5}/src/main/java/com/baeldung/streams/parallelstream/ParallelStreamApplication.java (99%) rename core-java-modules/{core-java-streams-4/src/test/java => core-java-streams-5/src/test/java/com/baeldung}/parallelstream/ParallelStreamUnitTest.java (97%) diff --git a/core-java-modules/core-java-streams-5/pom.xml b/core-java-modules/core-java-streams-5/pom.xml new file mode 100644 index 000000000000..d1f8af64618b --- /dev/null +++ b/core-java-modules/core-java-streams-5/pom.xml @@ -0,0 +1,72 @@ + + + 4.0.0 + core-java-streams-5 + core-java-streams-5 + jar + + + com.baeldung.core-java-modules + core-java-modules + 0.0.1-SNAPSHOT + + + + + log4j + log4j + ${log4j.version} + + + org.junit + junit-bom + ${junit-jupiter.version} + pom + import + + + org.assertj + assertj-core + 3.23.1 + test + + + org.apache.commons + commons-lang3 + 3.12.0 + test + + + + + core-java-streams-4 + + + ../core-java-streams-4/src/main + true + + + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + ${maven.compiler.source} + ${maven.compiler.target} + -parameters + + + + + + + + 3.1 + 12 + 12 + + + \ No newline at end of file diff --git a/core-java-modules/core-java-streams-4/src/main/java/com/baeldung/streams/parallelstream/Book.java b/core-java-modules/core-java-streams-5/src/main/java/com/baeldung/streams/parallelstream/Book.java similarity index 99% rename from core-java-modules/core-java-streams-4/src/main/java/com/baeldung/streams/parallelstream/Book.java rename to core-java-modules/core-java-streams-5/src/main/java/com/baeldung/streams/parallelstream/Book.java index 165df551665e..d52a31aac955 100644 --- a/core-java-modules/core-java-streams-4/src/main/java/com/baeldung/streams/parallelstream/Book.java +++ b/core-java-modules/core-java-streams-5/src/main/java/com/baeldung/streams/parallelstream/Book.java @@ -34,4 +34,4 @@ public int getYearPublished() { public void setYearPublished(int yearPublished) { this.yearPublished = yearPublished; } -} +} \ No newline at end of file diff --git a/core-java-modules/core-java-streams-4/src/main/java/com/baeldung/streams/parallelstream/BookSpliterator.java b/core-java-modules/core-java-streams-5/src/main/java/com/baeldung/streams/parallelstream/BookSpliterator.java similarity index 99% rename from core-java-modules/core-java-streams-4/src/main/java/com/baeldung/streams/parallelstream/BookSpliterator.java rename to core-java-modules/core-java-streams-5/src/main/java/com/baeldung/streams/parallelstream/BookSpliterator.java index 14e87e0b07d5..7460e1372b6f 100644 --- a/core-java-modules/core-java-streams-4/src/main/java/com/baeldung/streams/parallelstream/BookSpliterator.java +++ b/core-java-modules/core-java-streams-5/src/main/java/com/baeldung/streams/parallelstream/BookSpliterator.java @@ -37,4 +37,4 @@ public long estimateSize() { public int characteristics() { return CONCURRENT; } -} +} \ No newline at end of file diff --git a/core-java-modules/core-java-streams-4/src/main/java/com/baeldung/streams/parallelstream/MyBookContainer.java b/core-java-modules/core-java-streams-5/src/main/java/com/baeldung/streams/parallelstream/MyBookContainer.java similarity index 99% rename from core-java-modules/core-java-streams-4/src/main/java/com/baeldung/streams/parallelstream/MyBookContainer.java rename to core-java-modules/core-java-streams-5/src/main/java/com/baeldung/streams/parallelstream/MyBookContainer.java index dc4b0e2623ee..d7e3adc5f180 100644 --- a/core-java-modules/core-java-streams-4/src/main/java/com/baeldung/streams/parallelstream/MyBookContainer.java +++ b/core-java-modules/core-java-streams-5/src/main/java/com/baeldung/streams/parallelstream/MyBookContainer.java @@ -90,4 +90,4 @@ public boolean retainAll(Collection c) { public void clear() { } -} +} \ No newline at end of file diff --git a/core-java-modules/core-java-streams-4/src/main/java/com/baeldung/streams/parallelstream/ParallelStreamApplication.java b/core-java-modules/core-java-streams-5/src/main/java/com/baeldung/streams/parallelstream/ParallelStreamApplication.java similarity index 99% rename from core-java-modules/core-java-streams-4/src/main/java/com/baeldung/streams/parallelstream/ParallelStreamApplication.java rename to core-java-modules/core-java-streams-5/src/main/java/com/baeldung/streams/parallelstream/ParallelStreamApplication.java index 9cdaf58bfb46..4297bdd3ed0d 100644 --- a/core-java-modules/core-java-streams-4/src/main/java/com/baeldung/streams/parallelstream/ParallelStreamApplication.java +++ b/core-java-modules/core-java-streams-5/src/main/java/com/baeldung/streams/parallelstream/ParallelStreamApplication.java @@ -38,4 +38,4 @@ public long usingWithCustomSpliterator(MyBookContainer listOfBooks, int ye }); return countOfBooks.get(); } -} +} \ No newline at end of file diff --git a/core-java-modules/core-java-streams-4/src/test/java/parallelstream/ParallelStreamUnitTest.java b/core-java-modules/core-java-streams-5/src/test/java/com/baeldung/parallelstream/ParallelStreamUnitTest.java similarity index 97% rename from core-java-modules/core-java-streams-4/src/test/java/parallelstream/ParallelStreamUnitTest.java rename to core-java-modules/core-java-streams-5/src/test/java/com/baeldung/parallelstream/ParallelStreamUnitTest.java index 5542a21020d8..af8172a10dd1 100644 --- a/core-java-modules/core-java-streams-4/src/test/java/parallelstream/ParallelStreamUnitTest.java +++ b/core-java-modules/core-java-streams-5/src/test/java/com/baeldung/parallelstream/ParallelStreamUnitTest.java @@ -1,6 +1,5 @@ -package parallelstream; +package com.baeldung.parallelstream; -import java.util.ArrayList; import java.util.List; import org.junit.Assert; From addbe7dc524b706062ca25ed20685a36b014fbb6 Mon Sep 17 00:00:00 2001 From: Tapan Avasthi Date: Tue, 11 Apr 2023 04:26:04 +0530 Subject: [PATCH 058/390] BAEL-5027: Use BuildProperties bean for getting build information (#13794) Co-authored-by: Tapan Avasthi --- .../spring-boot-properties/pom.xml | 23 ++++++++++++-- .../BuildPropertiesUnitTest.java | 30 +++++++++++++++++++ 2 files changed, 51 insertions(+), 2 deletions(-) create mode 100644 spring-boot-modules/spring-boot-properties/src/test/java/com/baeldung/buildproperties/BuildPropertiesUnitTest.java diff --git a/spring-boot-modules/spring-boot-properties/pom.xml b/spring-boot-modules/spring-boot-properties/pom.xml index 378864a1dfcd..0d076581b7b1 100644 --- a/spring-boot-modules/spring-boot-properties/pom.xml +++ b/spring-boot-modules/spring-boot-properties/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 spring-boot-properties 0.0.1-SNAPSHOT @@ -74,6 +74,25 @@ + + org.springframework.boot + spring-boot-maven-plugin + + + build-info + + build-info + + + + ${java.version} + ${project.description} + 123 + + + + + org.apache.maven.plugins maven-resources-plugin diff --git a/spring-boot-modules/spring-boot-properties/src/test/java/com/baeldung/buildproperties/BuildPropertiesUnitTest.java b/spring-boot-modules/spring-boot-properties/src/test/java/com/baeldung/buildproperties/BuildPropertiesUnitTest.java new file mode 100644 index 000000000000..cf9b9336e625 --- /dev/null +++ b/spring-boot-modules/spring-boot-properties/src/test/java/com/baeldung/buildproperties/BuildPropertiesUnitTest.java @@ -0,0 +1,30 @@ +package com.baeldung.buildproperties; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.info.BuildProperties; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +@SpringBootTest +@ExtendWith(SpringExtension.class) +public class BuildPropertiesUnitTest { + @Autowired + private BuildProperties buildProperties; + + @Test + void givenBuildPropertiesBean_WhenFetchDefaultBuildProperties_ThenGetValidValues() { + Assertions.assertEquals("spring-boot-properties", buildProperties.getArtifact()); + Assertions.assertEquals("com.baeldung.spring-boot-modules", buildProperties.getGroup()); + Assertions.assertEquals("0.0.1-SNAPSHOT", buildProperties.getVersion()); + } + + @Test + void givenBuildPropertiesBean_WhenFetchCustomBuildProprties_ThenGetValidValues() { + Assertions.assertEquals("123", buildProperties.get("custom.value")); + Assertions.assertNotNull(buildProperties.get("java.version")); + Assertions.assertEquals("Spring Boot Properties Module", buildProperties.get("description")); + } +} From 1ff95d4cb80ff220a59e5363ff11c4cbad5023ad Mon Sep 17 00:00:00 2001 From: Azhwani <13301425+azhwani@users.noreply.github.com> Date: Tue, 11 Apr 2023 08:38:52 +0200 Subject: [PATCH 059/390] BAEL-6313: Supporting ImmutableMap.ofEntries in Guava (#13751) --- .../baeldung/map/ImmutableMapUnitTest.java | 194 +++++++++++------- 1 file changed, 118 insertions(+), 76 deletions(-) diff --git a/core-java-modules/core-java-collections-maps/src/test/java/com/baeldung/map/ImmutableMapUnitTest.java b/core-java-modules/core-java-collections-maps/src/test/java/com/baeldung/map/ImmutableMapUnitTest.java index d308aac7eb06..4ac562ef045f 100644 --- a/core-java-modules/core-java-collections-maps/src/test/java/com/baeldung/map/ImmutableMapUnitTest.java +++ b/core-java-modules/core-java-collections-maps/src/test/java/com/baeldung/map/ImmutableMapUnitTest.java @@ -1,84 +1,126 @@ package com.baeldung.map; -import com.google.common.collect.ImmutableMap; -import org.junit.jupiter.api.Test; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; +import java.util.AbstractMap; import java.util.Collections; import java.util.HashMap; import java.util.Map; -import static org.junit.jupiter.api.Assertions.*; - - -public class ImmutableMapUnitTest { - - @Test - public void whenCollectionsUnModifiableMapMethod_thenOriginalCollectionChangesReflectInUnmodifiableMap() { - - Map mutableMap = new HashMap<>(); - mutableMap.put("USA", "North America"); - - Map unmodifiableMap = Collections.unmodifiableMap(mutableMap); - assertThrows(UnsupportedOperationException.class, () -> unmodifiableMap.put("Canada", "North America")); - - mutableMap.remove("USA"); - assertFalse(unmodifiableMap.containsKey("USA")); - - mutableMap.put("Mexico", "North America"); - assertTrue(unmodifiableMap.containsKey("Mexico")); - } - - @Test - @SuppressWarnings("deprecation") - public void whenGuavaImmutableMapFromCopyOfMethod_thenOriginalCollectionChangesDoNotReflectInImmutableMap() { - - Map mutableMap = new HashMap<>(); - mutableMap.put("USA", "North America"); - - ImmutableMap immutableMap = ImmutableMap.copyOf(mutableMap); - assertTrue(immutableMap.containsKey("USA")); - - assertThrows(UnsupportedOperationException.class, () -> immutableMap.put("Canada", "North America")); - - mutableMap.remove("USA"); - assertTrue(immutableMap.containsKey("USA")); - - mutableMap.put("Mexico", "North America"); - assertFalse(immutableMap.containsKey("Mexico")); - } - - @Test - @SuppressWarnings("deprecation") - public void whenGuavaImmutableMapFromBuilderMethod_thenOriginalCollectionChangesDoNotReflectInImmutableMap() { - - Map mutableMap = new HashMap<>(); - mutableMap.put("USA", "North America"); - - ImmutableMap immutableMap = ImmutableMap.builder() - .putAll(mutableMap) - .put("Costa Rica", "North America") - .build(); - assertTrue(immutableMap.containsKey("USA")); - assertTrue(immutableMap.containsKey("Costa Rica")); - - assertThrows(UnsupportedOperationException.class, () -> immutableMap.put("Canada", "North America")); - - mutableMap.remove("USA"); - assertTrue(immutableMap.containsKey("USA")); - - mutableMap.put("Mexico", "North America"); - assertFalse(immutableMap.containsKey("Mexico")); - } - - @Test - @SuppressWarnings("deprecation") - public void whenGuavaImmutableMapFromOfMethod_thenOriginalCollectionChangesDoNotReflectInImmutableMap() { - - ImmutableMap immutableMap = ImmutableMap.of("USA", "North America", "Costa Rica", "North America"); - assertTrue(immutableMap.containsKey("USA")); - assertTrue(immutableMap.containsKey("Costa Rica")); - - assertThrows(UnsupportedOperationException.class, () -> immutableMap.put("Canada", "North America")); - } - +import org.hamcrest.collection.IsMapContaining; +import org.junit.jupiter.api.Test; + +import com.google.common.collect.ImmutableMap; + +class ImmutableMapUnitTest { + + @Test + void whenCollectionsUnModifiableMapMethod_thenOriginalCollectionChangesReflectInUnmodifiableMap() { + + Map mutableMap = new HashMap<>(); + mutableMap.put("USA", "North America"); + + Map unmodifiableMap = Collections.unmodifiableMap(mutableMap); + assertThrows(UnsupportedOperationException.class, () -> unmodifiableMap.put("Canada", "North America")); + + mutableMap.remove("USA"); + assertFalse(unmodifiableMap.containsKey("USA")); + + mutableMap.put("Mexico", "North America"); + assertTrue(unmodifiableMap.containsKey("Mexico")); + } + + @Test + @SuppressWarnings("deprecation") + void whenGuavaImmutableMapFromCopyOfMethod_thenOriginalCollectionChangesDoNotReflectInImmutableMap() { + + Map mutableMap = new HashMap<>(); + mutableMap.put("USA", "North America"); + + ImmutableMap immutableMap = ImmutableMap.copyOf(mutableMap); + assertTrue(immutableMap.containsKey("USA")); + + assertThrows(UnsupportedOperationException.class, () -> immutableMap.put("Canada", "North America")); + + mutableMap.remove("USA"); + assertTrue(immutableMap.containsKey("USA")); + + mutableMap.put("Mexico", "North America"); + assertFalse(immutableMap.containsKey("Mexico")); + } + + @Test + @SuppressWarnings("deprecation") + void whenGuavaImmutableMapFromBuilderMethod_thenOriginalCollectionChangesDoNotReflectInImmutableMap() { + + Map mutableMap = new HashMap<>(); + mutableMap.put("USA", "North America"); + + ImmutableMap immutableMap = ImmutableMap.builder() + .putAll(mutableMap) + .put("Costa Rica", "North America") + .build(); + assertTrue(immutableMap.containsKey("USA")); + assertTrue(immutableMap.containsKey("Costa Rica")); + + assertThrows(UnsupportedOperationException.class, () -> immutableMap.put("Canada", "North America")); + + mutableMap.remove("USA"); + assertTrue(immutableMap.containsKey("USA")); + + mutableMap.put("Mexico", "North America"); + assertFalse(immutableMap.containsKey("Mexico")); + } + + @Test + @SuppressWarnings("deprecation") + void whenGuavaImmutableMapFromOfMethod_thenOriginalCollectionChangesDoNotReflectInImmutableMap() { + + ImmutableMap immutableMap = ImmutableMap.of("USA", "North America", "Costa Rica", "North America"); + assertTrue(immutableMap.containsKey("USA")); + assertTrue(immutableMap.containsKey("Costa Rica")); + + assertThrows(UnsupportedOperationException.class, () -> immutableMap.put("Canada", "North America")); + } + + @Test + @SuppressWarnings("deprecation") + void givenGuavaImmutableMapFromOfEntriesMethodwhenModifyEntry_thenThrowUnsupportedOperationException() { + + ImmutableMap immutableMap = ImmutableMap.ofEntries(new AbstractMap.SimpleEntry<>(1, "USA"), new AbstractMap.SimpleEntry<>(2, "Canada")); + + assertThrows(UnsupportedOperationException.class, () -> immutableMap.put(2, "Mexico")); + } + + @Test + void givenEntrieswhenCreatingGuavaImmutableMapFromOfEntriesMethod_thenCorrect() { + + ImmutableMap immutableMap = ImmutableMap.ofEntries(new AbstractMap.SimpleEntry<>(1, "USA")); + + assertEquals(1, immutableMap.size()); + assertThat(immutableMap, IsMapContaining.hasEntry(1, "USA")); + } + + @Test + void givenGuavaImmutableMapFromOfEntriesMethodwhenEntryKeyExists_thenThrowIllegalArgumentException() { + + assertThrows(IllegalArgumentException.class, () -> ImmutableMap.ofEntries(new AbstractMap.SimpleEntry<>(1, "USA"), new AbstractMap.SimpleEntry<>(1, "Canada"))); + } + + @Test + void givenGuavaImmutableMapFromOfEntriesMethodwhenEntryKeyIsNull_thenThrowNullPointerException() { + + assertThrows(NullPointerException.class, () -> ImmutableMap.ofEntries(new AbstractMap.SimpleEntry<>(null, "USA"))); + } + + @Test + void givenGuavaImmutableMapFromOfEntriesMethodwhenEntryValueIsNull_thenThrowNullPointerException() { + + assertThrows(NullPointerException.class, () -> ImmutableMap.ofEntries(new AbstractMap.SimpleEntry<>(1, null))); + } + } From 679bf08ea2f5385101be4ed778e736aa176a9732 Mon Sep 17 00:00:00 2001 From: anuragkumawat Date: Tue, 11 Apr 2023 12:49:28 +0530 Subject: [PATCH 060/390] JAVA-19117 Create new core-java-documentation sub module under core-java-modules (#13619) * JAVA-19117 Create new core-java-documentation sub module under core-java-modules https://team.baeldung.com/browse/JAVA-19117 --- .../core-java-documentation/README.md | 6 +++ .../core-java-documentation/pom.xml | 41 +++++++++++++++++++ .../javadoc/CodeSnippetFormatting.java | 0 .../java/com/baeldung/javadoc/Person.java | 0 .../java/com/baeldung/javadoc/SuperHero.java | 0 core-java-modules/core-java/README.md | 1 - core-java-modules/core-java/pom.xml | 12 ------ core-java-modules/pom.xml | 1 + 8 files changed, 48 insertions(+), 13 deletions(-) create mode 100644 core-java-modules/core-java-documentation/README.md create mode 100644 core-java-modules/core-java-documentation/pom.xml rename core-java-modules/{core-java => core-java-documentation}/src/main/java/com/baeldung/javadoc/CodeSnippetFormatting.java (100%) rename core-java-modules/{core-java => core-java-documentation}/src/main/java/com/baeldung/javadoc/Person.java (100%) rename core-java-modules/{core-java => core-java-documentation}/src/main/java/com/baeldung/javadoc/SuperHero.java (100%) diff --git a/core-java-modules/core-java-documentation/README.md b/core-java-modules/core-java-documentation/README.md new file mode 100644 index 000000000000..b66b9e8c0562 --- /dev/null +++ b/core-java-modules/core-java-documentation/README.md @@ -0,0 +1,6 @@ +## Core Java Documentation + +### Relevant Articles: + +- [Introduction to Javadoc](http://www.baeldung.com/javadoc) + diff --git a/core-java-modules/core-java-documentation/pom.xml b/core-java-modules/core-java-documentation/pom.xml new file mode 100644 index 000000000000..be18af1b1001 --- /dev/null +++ b/core-java-modules/core-java-documentation/pom.xml @@ -0,0 +1,41 @@ + + + 4.0.0 + core-java-documentation + 0.1.0-SNAPSHOT + core-java-documentation + jar + + + com.baeldung.core-java-modules + core-java-modules + 0.0.1-SNAPSHOT + + + + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + ${maven-javadoc-plugin.version} + + ${source.version} + ${target.version} + + + + + + + + 3.0.0-M1 + 1.8 + 1.8 + + + \ No newline at end of file diff --git a/core-java-modules/core-java/src/main/java/com/baeldung/javadoc/CodeSnippetFormatting.java b/core-java-modules/core-java-documentation/src/main/java/com/baeldung/javadoc/CodeSnippetFormatting.java similarity index 100% rename from core-java-modules/core-java/src/main/java/com/baeldung/javadoc/CodeSnippetFormatting.java rename to core-java-modules/core-java-documentation/src/main/java/com/baeldung/javadoc/CodeSnippetFormatting.java diff --git a/core-java-modules/core-java/src/main/java/com/baeldung/javadoc/Person.java b/core-java-modules/core-java-documentation/src/main/java/com/baeldung/javadoc/Person.java similarity index 100% rename from core-java-modules/core-java/src/main/java/com/baeldung/javadoc/Person.java rename to core-java-modules/core-java-documentation/src/main/java/com/baeldung/javadoc/Person.java diff --git a/core-java-modules/core-java/src/main/java/com/baeldung/javadoc/SuperHero.java b/core-java-modules/core-java-documentation/src/main/java/com/baeldung/javadoc/SuperHero.java similarity index 100% rename from core-java-modules/core-java/src/main/java/com/baeldung/javadoc/SuperHero.java rename to core-java-modules/core-java-documentation/src/main/java/com/baeldung/javadoc/SuperHero.java diff --git a/core-java-modules/core-java/README.md b/core-java-modules/core-java/README.md index f29d6abd7c2c..8858c58b1c73 100644 --- a/core-java-modules/core-java/README.md +++ b/core-java-modules/core-java/README.md @@ -5,6 +5,5 @@ - [Getting Started with Java Properties](http://www.baeldung.com/java-properties) - [Java Money and the Currency API](http://www.baeldung.com/java-money-and-currency) - [Compiling Java *.class Files with javac](http://www.baeldung.com/javac) -- [Introduction to Javadoc](http://www.baeldung.com/javadoc) - [Merging java.util.Properties Objects](https://www.baeldung.com/java-merging-properties) - [Illegal Character Compilation Error](https://www.baeldung.com/java-illegal-character-error) diff --git a/core-java-modules/core-java/pom.xml b/core-java-modules/core-java/pom.xml index 552999702eba..9ccfc7cbd8d9 100644 --- a/core-java-modules/core-java/pom.xml +++ b/core-java-modules/core-java/pom.xml @@ -110,15 +110,6 @@ - - org.apache.maven.plugins - maven-javadoc-plugin - ${maven-javadoc-plugin.version} - - ${source.version} - ${target.version} - - @@ -188,9 +179,6 @@ 1.8.7 1.1 - 3.0.0-M1 - 1.8 - 1.8 4.3.20.RELEASE 1.47.1 diff --git a/core-java-modules/pom.xml b/core-java-modules/pom.xml index c5dbdca29966..6cf4c7bee0cb 100644 --- a/core-java-modules/pom.xml +++ b/core-java-modules/pom.xml @@ -67,6 +67,7 @@ core-java-datetime-string-2 core-java-date-operations-2 core-java-date-operations-3 + core-java-documentation core-java-exceptions core-java-exceptions-2 core-java-exceptions-3 From bdc1cba9cf471a7b161be111dd0cce7eed69a1ec Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Tue, 11 Apr 2023 11:10:31 +0300 Subject: [PATCH 061/390] upgrade to boot 3, fix startup error --- .../spring-reactive-exceptions/pom.xml | 18 +++++------------- .../src/main/resources/application.yaml | 2 ++ 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/spring-reactive-modules/spring-reactive-exceptions/pom.xml b/spring-reactive-modules/spring-reactive-exceptions/pom.xml index 024a8332c25c..fc08e076595a 100644 --- a/spring-reactive-modules/spring-reactive-exceptions/pom.xml +++ b/spring-reactive-modules/spring-reactive-exceptions/pom.xml @@ -8,10 +8,11 @@ spring-reactive-exceptions A module to hold demo examples related to exception in Spring Reactive - - com.baeldung.spring.reactive - spring-reactive-modules - 1.0.0-SNAPSHOT + + com.baeldung + parent-boot-3 + 0.0.1-SNAPSHOT + ../../parent-boot-3 @@ -23,7 +24,6 @@ org.projectlombok lombok - true org.springframework.boot @@ -42,14 +42,6 @@ org.springframework.boot spring-boot-maven-plugin - - - - org.projectlombok - lombok - - - diff --git a/spring-reactive-modules/spring-reactive-exceptions/src/main/resources/application.yaml b/spring-reactive-modules/spring-reactive-exceptions/src/main/resources/application.yaml index 5f3c8b82a959..50bcbff43358 100644 --- a/spring-reactive-modules/spring-reactive-exceptions/src/main/resources/application.yaml +++ b/spring-reactive-modules/spring-reactive-exceptions/src/main/resources/application.yaml @@ -2,4 +2,6 @@ spring: codec: max-in-memory-size: 500KB +server: + port: 8080 host: http://localhost:${server.port} From 84c29e62e9fabecffb6e4299ba7763984a06fc0a Mon Sep 17 00:00:00 2001 From: timis1 <12120641+timis1@users.noreply.github.com> Date: Tue, 11 Apr 2023 12:04:58 +0300 Subject: [PATCH 062/390] JAVA-18601 Update "Java Bean Validation Basics" article (#13654) * JAVA-18601 Update "Java Bean Validation Basics" article --------- Co-authored-by: timis1 --- javaxval/pom.xml | 25 +------------------ .../javaxval/beanvalidation/User.java | 16 ++++++------ .../baeldung/javaxval/bigdecimal/Invoice.java | 4 +-- .../composition/AlphanumericReturnValue.java | 12 ++++----- .../composition/ValidAlphanumeric.java | 8 +++--- .../ValidAlphanumericWithSingleViolation.java | 10 ++++---- .../ValidLengthOrNumericCharacter.java | 6 ++--- .../container/validation/Customer.java | 6 ++--- .../container/validation/CustomerMap.java | 4 +-- .../ProfileValueExtractor.java | 6 ++--- .../enums/CustomerTypeSubSetValidator.java | 4 +-- .../enums/EnumNamePatternValidator.java | 4 +-- .../javaxval/enums/EnumSubSetValidator.java | 4 +-- .../javaxval/enums/ValueOfEnumValidator.java | 4 +-- .../enums/constraints/CustomerTypeSubset.java | 4 +-- .../enums/constraints/EnumNamePattern.java | 4 +-- .../enums/constraints/ValueOfEnum.java | 4 +-- .../javaxval/enums/demo/Customer.java | 2 +- .../application/Application.java | 4 +-- .../entities/UserNotBlank.java | 2 +- .../entities/UserNotEmpty.java | 2 +- .../entities/UserNotNull.java | 2 +- .../validationgroup/CompleteInfo.java | 2 +- .../validationgroup/RegistrationForm.java | 4 +-- .../ValidationIntegrationTest.java | 8 +++--- .../javaxval/bigdecimal/InvoiceUnitTest.java | 6 ++--- .../ConstraintCompositionUnitTest.java | 10 ++++---- .../ContainerValidationIntegrationTest.java | 8 +++--- .../CustomerTypeSubSetValidatorUnitTest.java | 6 ++--- .../EnumNamePatternValidatorUnitTest.java | 6 ++--- .../enums/ValueOfEnumValidatorUnitTest.java | 6 ++--- .../javaxval/enums/demo/CustomerUnitTest.java | 6 ++--- .../UserNotBlankUnitTest.java | 6 ++--- .../UserNotEmptyUnitTest.java | 6 ++--- .../UserNotNullUnitTest.java | 6 ++--- .../RegistrationFormUnitTest.java | 6 ++--- 36 files changed, 100 insertions(+), 123 deletions(-) diff --git a/javaxval/pom.xml b/javaxval/pom.xml index 78f37c20d900..bececb2ea781 100644 --- a/javaxval/pom.xml +++ b/javaxval/pom.xml @@ -13,26 +13,6 @@ - - org.hibernate.validator - hibernate-validator - ${hibernate-validator.version} - - - org.glassfish - javax.el - ${javax.el.version} - - - org.springframework - spring-context - ${org.springframework.version} - - - org.springframework - spring-test - ${org.springframework.version} - org.springframework.boot spring-boot-starter-validation @@ -57,11 +37,8 @@ - 6.2.3.Final 6.2.0.Final - 3.0.0 - 5.3.21 - 2.7.1 + 3.0.4 \ No newline at end of file diff --git a/javaxval/src/main/java/com/baeldung/javaxval/beanvalidation/User.java b/javaxval/src/main/java/com/baeldung/javaxval/beanvalidation/User.java index d583ac51d241..7305b6c20118 100644 --- a/javaxval/src/main/java/com/baeldung/javaxval/beanvalidation/User.java +++ b/javaxval/src/main/java/com/baeldung/javaxval/beanvalidation/User.java @@ -4,14 +4,14 @@ import java.util.List; import java.util.Optional; -import javax.validation.constraints.AssertTrue; -import javax.validation.constraints.Email; -import javax.validation.constraints.Max; -import javax.validation.constraints.Min; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Past; -import javax.validation.constraints.Size; +import jakarta.validation.constraints.AssertTrue; +import jakarta.validation.constraints.Email; +import jakarta.validation.constraints.Max; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Past; +import jakarta.validation.constraints.Size; public class User { diff --git a/javaxval/src/main/java/com/baeldung/javaxval/bigdecimal/Invoice.java b/javaxval/src/main/java/com/baeldung/javaxval/bigdecimal/Invoice.java index c14a6bd2b125..c946a8df68e7 100644 --- a/javaxval/src/main/java/com/baeldung/javaxval/bigdecimal/Invoice.java +++ b/javaxval/src/main/java/com/baeldung/javaxval/bigdecimal/Invoice.java @@ -2,8 +2,8 @@ import java.math.BigDecimal; -import javax.validation.constraints.DecimalMin; -import javax.validation.constraints.Digits; +import jakarta.validation.constraints.DecimalMin; +import jakarta.validation.constraints.Digits; public class Invoice { diff --git a/javaxval/src/main/java/com/baeldung/javaxval/constraint/composition/AlphanumericReturnValue.java b/javaxval/src/main/java/com/baeldung/javaxval/constraint/composition/AlphanumericReturnValue.java index 6e3408712bfb..65f6eceb3400 100644 --- a/javaxval/src/main/java/com/baeldung/javaxval/constraint/composition/AlphanumericReturnValue.java +++ b/javaxval/src/main/java/com/baeldung/javaxval/constraint/composition/AlphanumericReturnValue.java @@ -2,12 +2,12 @@ import org.hibernate.validator.constraints.Length; -import javax.validation.Constraint; -import javax.validation.Payload; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Pattern; -import javax.validation.constraintvalidation.SupportedValidationTarget; -import javax.validation.constraintvalidation.ValidationTarget; +import jakarta.validation.Constraint; +import jakarta.validation.Payload; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Pattern; +import jakarta.validation.constraintvalidation.SupportedValidationTarget; +import jakarta.validation.constraintvalidation.ValidationTarget; import java.lang.annotation.Documented; import java.lang.annotation.Retention; diff --git a/javaxval/src/main/java/com/baeldung/javaxval/constraint/composition/ValidAlphanumeric.java b/javaxval/src/main/java/com/baeldung/javaxval/constraint/composition/ValidAlphanumeric.java index 916b4e36a472..9d4d4995c536 100644 --- a/javaxval/src/main/java/com/baeldung/javaxval/constraint/composition/ValidAlphanumeric.java +++ b/javaxval/src/main/java/com/baeldung/javaxval/constraint/composition/ValidAlphanumeric.java @@ -11,10 +11,10 @@ import java.lang.annotation.Retention; import java.lang.annotation.Target; -import javax.validation.Constraint; -import javax.validation.Payload; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Pattern; +import jakarta.validation.Constraint; +import jakarta.validation.Payload; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Pattern; import org.hibernate.validator.constraints.Length; diff --git a/javaxval/src/main/java/com/baeldung/javaxval/constraint/composition/ValidAlphanumericWithSingleViolation.java b/javaxval/src/main/java/com/baeldung/javaxval/constraint/composition/ValidAlphanumericWithSingleViolation.java index edc5b6af3e65..31eca29a0771 100644 --- a/javaxval/src/main/java/com/baeldung/javaxval/constraint/composition/ValidAlphanumericWithSingleViolation.java +++ b/javaxval/src/main/java/com/baeldung/javaxval/constraint/composition/ValidAlphanumericWithSingleViolation.java @@ -11,11 +11,11 @@ import java.lang.annotation.Retention; import java.lang.annotation.Target; -import javax.validation.Constraint; -import javax.validation.Payload; -import javax.validation.ReportAsSingleViolation; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Pattern; +import jakarta.validation.Constraint; +import jakarta.validation.Payload; +import jakarta.validation.ReportAsSingleViolation; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Pattern; import org.hibernate.validator.constraints.Length; diff --git a/javaxval/src/main/java/com/baeldung/javaxval/constraint/composition/ValidLengthOrNumericCharacter.java b/javaxval/src/main/java/com/baeldung/javaxval/constraint/composition/ValidLengthOrNumericCharacter.java index 444cb4a63a93..9f46e1e7b856 100644 --- a/javaxval/src/main/java/com/baeldung/javaxval/constraint/composition/ValidLengthOrNumericCharacter.java +++ b/javaxval/src/main/java/com/baeldung/javaxval/constraint/composition/ValidLengthOrNumericCharacter.java @@ -4,9 +4,9 @@ import org.hibernate.validator.constraints.ConstraintComposition; import org.hibernate.validator.constraints.Length; -import javax.validation.Constraint; -import javax.validation.Payload; -import javax.validation.constraints.Pattern; +import jakarta.validation.Constraint; +import jakarta.validation.Payload; +import jakarta.validation.constraints.Pattern; import java.lang.annotation.Documented; import java.lang.annotation.Retention; diff --git a/javaxval/src/main/java/com/baeldung/javaxval/container/validation/Customer.java b/javaxval/src/main/java/com/baeldung/javaxval/container/validation/Customer.java index 03811635eed0..c0b23f0ae8f3 100644 --- a/javaxval/src/main/java/com/baeldung/javaxval/container/validation/Customer.java +++ b/javaxval/src/main/java/com/baeldung/javaxval/container/validation/Customer.java @@ -4,9 +4,9 @@ import java.util.Optional; import java.util.OptionalInt; -import javax.validation.constraints.Min; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.PositiveOrZero; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.PositiveOrZero; public class Customer { diff --git a/javaxval/src/main/java/com/baeldung/javaxval/container/validation/CustomerMap.java b/javaxval/src/main/java/com/baeldung/javaxval/container/validation/CustomerMap.java index 554285fbae7f..902f04c654c2 100644 --- a/javaxval/src/main/java/com/baeldung/javaxval/container/validation/CustomerMap.java +++ b/javaxval/src/main/java/com/baeldung/javaxval/container/validation/CustomerMap.java @@ -2,8 +2,8 @@ import java.util.Map; -import javax.validation.constraints.Email; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.Email; +import jakarta.validation.constraints.NotNull; public class CustomerMap { diff --git a/javaxval/src/main/java/com/baeldung/javaxval/container/validation/valueextractors/ProfileValueExtractor.java b/javaxval/src/main/java/com/baeldung/javaxval/container/validation/valueextractors/ProfileValueExtractor.java index 03e0c7aac4de..a3a21fe88b0e 100644 --- a/javaxval/src/main/java/com/baeldung/javaxval/container/validation/valueextractors/ProfileValueExtractor.java +++ b/javaxval/src/main/java/com/baeldung/javaxval/container/validation/valueextractors/ProfileValueExtractor.java @@ -1,8 +1,8 @@ package com.baeldung.javaxval.container.validation.valueextractors; -import javax.validation.valueextraction.ExtractedValue; -import javax.validation.valueextraction.UnwrapByDefault; -import javax.validation.valueextraction.ValueExtractor; +import jakarta.validation.valueextraction.ExtractedValue; +import jakarta.validation.valueextraction.UnwrapByDefault; +import jakarta.validation.valueextraction.ValueExtractor; import com.baeldung.javaxval.container.validation.Profile; diff --git a/javaxval/src/main/java/com/baeldung/javaxval/enums/CustomerTypeSubSetValidator.java b/javaxval/src/main/java/com/baeldung/javaxval/enums/CustomerTypeSubSetValidator.java index c91f449badf8..da86ec6c89da 100644 --- a/javaxval/src/main/java/com/baeldung/javaxval/enums/CustomerTypeSubSetValidator.java +++ b/javaxval/src/main/java/com/baeldung/javaxval/enums/CustomerTypeSubSetValidator.java @@ -2,8 +2,8 @@ import java.util.Arrays; -import javax.validation.ConstraintValidator; -import javax.validation.ConstraintValidatorContext; +import jakarta.validation.ConstraintValidator; +import jakarta.validation.ConstraintValidatorContext; import com.baeldung.javaxval.enums.constraints.CustomerTypeSubset; import com.baeldung.javaxval.enums.demo.CustomerType; diff --git a/javaxval/src/main/java/com/baeldung/javaxval/enums/EnumNamePatternValidator.java b/javaxval/src/main/java/com/baeldung/javaxval/enums/EnumNamePatternValidator.java index 3d56d4056308..5cce8e10e76b 100644 --- a/javaxval/src/main/java/com/baeldung/javaxval/enums/EnumNamePatternValidator.java +++ b/javaxval/src/main/java/com/baeldung/javaxval/enums/EnumNamePatternValidator.java @@ -4,8 +4,8 @@ import java.util.regex.Pattern; import java.util.regex.PatternSyntaxException; -import javax.validation.ConstraintValidator; -import javax.validation.ConstraintValidatorContext; +import jakarta.validation.ConstraintValidator; +import jakarta.validation.ConstraintValidatorContext; import com.baeldung.javaxval.enums.constraints.EnumNamePattern; diff --git a/javaxval/src/main/java/com/baeldung/javaxval/enums/EnumSubSetValidator.java b/javaxval/src/main/java/com/baeldung/javaxval/enums/EnumSubSetValidator.java index 04cccb8b0c93..a3a92a4f4eb6 100644 --- a/javaxval/src/main/java/com/baeldung/javaxval/enums/EnumSubSetValidator.java +++ b/javaxval/src/main/java/com/baeldung/javaxval/enums/EnumSubSetValidator.java @@ -3,8 +3,8 @@ import java.lang.annotation.Annotation; import java.util.Arrays; -import javax.validation.ConstraintValidator; -import javax.validation.ConstraintValidatorContext; +import jakarta.validation.ConstraintValidator; +import jakarta.validation.ConstraintValidatorContext; public abstract class EnumSubSetValidator implements ConstraintValidator { private U[] subset; diff --git a/javaxval/src/main/java/com/baeldung/javaxval/enums/ValueOfEnumValidator.java b/javaxval/src/main/java/com/baeldung/javaxval/enums/ValueOfEnumValidator.java index 0203d639231b..c2f2ecee3b34 100644 --- a/javaxval/src/main/java/com/baeldung/javaxval/enums/ValueOfEnumValidator.java +++ b/javaxval/src/main/java/com/baeldung/javaxval/enums/ValueOfEnumValidator.java @@ -4,8 +4,8 @@ import java.util.stream.Collectors; import java.util.stream.Stream; -import javax.validation.ConstraintValidator; -import javax.validation.ConstraintValidatorContext; +import jakarta.validation.ConstraintValidator; +import jakarta.validation.ConstraintValidatorContext; import com.baeldung.javaxval.enums.constraints.ValueOfEnum; diff --git a/javaxval/src/main/java/com/baeldung/javaxval/enums/constraints/CustomerTypeSubset.java b/javaxval/src/main/java/com/baeldung/javaxval/enums/constraints/CustomerTypeSubset.java index 97c2137f6a87..fe03e228f601 100644 --- a/javaxval/src/main/java/com/baeldung/javaxval/enums/constraints/CustomerTypeSubset.java +++ b/javaxval/src/main/java/com/baeldung/javaxval/enums/constraints/CustomerTypeSubset.java @@ -12,8 +12,8 @@ import java.lang.annotation.Retention; import java.lang.annotation.Target; -import javax.validation.Constraint; -import javax.validation.Payload; +import jakarta.validation.Constraint; +import jakarta.validation.Payload; import com.baeldung.javaxval.enums.CustomerTypeSubSetValidator; import com.baeldung.javaxval.enums.demo.CustomerType; diff --git a/javaxval/src/main/java/com/baeldung/javaxval/enums/constraints/EnumNamePattern.java b/javaxval/src/main/java/com/baeldung/javaxval/enums/constraints/EnumNamePattern.java index 29fff857c868..4ef1eac9c0f0 100644 --- a/javaxval/src/main/java/com/baeldung/javaxval/enums/constraints/EnumNamePattern.java +++ b/javaxval/src/main/java/com/baeldung/javaxval/enums/constraints/EnumNamePattern.java @@ -12,8 +12,8 @@ import java.lang.annotation.Retention; import java.lang.annotation.Target; -import javax.validation.Constraint; -import javax.validation.Payload; +import jakarta.validation.Constraint; +import jakarta.validation.Payload; import com.baeldung.javaxval.enums.EnumNamePatternValidator; diff --git a/javaxval/src/main/java/com/baeldung/javaxval/enums/constraints/ValueOfEnum.java b/javaxval/src/main/java/com/baeldung/javaxval/enums/constraints/ValueOfEnum.java index 29b44a1793c8..bbfe6ed5ab34 100644 --- a/javaxval/src/main/java/com/baeldung/javaxval/enums/constraints/ValueOfEnum.java +++ b/javaxval/src/main/java/com/baeldung/javaxval/enums/constraints/ValueOfEnum.java @@ -12,8 +12,8 @@ import java.lang.annotation.Retention; import java.lang.annotation.Target; -import javax.validation.Constraint; -import javax.validation.Payload; +import jakarta.validation.Constraint; +import jakarta.validation.Payload; import com.baeldung.javaxval.enums.ValueOfEnumValidator; diff --git a/javaxval/src/main/java/com/baeldung/javaxval/enums/demo/Customer.java b/javaxval/src/main/java/com/baeldung/javaxval/enums/demo/Customer.java index 15cd9e0da737..db38dd00151d 100644 --- a/javaxval/src/main/java/com/baeldung/javaxval/enums/demo/Customer.java +++ b/javaxval/src/main/java/com/baeldung/javaxval/enums/demo/Customer.java @@ -1,6 +1,6 @@ package com.baeldung.javaxval.enums.demo; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotNull; import com.baeldung.javaxval.enums.constraints.CustomerTypeSubset; import com.baeldung.javaxval.enums.constraints.EnumNamePattern; diff --git a/javaxval/src/main/java/com/baeldung/javaxval/javabeanconstraints/application/Application.java b/javaxval/src/main/java/com/baeldung/javaxval/javabeanconstraints/application/Application.java index 22157f351c5b..b1c53c5be35b 100644 --- a/javaxval/src/main/java/com/baeldung/javaxval/javabeanconstraints/application/Application.java +++ b/javaxval/src/main/java/com/baeldung/javaxval/javabeanconstraints/application/Application.java @@ -1,7 +1,7 @@ package com.baeldung.javaxval.javabeanconstraints.application; -import javax.validation.Validation; -import javax.validation.Validator; +import jakarta.validation.Validation; +import jakarta.validation.Validator; import com.baeldung.javaxval.javabeanconstraints.entities.UserNotBlank; diff --git a/javaxval/src/main/java/com/baeldung/javaxval/javabeanconstraints/entities/UserNotBlank.java b/javaxval/src/main/java/com/baeldung/javaxval/javabeanconstraints/entities/UserNotBlank.java index 5542be8c25f0..1a6c634ed480 100644 --- a/javaxval/src/main/java/com/baeldung/javaxval/javabeanconstraints/entities/UserNotBlank.java +++ b/javaxval/src/main/java/com/baeldung/javaxval/javabeanconstraints/entities/UserNotBlank.java @@ -1,6 +1,6 @@ package com.baeldung.javaxval.javabeanconstraints.entities; -import javax.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotBlank; public class UserNotBlank { diff --git a/javaxval/src/main/java/com/baeldung/javaxval/javabeanconstraints/entities/UserNotEmpty.java b/javaxval/src/main/java/com/baeldung/javaxval/javabeanconstraints/entities/UserNotEmpty.java index e3dbe27b0e8f..0e01c4138858 100644 --- a/javaxval/src/main/java/com/baeldung/javaxval/javabeanconstraints/entities/UserNotEmpty.java +++ b/javaxval/src/main/java/com/baeldung/javaxval/javabeanconstraints/entities/UserNotEmpty.java @@ -1,6 +1,6 @@ package com.baeldung.javaxval.javabeanconstraints.entities; -import javax.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotEmpty; public class UserNotEmpty { diff --git a/javaxval/src/main/java/com/baeldung/javaxval/javabeanconstraints/entities/UserNotNull.java b/javaxval/src/main/java/com/baeldung/javaxval/javabeanconstraints/entities/UserNotNull.java index b3a0f90d3607..39164e2f6bda 100644 --- a/javaxval/src/main/java/com/baeldung/javaxval/javabeanconstraints/entities/UserNotNull.java +++ b/javaxval/src/main/java/com/baeldung/javaxval/javabeanconstraints/entities/UserNotNull.java @@ -1,6 +1,6 @@ package com.baeldung.javaxval.javabeanconstraints.entities; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotNull; public class UserNotNull { diff --git a/javaxval/src/main/java/com/baeldung/javaxval/validationgroup/CompleteInfo.java b/javaxval/src/main/java/com/baeldung/javaxval/validationgroup/CompleteInfo.java index 4ecdc3c5f1c5..22c0b01ddf9a 100644 --- a/javaxval/src/main/java/com/baeldung/javaxval/validationgroup/CompleteInfo.java +++ b/javaxval/src/main/java/com/baeldung/javaxval/validationgroup/CompleteInfo.java @@ -1,6 +1,6 @@ package com.baeldung.javaxval.validationgroup; -import javax.validation.GroupSequence; +import jakarta.validation.GroupSequence; @GroupSequence({ BasicInfo.class, AdvanceInfo.class }) public interface CompleteInfo { diff --git a/javaxval/src/main/java/com/baeldung/javaxval/validationgroup/RegistrationForm.java b/javaxval/src/main/java/com/baeldung/javaxval/validationgroup/RegistrationForm.java index a30a074556ec..2f759d633d6b 100644 --- a/javaxval/src/main/java/com/baeldung/javaxval/validationgroup/RegistrationForm.java +++ b/javaxval/src/main/java/com/baeldung/javaxval/validationgroup/RegistrationForm.java @@ -1,7 +1,7 @@ package com.baeldung.javaxval.validationgroup; -import javax.validation.constraints.Email; -import javax.validation.constraints.NotBlank; +import jakarta.validation.constraints.Email; +import jakarta.validation.constraints.NotBlank; public class RegistrationForm { @NotBlank(groups = BasicInfo.class) diff --git a/javaxval/src/test/java/com/baeldung/javaxval/beanvalidation/ValidationIntegrationTest.java b/javaxval/src/test/java/com/baeldung/javaxval/beanvalidation/ValidationIntegrationTest.java index 3e60fa7acd72..132dddad5d5b 100644 --- a/javaxval/src/test/java/com/baeldung/javaxval/beanvalidation/ValidationIntegrationTest.java +++ b/javaxval/src/test/java/com/baeldung/javaxval/beanvalidation/ValidationIntegrationTest.java @@ -6,10 +6,10 @@ import java.util.Collections; import java.util.Set; -import javax.validation.ConstraintViolation; -import javax.validation.Validation; -import javax.validation.Validator; -import javax.validation.ValidatorFactory; +import jakarta.validation.ConstraintViolation; +import jakarta.validation.Validation; +import jakarta.validation.Validator; +import jakarta.validation.ValidatorFactory; import org.junit.Before; import org.junit.Test; diff --git a/javaxval/src/test/java/com/baeldung/javaxval/bigdecimal/InvoiceUnitTest.java b/javaxval/src/test/java/com/baeldung/javaxval/bigdecimal/InvoiceUnitTest.java index 801d7966a5d4..a149a3a6fe35 100644 --- a/javaxval/src/test/java/com/baeldung/javaxval/bigdecimal/InvoiceUnitTest.java +++ b/javaxval/src/test/java/com/baeldung/javaxval/bigdecimal/InvoiceUnitTest.java @@ -4,9 +4,9 @@ import org.junit.BeforeClass; import org.junit.Test; -import javax.validation.ConstraintViolation; -import javax.validation.Validation; -import javax.validation.Validator; +import jakarta.validation.ConstraintViolation; +import jakarta.validation.Validation; +import jakarta.validation.Validator; import java.math.BigDecimal; import java.util.Set; diff --git a/javaxval/src/test/java/com/baeldung/javaxval/constraint/composition/ConstraintCompositionUnitTest.java b/javaxval/src/test/java/com/baeldung/javaxval/constraint/composition/ConstraintCompositionUnitTest.java index 6c2b8f801c0f..918944cd5f72 100644 --- a/javaxval/src/test/java/com/baeldung/javaxval/constraint/composition/ConstraintCompositionUnitTest.java +++ b/javaxval/src/test/java/com/baeldung/javaxval/constraint/composition/ConstraintCompositionUnitTest.java @@ -5,11 +5,11 @@ import java.util.Set; -import javax.validation.ConstraintViolation; -import javax.validation.ConstraintViolationException; -import javax.validation.Validation; -import javax.validation.Validator; -import javax.validation.ValidatorFactory; +import jakarta.validation.ConstraintViolation; +import jakarta.validation.ConstraintViolationException; +import jakarta.validation.Validation; +import jakarta.validation.Validator; +import jakarta.validation.ValidatorFactory; import org.junit.Before; import org.junit.Test; diff --git a/javaxval/src/test/java/com/baeldung/javaxval/container/validation/ContainerValidationIntegrationTest.java b/javaxval/src/test/java/com/baeldung/javaxval/container/validation/ContainerValidationIntegrationTest.java index d96b64144256..5c50fde7c602 100644 --- a/javaxval/src/test/java/com/baeldung/javaxval/container/validation/ContainerValidationIntegrationTest.java +++ b/javaxval/src/test/java/com/baeldung/javaxval/container/validation/ContainerValidationIntegrationTest.java @@ -6,10 +6,10 @@ import java.util.OptionalInt; import java.util.Set; -import javax.validation.ConstraintViolation; -import javax.validation.Validation; -import javax.validation.Validator; -import javax.validation.ValidatorFactory; +import jakarta.validation.ConstraintViolation; +import jakarta.validation.Validation; +import jakarta.validation.Validator; +import jakarta.validation.ValidatorFactory; import com.baeldung.javaxval.container.validation.valueextractors.ProfileValueExtractor; import org.junit.Before; diff --git a/javaxval/src/test/java/com/baeldung/javaxval/enums/CustomerTypeSubSetValidatorUnitTest.java b/javaxval/src/test/java/com/baeldung/javaxval/enums/CustomerTypeSubSetValidatorUnitTest.java index 524f8eec3603..7ccd840e8cae 100644 --- a/javaxval/src/test/java/com/baeldung/javaxval/enums/CustomerTypeSubSetValidatorUnitTest.java +++ b/javaxval/src/test/java/com/baeldung/javaxval/enums/CustomerTypeSubSetValidatorUnitTest.java @@ -4,9 +4,9 @@ import java.util.Set; -import javax.validation.ConstraintViolation; -import javax.validation.Validation; -import javax.validation.Validator; +import jakarta.validation.ConstraintViolation; +import jakarta.validation.Validation; +import jakarta.validation.Validator; import org.junit.BeforeClass; import org.junit.Test; diff --git a/javaxval/src/test/java/com/baeldung/javaxval/enums/EnumNamePatternValidatorUnitTest.java b/javaxval/src/test/java/com/baeldung/javaxval/enums/EnumNamePatternValidatorUnitTest.java index 805d40ee5e7b..0556f8883232 100644 --- a/javaxval/src/test/java/com/baeldung/javaxval/enums/EnumNamePatternValidatorUnitTest.java +++ b/javaxval/src/test/java/com/baeldung/javaxval/enums/EnumNamePatternValidatorUnitTest.java @@ -6,9 +6,9 @@ import java.util.Set; -import javax.validation.ConstraintViolation; -import javax.validation.Validation; -import javax.validation.Validator; +import jakarta.validation.ConstraintViolation; +import jakarta.validation.Validation; +import jakarta.validation.Validator; import org.junit.BeforeClass; import org.junit.Test; diff --git a/javaxval/src/test/java/com/baeldung/javaxval/enums/ValueOfEnumValidatorUnitTest.java b/javaxval/src/test/java/com/baeldung/javaxval/enums/ValueOfEnumValidatorUnitTest.java index 150da5d83bac..c7eb740d8666 100644 --- a/javaxval/src/test/java/com/baeldung/javaxval/enums/ValueOfEnumValidatorUnitTest.java +++ b/javaxval/src/test/java/com/baeldung/javaxval/enums/ValueOfEnumValidatorUnitTest.java @@ -4,9 +4,9 @@ import java.util.Set; -import javax.validation.ConstraintViolation; -import javax.validation.Validation; -import javax.validation.Validator; +import jakarta.validation.ConstraintViolation; +import jakarta.validation.Validation; +import jakarta.validation.Validator; import org.junit.BeforeClass; import org.junit.Test; diff --git a/javaxval/src/test/java/com/baeldung/javaxval/enums/demo/CustomerUnitTest.java b/javaxval/src/test/java/com/baeldung/javaxval/enums/demo/CustomerUnitTest.java index 02a49f50fa0a..c4380f75fa48 100644 --- a/javaxval/src/test/java/com/baeldung/javaxval/enums/demo/CustomerUnitTest.java +++ b/javaxval/src/test/java/com/baeldung/javaxval/enums/demo/CustomerUnitTest.java @@ -5,9 +5,9 @@ import java.util.Set; import java.util.function.Predicate; -import javax.validation.ConstraintViolation; -import javax.validation.Validation; -import javax.validation.Validator; +import jakarta.validation.ConstraintViolation; +import jakarta.validation.Validation; +import jakarta.validation.Validator; import org.junit.BeforeClass; import org.junit.Test; diff --git a/javaxval/src/test/java/com/baeldung/javaxval/javabeanconstraints/UserNotBlankUnitTest.java b/javaxval/src/test/java/com/baeldung/javaxval/javabeanconstraints/UserNotBlankUnitTest.java index 4cb87e8e270c..68e48de41d36 100644 --- a/javaxval/src/test/java/com/baeldung/javaxval/javabeanconstraints/UserNotBlankUnitTest.java +++ b/javaxval/src/test/java/com/baeldung/javaxval/javabeanconstraints/UserNotBlankUnitTest.java @@ -4,9 +4,9 @@ import java.util.Set; -import javax.validation.ConstraintViolation; -import javax.validation.Validation; -import javax.validation.Validator; +import jakarta.validation.ConstraintViolation; +import jakarta.validation.Validation; +import jakarta.validation.Validator; import com.baeldung.javaxval.javabeanconstraints.entities.UserNotBlank; import org.junit.BeforeClass; diff --git a/javaxval/src/test/java/com/baeldung/javaxval/javabeanconstraints/UserNotEmptyUnitTest.java b/javaxval/src/test/java/com/baeldung/javaxval/javabeanconstraints/UserNotEmptyUnitTest.java index eb76ac260c20..bd83d3060124 100644 --- a/javaxval/src/test/java/com/baeldung/javaxval/javabeanconstraints/UserNotEmptyUnitTest.java +++ b/javaxval/src/test/java/com/baeldung/javaxval/javabeanconstraints/UserNotEmptyUnitTest.java @@ -4,9 +4,9 @@ import java.util.Set; -import javax.validation.ConstraintViolation; -import javax.validation.Validation; -import javax.validation.Validator; +import jakarta.validation.ConstraintViolation; +import jakarta.validation.Validation; +import jakarta.validation.Validator; import com.baeldung.javaxval.javabeanconstraints.entities.UserNotEmpty; import org.junit.BeforeClass; diff --git a/javaxval/src/test/java/com/baeldung/javaxval/javabeanconstraints/UserNotNullUnitTest.java b/javaxval/src/test/java/com/baeldung/javaxval/javabeanconstraints/UserNotNullUnitTest.java index f0280000de42..36874f4f21bd 100644 --- a/javaxval/src/test/java/com/baeldung/javaxval/javabeanconstraints/UserNotNullUnitTest.java +++ b/javaxval/src/test/java/com/baeldung/javaxval/javabeanconstraints/UserNotNullUnitTest.java @@ -4,9 +4,9 @@ import java.util.Set; -import javax.validation.ConstraintViolation; -import javax.validation.Validation; -import javax.validation.Validator; +import jakarta.validation.ConstraintViolation; +import jakarta.validation.Validation; +import jakarta.validation.Validator; import com.baeldung.javaxval.javabeanconstraints.entities.UserNotNull; import org.junit.BeforeClass; diff --git a/javaxval/src/test/java/com/baeldung/javaxval/validationgroup/RegistrationFormUnitTest.java b/javaxval/src/test/java/com/baeldung/javaxval/validationgroup/RegistrationFormUnitTest.java index 333370332825..52aadf80b05b 100644 --- a/javaxval/src/test/java/com/baeldung/javaxval/validationgroup/RegistrationFormUnitTest.java +++ b/javaxval/src/test/java/com/baeldung/javaxval/validationgroup/RegistrationFormUnitTest.java @@ -4,9 +4,9 @@ import java.util.Set; -import javax.validation.ConstraintViolation; -import javax.validation.Validation; -import javax.validation.Validator; +import jakarta.validation.ConstraintViolation; +import jakarta.validation.Validation; +import jakarta.validation.Validator; import org.junit.BeforeClass; import org.junit.Test; From 2abd25ca4aa6e9709da7640041f0d7d28ef179b3 Mon Sep 17 00:00:00 2001 From: anuragkumawat Date: Tue, 11 Apr 2023 22:29:34 +0530 Subject: [PATCH 063/390] Java 19552 Move articles from spring-core-* module to spring-di-4 module (#13814) * JAVA-19552 Move articles from spring-core module to spring-di-4 module * JAVA-19552 Minor Correction --- spring-core-4/README.md | 1 - spring-core-5/README.md | 1 - .../src/main/resources/application.yml | 1 - .../src/test/resources/application.yml | 1 - spring-di-3/README.md | 2 +- spring-di-4/README.md | 9 ++++++ spring-di-4/pom.xml | 28 +++++++++++++++++++ .../component/inscope/AmbiguousBean.java | 0 .../component/inscope/BeanExample.java | 0 .../baeldung/component/inscope/BeanImplA.java | 0 .../baeldung/component/inscope/BeanImplB.java | 0 .../inscope/ComponentApplication.java | 0 .../component/inscope/ComponentExample.java | 0 .../component/inscope/ControllerExample.java | 0 .../component/inscope/CustomComponent.java | 0 .../inscope/CustomComponentExample.java | 0 .../component/inscope/RepositoryExample.java | 0 .../component/inscope/ServiceExample.java | 0 .../outsidescope/OutsideScopeBeanExample.java | 0 .../outsidescope/OutsideScopeExample.java | 0 .../scannedscope/ScannedScopeExample.java | 0 .../baeldung/sampleabstract/BallService.java | 0 .../sampleabstract/BasketballService.java | 0 .../com/baeldung/sampleabstract/DemoApp.java | 0 .../sampleabstract/LogRepository.java | 0 .../sampleabstract/RuleRepository.java | 0 .../src/main/resources/application.yml | 1 + .../component/inscope/ComponentUnitTest.java | 0 .../src/test/resources/application.yml | 1 + .../src/test/resources/logback-test.xml | 12 ++++++++ 30 files changed, 52 insertions(+), 5 deletions(-) create mode 100644 spring-di-4/README.md create mode 100644 spring-di-4/pom.xml rename {spring-core-5 => spring-di-4}/src/main/java/com/baeldung/component/inscope/AmbiguousBean.java (100%) rename {spring-core-5 => spring-di-4}/src/main/java/com/baeldung/component/inscope/BeanExample.java (100%) rename {spring-core-5 => spring-di-4}/src/main/java/com/baeldung/component/inscope/BeanImplA.java (100%) rename {spring-core-5 => spring-di-4}/src/main/java/com/baeldung/component/inscope/BeanImplB.java (100%) rename {spring-core-5 => spring-di-4}/src/main/java/com/baeldung/component/inscope/ComponentApplication.java (100%) rename {spring-core-5 => spring-di-4}/src/main/java/com/baeldung/component/inscope/ComponentExample.java (100%) rename {spring-core-5 => spring-di-4}/src/main/java/com/baeldung/component/inscope/ControllerExample.java (100%) rename {spring-core-5 => spring-di-4}/src/main/java/com/baeldung/component/inscope/CustomComponent.java (100%) rename {spring-core-5 => spring-di-4}/src/main/java/com/baeldung/component/inscope/CustomComponentExample.java (100%) rename {spring-core-5 => spring-di-4}/src/main/java/com/baeldung/component/inscope/RepositoryExample.java (100%) rename {spring-core-5 => spring-di-4}/src/main/java/com/baeldung/component/inscope/ServiceExample.java (100%) rename {spring-core-5 => spring-di-4}/src/main/java/com/baeldung/component/outsidescope/OutsideScopeBeanExample.java (100%) rename {spring-core-5 => spring-di-4}/src/main/java/com/baeldung/component/outsidescope/OutsideScopeExample.java (100%) rename {spring-core-5 => spring-di-4}/src/main/java/com/baeldung/component/scannedscope/ScannedScopeExample.java (100%) rename {spring-core-4 => spring-di-4}/src/main/java/com/baeldung/sampleabstract/BallService.java (100%) rename {spring-core-4 => spring-di-4}/src/main/java/com/baeldung/sampleabstract/BasketballService.java (100%) rename {spring-core-4 => spring-di-4}/src/main/java/com/baeldung/sampleabstract/DemoApp.java (100%) rename {spring-core-4 => spring-di-4}/src/main/java/com/baeldung/sampleabstract/LogRepository.java (100%) rename {spring-core-4 => spring-di-4}/src/main/java/com/baeldung/sampleabstract/RuleRepository.java (100%) create mode 100644 spring-di-4/src/main/resources/application.yml rename {spring-core-5 => spring-di-4}/src/test/java/com/baeldung/component/inscope/ComponentUnitTest.java (100%) create mode 100644 spring-di-4/src/test/resources/application.yml create mode 100644 spring-di-4/src/test/resources/logback-test.xml diff --git a/spring-core-4/README.md b/spring-core-4/README.md index 0338d5d6e809..6ade284e2e25 100644 --- a/spring-core-4/README.md +++ b/spring-core-4/README.md @@ -6,6 +6,5 @@ This module contains articles about core Spring functionality - [Creating Spring Beans Through Factory Methods](https://www.baeldung.com/spring-beans-factory-methods) - [Spring BeanPostProcessor](https://www.baeldung.com/spring-beanpostprocessor) -- [Using @Autowired in Abstract Classes](https://www.baeldung.com/spring-autowired-abstract-class) - [The Spring ApplicationContext](https://www.baeldung.com/spring-application-context) - More articles: [[<-- prev]](/spring-core-3) [[next -->]](/spring-core-5) diff --git a/spring-core-5/README.md b/spring-core-5/README.md index 13945c1f8bf9..cfcbf5380a50 100644 --- a/spring-core-5/README.md +++ b/spring-core-5/README.md @@ -4,7 +4,6 @@ This module contains articles about core Spring functionality. ## Relevant Articles: -- [Spring @Component Annotation](https://www.baeldung.com/spring-component-annotation) - [Solving Spring’s “not eligible for auto-proxying” Warning](https://www.baeldung.com/spring-not-eligible-for-auto-proxying) - [Finding the Spring Version](https://www.baeldung.com/spring-find-version) - [How Does the Spring Singleton Bean Serve Concurrent Requests?](https://www.baeldung.com/spring-singleton-concurrent-requests) diff --git a/spring-core-5/src/main/resources/application.yml b/spring-core-5/src/main/resources/application.yml index 5c09fdb8b041..e69de29bb2d1 100644 --- a/spring-core-5/src/main/resources/application.yml +++ b/spring-core-5/src/main/resources/application.yml @@ -1 +0,0 @@ -ambiguous-bean: 'A' \ No newline at end of file diff --git a/spring-core-5/src/test/resources/application.yml b/spring-core-5/src/test/resources/application.yml index da23e59c2410..e69de29bb2d1 100644 --- a/spring-core-5/src/test/resources/application.yml +++ b/spring-core-5/src/test/resources/application.yml @@ -1 +0,0 @@ -ambiguous-bean: 'B' \ No newline at end of file diff --git a/spring-di-3/README.md b/spring-di-3/README.md index 1ac280fef2ec..ffb81fbe7d2b 100644 --- a/spring-di-3/README.md +++ b/spring-di-3/README.md @@ -11,4 +11,4 @@ This module contains articles about dependency injection with Spring - [@Order in Spring](http://www.baeldung.com/spring-order) - [How to dynamically Autowire a Bean in Spring](https://www.baeldung.com/spring-dynamic-autowire) - [Spring @Import Annotation](https://www.baeldung.com/spring-import-annotation) -- More articles: [[<-- prev]](../spring-di-2) +- More articles: [[<-- prev]](../spring-di-2)[[more -->]](../spring-di-4) diff --git a/spring-di-4/README.md b/spring-di-4/README.md new file mode 100644 index 000000000000..d4b0d94385b2 --- /dev/null +++ b/spring-di-4/README.md @@ -0,0 +1,9 @@ +## Spring Dependency Injection + +This module contains articles about dependency injection with Spring + +### Relevant Articles + +- [Using @Autowired in Abstract Classes](https://www.baeldung.com/spring-autowired-abstract-class) +- [Spring @Component Annotation](https://www.baeldung.com/spring-component-annotation) +- More articles: [[<-- prev]](../spring-di-3) diff --git a/spring-di-4/pom.xml b/spring-di-4/pom.xml new file mode 100644 index 000000000000..c6572495cb83 --- /dev/null +++ b/spring-di-4/pom.xml @@ -0,0 +1,28 @@ + + + 4.0.0 + spring-di-4 + 1.0-SNAPSHOT + spring-di-4 + + + com.baeldung + parent-boot-2 + 0.0.1-SNAPSHOT + ../parent-boot-2 + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-test + + + + \ No newline at end of file diff --git a/spring-core-5/src/main/java/com/baeldung/component/inscope/AmbiguousBean.java b/spring-di-4/src/main/java/com/baeldung/component/inscope/AmbiguousBean.java similarity index 100% rename from spring-core-5/src/main/java/com/baeldung/component/inscope/AmbiguousBean.java rename to spring-di-4/src/main/java/com/baeldung/component/inscope/AmbiguousBean.java diff --git a/spring-core-5/src/main/java/com/baeldung/component/inscope/BeanExample.java b/spring-di-4/src/main/java/com/baeldung/component/inscope/BeanExample.java similarity index 100% rename from spring-core-5/src/main/java/com/baeldung/component/inscope/BeanExample.java rename to spring-di-4/src/main/java/com/baeldung/component/inscope/BeanExample.java diff --git a/spring-core-5/src/main/java/com/baeldung/component/inscope/BeanImplA.java b/spring-di-4/src/main/java/com/baeldung/component/inscope/BeanImplA.java similarity index 100% rename from spring-core-5/src/main/java/com/baeldung/component/inscope/BeanImplA.java rename to spring-di-4/src/main/java/com/baeldung/component/inscope/BeanImplA.java diff --git a/spring-core-5/src/main/java/com/baeldung/component/inscope/BeanImplB.java b/spring-di-4/src/main/java/com/baeldung/component/inscope/BeanImplB.java similarity index 100% rename from spring-core-5/src/main/java/com/baeldung/component/inscope/BeanImplB.java rename to spring-di-4/src/main/java/com/baeldung/component/inscope/BeanImplB.java diff --git a/spring-core-5/src/main/java/com/baeldung/component/inscope/ComponentApplication.java b/spring-di-4/src/main/java/com/baeldung/component/inscope/ComponentApplication.java similarity index 100% rename from spring-core-5/src/main/java/com/baeldung/component/inscope/ComponentApplication.java rename to spring-di-4/src/main/java/com/baeldung/component/inscope/ComponentApplication.java diff --git a/spring-core-5/src/main/java/com/baeldung/component/inscope/ComponentExample.java b/spring-di-4/src/main/java/com/baeldung/component/inscope/ComponentExample.java similarity index 100% rename from spring-core-5/src/main/java/com/baeldung/component/inscope/ComponentExample.java rename to spring-di-4/src/main/java/com/baeldung/component/inscope/ComponentExample.java diff --git a/spring-core-5/src/main/java/com/baeldung/component/inscope/ControllerExample.java b/spring-di-4/src/main/java/com/baeldung/component/inscope/ControllerExample.java similarity index 100% rename from spring-core-5/src/main/java/com/baeldung/component/inscope/ControllerExample.java rename to spring-di-4/src/main/java/com/baeldung/component/inscope/ControllerExample.java diff --git a/spring-core-5/src/main/java/com/baeldung/component/inscope/CustomComponent.java b/spring-di-4/src/main/java/com/baeldung/component/inscope/CustomComponent.java similarity index 100% rename from spring-core-5/src/main/java/com/baeldung/component/inscope/CustomComponent.java rename to spring-di-4/src/main/java/com/baeldung/component/inscope/CustomComponent.java diff --git a/spring-core-5/src/main/java/com/baeldung/component/inscope/CustomComponentExample.java b/spring-di-4/src/main/java/com/baeldung/component/inscope/CustomComponentExample.java similarity index 100% rename from spring-core-5/src/main/java/com/baeldung/component/inscope/CustomComponentExample.java rename to spring-di-4/src/main/java/com/baeldung/component/inscope/CustomComponentExample.java diff --git a/spring-core-5/src/main/java/com/baeldung/component/inscope/RepositoryExample.java b/spring-di-4/src/main/java/com/baeldung/component/inscope/RepositoryExample.java similarity index 100% rename from spring-core-5/src/main/java/com/baeldung/component/inscope/RepositoryExample.java rename to spring-di-4/src/main/java/com/baeldung/component/inscope/RepositoryExample.java diff --git a/spring-core-5/src/main/java/com/baeldung/component/inscope/ServiceExample.java b/spring-di-4/src/main/java/com/baeldung/component/inscope/ServiceExample.java similarity index 100% rename from spring-core-5/src/main/java/com/baeldung/component/inscope/ServiceExample.java rename to spring-di-4/src/main/java/com/baeldung/component/inscope/ServiceExample.java diff --git a/spring-core-5/src/main/java/com/baeldung/component/outsidescope/OutsideScopeBeanExample.java b/spring-di-4/src/main/java/com/baeldung/component/outsidescope/OutsideScopeBeanExample.java similarity index 100% rename from spring-core-5/src/main/java/com/baeldung/component/outsidescope/OutsideScopeBeanExample.java rename to spring-di-4/src/main/java/com/baeldung/component/outsidescope/OutsideScopeBeanExample.java diff --git a/spring-core-5/src/main/java/com/baeldung/component/outsidescope/OutsideScopeExample.java b/spring-di-4/src/main/java/com/baeldung/component/outsidescope/OutsideScopeExample.java similarity index 100% rename from spring-core-5/src/main/java/com/baeldung/component/outsidescope/OutsideScopeExample.java rename to spring-di-4/src/main/java/com/baeldung/component/outsidescope/OutsideScopeExample.java diff --git a/spring-core-5/src/main/java/com/baeldung/component/scannedscope/ScannedScopeExample.java b/spring-di-4/src/main/java/com/baeldung/component/scannedscope/ScannedScopeExample.java similarity index 100% rename from spring-core-5/src/main/java/com/baeldung/component/scannedscope/ScannedScopeExample.java rename to spring-di-4/src/main/java/com/baeldung/component/scannedscope/ScannedScopeExample.java diff --git a/spring-core-4/src/main/java/com/baeldung/sampleabstract/BallService.java b/spring-di-4/src/main/java/com/baeldung/sampleabstract/BallService.java similarity index 100% rename from spring-core-4/src/main/java/com/baeldung/sampleabstract/BallService.java rename to spring-di-4/src/main/java/com/baeldung/sampleabstract/BallService.java diff --git a/spring-core-4/src/main/java/com/baeldung/sampleabstract/BasketballService.java b/spring-di-4/src/main/java/com/baeldung/sampleabstract/BasketballService.java similarity index 100% rename from spring-core-4/src/main/java/com/baeldung/sampleabstract/BasketballService.java rename to spring-di-4/src/main/java/com/baeldung/sampleabstract/BasketballService.java diff --git a/spring-core-4/src/main/java/com/baeldung/sampleabstract/DemoApp.java b/spring-di-4/src/main/java/com/baeldung/sampleabstract/DemoApp.java similarity index 100% rename from spring-core-4/src/main/java/com/baeldung/sampleabstract/DemoApp.java rename to spring-di-4/src/main/java/com/baeldung/sampleabstract/DemoApp.java diff --git a/spring-core-4/src/main/java/com/baeldung/sampleabstract/LogRepository.java b/spring-di-4/src/main/java/com/baeldung/sampleabstract/LogRepository.java similarity index 100% rename from spring-core-4/src/main/java/com/baeldung/sampleabstract/LogRepository.java rename to spring-di-4/src/main/java/com/baeldung/sampleabstract/LogRepository.java diff --git a/spring-core-4/src/main/java/com/baeldung/sampleabstract/RuleRepository.java b/spring-di-4/src/main/java/com/baeldung/sampleabstract/RuleRepository.java similarity index 100% rename from spring-core-4/src/main/java/com/baeldung/sampleabstract/RuleRepository.java rename to spring-di-4/src/main/java/com/baeldung/sampleabstract/RuleRepository.java diff --git a/spring-di-4/src/main/resources/application.yml b/spring-di-4/src/main/resources/application.yml new file mode 100644 index 000000000000..5c09fdb8b041 --- /dev/null +++ b/spring-di-4/src/main/resources/application.yml @@ -0,0 +1 @@ +ambiguous-bean: 'A' \ No newline at end of file diff --git a/spring-core-5/src/test/java/com/baeldung/component/inscope/ComponentUnitTest.java b/spring-di-4/src/test/java/com/baeldung/component/inscope/ComponentUnitTest.java similarity index 100% rename from spring-core-5/src/test/java/com/baeldung/component/inscope/ComponentUnitTest.java rename to spring-di-4/src/test/java/com/baeldung/component/inscope/ComponentUnitTest.java diff --git a/spring-di-4/src/test/resources/application.yml b/spring-di-4/src/test/resources/application.yml new file mode 100644 index 000000000000..da23e59c2410 --- /dev/null +++ b/spring-di-4/src/test/resources/application.yml @@ -0,0 +1 @@ +ambiguous-bean: 'B' \ No newline at end of file diff --git a/spring-di-4/src/test/resources/logback-test.xml b/spring-di-4/src/test/resources/logback-test.xml new file mode 100644 index 000000000000..8d4771e308ba --- /dev/null +++ b/spring-di-4/src/test/resources/logback-test.xml @@ -0,0 +1,12 @@ + + + + + [%d{ISO8601}]-[%thread] %-5level %logger - %msg%n + + + + + + + \ No newline at end of file From 34d69f772afe9b1f57ca2512c2b006c0574512b6 Mon Sep 17 00:00:00 2001 From: anuragkumawat Date: Tue, 11 Apr 2023 22:37:52 +0530 Subject: [PATCH 064/390] JAVA-19533 Fix references to parents - Week 14 - 2023 (moved-1) (#13816) --- spring-core-6/pom.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/spring-core-6/pom.xml b/spring-core-6/pom.xml index cc494b3a57bd..736fa283e793 100644 --- a/spring-core-6/pom.xml +++ b/spring-core-6/pom.xml @@ -10,10 +10,10 @@ http://www.baeldung.com - org.springframework.boot - spring-boot-starter-parent - 3.0.1 - + com.baeldung + parent-boot-3 + 0.0.1-SNAPSHOT + ../parent-boot-3 From a9b4eafed50ca784f34866719a72468eee2bc0c4 Mon Sep 17 00:00:00 2001 From: Alex Tighe <599747+atighe@users.noreply.github.com> Date: Tue, 11 Apr 2023 14:15:40 -0400 Subject: [PATCH 065/390] BAEL-6229: loading multiple yaml files in spring boot (#13724) * BAEL-6229: committing new example for loading multiple yaml configuration files * BAEL-6229: updating README.md * BAEL-6229: adding example one code, commented out * Revert "BAEL-6229: updating README.md" This reverts commit 51cd2dcf97f797aa6a723888fd246ef0142242a3. * BAEL-6229: adding comments around commented out code for first example. --- .../multipleyaml/MultipleYamlApplication.java | 27 ++++++++++++++ .../MultipleYamlConfiguration.java | 35 +++++++++++++++++++ .../MultipleYamlPropertySourceFactory.java | 23 ++++++++++++ .../main/resources/application-students.yml | 3 ++ .../main/resources/application-teachers.yml | 3 ++ .../src/main/resources/application.yml | 4 +++ 6 files changed, 95 insertions(+) create mode 100644 spring-boot-modules/spring-boot-properties-3/src/main/java/com/baeldung/properties/multipleyaml/MultipleYamlApplication.java create mode 100644 spring-boot-modules/spring-boot-properties-3/src/main/java/com/baeldung/properties/multipleyaml/MultipleYamlConfiguration.java create mode 100644 spring-boot-modules/spring-boot-properties-3/src/main/java/com/baeldung/properties/multipleyaml/MultipleYamlPropertySourceFactory.java create mode 100644 spring-boot-modules/spring-boot-properties-3/src/main/resources/application-students.yml create mode 100644 spring-boot-modules/spring-boot-properties-3/src/main/resources/application-teachers.yml diff --git a/spring-boot-modules/spring-boot-properties-3/src/main/java/com/baeldung/properties/multipleyaml/MultipleYamlApplication.java b/spring-boot-modules/spring-boot-properties-3/src/main/java/com/baeldung/properties/multipleyaml/MultipleYamlApplication.java new file mode 100644 index 000000000000..9dc754b24b2e --- /dev/null +++ b/spring-boot-modules/spring-boot-properties-3/src/main/java/com/baeldung/properties/multipleyaml/MultipleYamlApplication.java @@ -0,0 +1,27 @@ +package com.baeldung.properties.multipleyaml; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.CommandLineRunner; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class MultipleYamlApplication implements CommandLineRunner { + + @Autowired + private MultipleYamlConfiguration config; + + public static void main(String[] args) { + SpringApplication springApp = new SpringApplication(MultipleYamlApplication.class); + + // Code from first example, uncomment to use multiple profiles + // springApp.setAdditionalProfiles("students", "teachers"); + + springApp.run(args); + } + + public void run(String... args) throws Exception { + System.out.println("Students: " + config.getStudents()); + System.out.println("Teachers: " + config.getTeachers()); + } +} diff --git a/spring-boot-modules/spring-boot-properties-3/src/main/java/com/baeldung/properties/multipleyaml/MultipleYamlConfiguration.java b/spring-boot-modules/spring-boot-properties-3/src/main/java/com/baeldung/properties/multipleyaml/MultipleYamlConfiguration.java new file mode 100644 index 000000000000..c46a321e2411 --- /dev/null +++ b/spring-boot-modules/spring-boot-properties-3/src/main/java/com/baeldung/properties/multipleyaml/MultipleYamlConfiguration.java @@ -0,0 +1,35 @@ +package com.baeldung.properties.multipleyaml; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.PropertySource; +import org.springframework.context.annotation.PropertySources; + +import java.util.List; + +@Configuration +@ConfigurationProperties +@PropertySources({ + @PropertySource(value = "classpath:application-teachers.yml", factory = MultipleYamlPropertySourceFactory.class), + @PropertySource(value = "classpath:application-students.yml", factory = MultipleYamlPropertySourceFactory.class)}) +public class MultipleYamlConfiguration { + + List teachers; + List students; + + public void setTeachers(List teachers) { + this.teachers = teachers; + } + + public void setStudents(List students) { + this.students = students; + } + + public List getTeachers() { + return teachers; + } + + public List getStudents() { + return students; + } +} \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-properties-3/src/main/java/com/baeldung/properties/multipleyaml/MultipleYamlPropertySourceFactory.java b/spring-boot-modules/spring-boot-properties-3/src/main/java/com/baeldung/properties/multipleyaml/MultipleYamlPropertySourceFactory.java new file mode 100644 index 000000000000..c09bd3c8b9fd --- /dev/null +++ b/spring-boot-modules/spring-boot-properties-3/src/main/java/com/baeldung/properties/multipleyaml/MultipleYamlPropertySourceFactory.java @@ -0,0 +1,23 @@ +package com.baeldung.properties.multipleyaml; + +import org.springframework.beans.factory.config.YamlPropertiesFactoryBean; +import org.springframework.core.env.PropertiesPropertySource; +import org.springframework.core.env.PropertySource; +import org.springframework.core.io.support.EncodedResource; +import org.springframework.core.io.support.PropertySourceFactory; + +import java.io.IOException; +import java.util.Properties; + +public class MultipleYamlPropertySourceFactory implements PropertySourceFactory { + + @Override + public PropertySource createPropertySource(String name, EncodedResource encodedResource) throws IOException { + YamlPropertiesFactoryBean factory = new YamlPropertiesFactoryBean(); + factory.setResources(encodedResource.getResource()); + + Properties properties = factory.getObject(); + + return new PropertiesPropertySource(encodedResource.getResource().getFilename(), properties); + } +} diff --git a/spring-boot-modules/spring-boot-properties-3/src/main/resources/application-students.yml b/spring-boot-modules/spring-boot-properties-3/src/main/resources/application-students.yml new file mode 100644 index 000000000000..f4aaf8ae4dc4 --- /dev/null +++ b/spring-boot-modules/spring-boot-properties-3/src/main/resources/application-students.yml @@ -0,0 +1,3 @@ +students: + - Jane + - Michael \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-properties-3/src/main/resources/application-teachers.yml b/spring-boot-modules/spring-boot-properties-3/src/main/resources/application-teachers.yml new file mode 100644 index 000000000000..f0d208016443 --- /dev/null +++ b/spring-boot-modules/spring-boot-properties-3/src/main/resources/application-teachers.yml @@ -0,0 +1,3 @@ +teachers: + - Margo + - Javier \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-properties-3/src/main/resources/application.yml b/spring-boot-modules/spring-boot-properties-3/src/main/resources/application.yml index 2e28da5ad385..2c44065028bd 100644 --- a/spring-boot-modules/spring-boot-properties-3/src/main/resources/application.yml +++ b/spring-boot-modules/spring-boot-properties-3/src/main/resources/application.yml @@ -2,6 +2,10 @@ bael: root-level-property: defaultRootLevelValue spring: profiles: +# Multiple profiles for MultipleYamlApplication first example +# include: +# - teachers +# - students group: multidocument-integration: multidocument-integration-extension --- From c06c8db80125021cd70a34cd2c6324b9c9ab7981 Mon Sep 17 00:00:00 2001 From: Alexandru Borza Date: Tue, 11 Apr 2023 21:21:36 +0300 Subject: [PATCH 066/390] Generating Time Based UUIDs (#13668) * time-based UUIDs * review * review --- core-java-modules/core-java-uuid/pom.xml | 17 +++++++- .../JavaUUIDCreatorBenchmark.java | 42 +++++++++++++++++++ .../timebaseduuid/JavaUUIDCreatorExample.java | 13 ++++++ .../timebaseduuid/UUIDCreatorBenchmark.java | 42 +++++++++++++++++++ .../timebaseduuid/UUIDCreatorExample.java | 13 ++++++ 5 files changed, 126 insertions(+), 1 deletion(-) create mode 100644 core-java-modules/core-java-uuid/src/main/java/com/baeldung/timebaseduuid/JavaUUIDCreatorBenchmark.java create mode 100644 core-java-modules/core-java-uuid/src/main/java/com/baeldung/timebaseduuid/JavaUUIDCreatorExample.java create mode 100644 core-java-modules/core-java-uuid/src/main/java/com/baeldung/timebaseduuid/UUIDCreatorBenchmark.java create mode 100644 core-java-modules/core-java-uuid/src/main/java/com/baeldung/timebaseduuid/UUIDCreatorExample.java diff --git a/core-java-modules/core-java-uuid/pom.xml b/core-java-modules/core-java-uuid/pom.xml index b97db174b4fa..c0e93c1d32b8 100644 --- a/core-java-modules/core-java-uuid/pom.xml +++ b/core-java-modules/core-java-uuid/pom.xml @@ -24,6 +24,21 @@ log4j-over-slf4j ${org.slf4j.version} + + com.github.f4b6a3 + uuid-creator + 5.2.0 + + + com.fasterxml.uuid + java-uuid-generator + 4.1.0 + + + com.github.f4b6a3 + tsid-creator + 5.2.3 + @@ -142,4 +157,4 @@ 3.0.0-M1 - \ No newline at end of file + diff --git a/core-java-modules/core-java-uuid/src/main/java/com/baeldung/timebaseduuid/JavaUUIDCreatorBenchmark.java b/core-java-modules/core-java-uuid/src/main/java/com/baeldung/timebaseduuid/JavaUUIDCreatorBenchmark.java new file mode 100644 index 000000000000..20b2c127bd6d --- /dev/null +++ b/core-java-modules/core-java-uuid/src/main/java/com/baeldung/timebaseduuid/JavaUUIDCreatorBenchmark.java @@ -0,0 +1,42 @@ +package com.baeldung.timebaseduuid; + +import com.fasterxml.uuid.Generators; + +import java.util.Map; +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicLong; + +public class JavaUUIDCreatorBenchmark { + +public static void main(String[] args) throws InterruptedException { + + int threadCount = 128; + int iterationCount = 100_000; + Map uuidMap = new ConcurrentHashMap<>(); + AtomicLong collisionCount = new AtomicLong(); + long startNanos = System.nanoTime(); + CountDownLatch endLatch = new CountDownLatch(threadCount); + + for (long i = 0; i < threadCount; i++) { + long threadId = i; + new Thread(() -> { + for (long j = 0; j < iterationCount; j++) { + UUID uuid = Generators.timeBasedGenerator().generate(); + Long existingUUID = uuidMap.put(uuid, (threadId * iterationCount) + j); + if(existingUUID != null) { + collisionCount.incrementAndGet(); + } + } + endLatch.countDown(); + }).start(); + } + + endLatch.await(); + System.out.println(threadCount * iterationCount + " UUIDs generated, " + collisionCount + " collisions in " + + TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - startNanos) + "ms"); +} +} + diff --git a/core-java-modules/core-java-uuid/src/main/java/com/baeldung/timebaseduuid/JavaUUIDCreatorExample.java b/core-java-modules/core-java-uuid/src/main/java/com/baeldung/timebaseduuid/JavaUUIDCreatorExample.java new file mode 100644 index 000000000000..b59d7e236a4e --- /dev/null +++ b/core-java-modules/core-java-uuid/src/main/java/com/baeldung/timebaseduuid/JavaUUIDCreatorExample.java @@ -0,0 +1,13 @@ +package com.baeldung.timebaseduuid; + +import com.fasterxml.uuid.Generators; + +public class JavaUUIDCreatorExample { + + public static void main(String[] args) { + System.out.println("UUID Version 1: " + Generators.timeBasedGenerator().generate()); + System.out.println("UUID Version 6: " + Generators.timeBasedReorderedGenerator().generate()); + System.out.println("UUID Version 7: " + Generators.timeBasedEpochGenerator().generate()); + + } +} diff --git a/core-java-modules/core-java-uuid/src/main/java/com/baeldung/timebaseduuid/UUIDCreatorBenchmark.java b/core-java-modules/core-java-uuid/src/main/java/com/baeldung/timebaseduuid/UUIDCreatorBenchmark.java new file mode 100644 index 000000000000..d93cd73a25c1 --- /dev/null +++ b/core-java-modules/core-java-uuid/src/main/java/com/baeldung/timebaseduuid/UUIDCreatorBenchmark.java @@ -0,0 +1,42 @@ +package com.baeldung.timebaseduuid; + +import com.github.f4b6a3.uuid.UuidCreator; + +import java.util.Map; +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicLong; + +public class UUIDCreatorBenchmark { + + public static void main(String[] args) throws InterruptedException { + + int threadCount = 128; + int iterationCount = 100_000; + Map uuidMap = new ConcurrentHashMap<>(); + AtomicLong collisionCount = new AtomicLong(); + long startNanos = System.nanoTime(); + CountDownLatch endLatch = new CountDownLatch(threadCount); + + for (long i = 0; i < threadCount; i++) { + long threadId = i; + new Thread(() -> { + for (long j = 0; j < iterationCount; j++) { + UUID uuid = UuidCreator.getTimeBased(); + Long existingUUID = uuidMap.put(uuid, (threadId * iterationCount) + j); + if(existingUUID != null) { + collisionCount.incrementAndGet(); + } + } + endLatch.countDown(); + }).start(); + } + + endLatch.await(); + System.out.println(threadCount * iterationCount + " UUIDs generated, " + collisionCount + " collisions in " + + TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - startNanos) + "ms"); + } +} diff --git a/core-java-modules/core-java-uuid/src/main/java/com/baeldung/timebaseduuid/UUIDCreatorExample.java b/core-java-modules/core-java-uuid/src/main/java/com/baeldung/timebaseduuid/UUIDCreatorExample.java new file mode 100644 index 000000000000..fad2f55c931d --- /dev/null +++ b/core-java-modules/core-java-uuid/src/main/java/com/baeldung/timebaseduuid/UUIDCreatorExample.java @@ -0,0 +1,13 @@ +package com.baeldung.timebaseduuid; + +import com.github.f4b6a3.uuid.UuidCreator; + +public class UUIDCreatorExample { + + public static void main(String[] args) { + System.out.println("UUID Version 1: " + UuidCreator.getTimeBased()); + System.out.println("UUID Version 6: " + UuidCreator.getTimeOrdered()); + System.out.println("UUID Version 7: " + UuidCreator.getTimeOrderedEpoch()); + } +} + From 855550875dbd588fede4d508cb68d7ffe5c05447 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20W=C5=82odkowski?= <42499088+lukaswlodkowski@users.noreply.github.com> Date: Tue, 11 Apr 2023 21:08:05 +0200 Subject: [PATCH 067/390] [BAEL-6165] AWS Secrets Manager integration with Spring Boot for DB. (#13632) * [BAEL-6165] AWS Secrets Manager integration with Spring Boot for DB. * [BAEL-6165] Add other types of secrets as example * [BAEL-6165] externalize version to properties * [BTL-6165] create UserController --------- Co-authored-by: Lukasz Wlodkowski --- .../spring-boot-data-3/pom.xml | 19 ++++++++- ...StartWithAWSSecretsManagerApplication.java | 29 ++++++++++++++ .../controller/UserController.java | 38 ++++++++++++++++++ .../model/UserEntity.java | 40 +++++++++++++++++++ .../repository/UserRepository.java | 10 +++++ .../main/resources/application-aws.properties | 9 +++++ 6 files changed, 143 insertions(+), 2 deletions(-) create mode 100644 spring-boot-modules/spring-boot-data-3/src/main/java/com/baeldung/startdbwithawssecretsmanager/StartWithAWSSecretsManagerApplication.java create mode 100644 spring-boot-modules/spring-boot-data-3/src/main/java/com/baeldung/startdbwithawssecretsmanager/controller/UserController.java create mode 100644 spring-boot-modules/spring-boot-data-3/src/main/java/com/baeldung/startdbwithawssecretsmanager/model/UserEntity.java create mode 100644 spring-boot-modules/spring-boot-data-3/src/main/java/com/baeldung/startdbwithawssecretsmanager/repository/UserRepository.java create mode 100644 spring-boot-modules/spring-boot-data-3/src/main/resources/application-aws.properties diff --git a/spring-boot-modules/spring-boot-data-3/pom.xml b/spring-boot-modules/spring-boot-data-3/pom.xml index cf53c256977e..fcf7451c61e4 100644 --- a/spring-boot-modules/spring-boot-data-3/pom.xml +++ b/spring-boot-modules/spring-boot-data-3/pom.xml @@ -25,8 +25,13 @@ spring-boot-starter-data-jpa - com.mysql - mysql-connector-j + com.amazonaws.secretsmanager + aws-secretsmanager-jdbc + ${aws.secrets.manager.jdbc} + + + mysql + mysql-connector-java runtime @@ -34,6 +39,11 @@ spring-boot-starter-test test + + io.awspring.cloud + spring-cloud-starter-aws-secrets-manager-config + ${aws.secrets.manager.config} + @@ -45,4 +55,9 @@ + + 2.4.4 + 1.0.11 + + \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-data-3/src/main/java/com/baeldung/startdbwithawssecretsmanager/StartWithAWSSecretsManagerApplication.java b/spring-boot-modules/spring-boot-data-3/src/main/java/com/baeldung/startdbwithawssecretsmanager/StartWithAWSSecretsManagerApplication.java new file mode 100644 index 000000000000..0bcbef772902 --- /dev/null +++ b/spring-boot-modules/spring-boot-data-3/src/main/java/com/baeldung/startdbwithawssecretsmanager/StartWithAWSSecretsManagerApplication.java @@ -0,0 +1,29 @@ +package com.baeldung.startdbwithawssecretsmanager; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.Profile; + +import javax.annotation.PostConstruct; + +@SpringBootApplication +@Profile("aws") +public class StartWithAWSSecretsManagerApplication { + @Value("${api-key1}") + private String apiKeyValue1; + + @Value("${api-key2}") + private String apiKeyValue2; + + @PostConstruct + private void postConstruct() { + System.out.println(apiKeyValue1); + System.out.println(apiKeyValue2); + } + + public static void main(String[] args) { + SpringApplication.run(StartWithAWSSecretsManagerApplication.class, args); + } + +} diff --git a/spring-boot-modules/spring-boot-data-3/src/main/java/com/baeldung/startdbwithawssecretsmanager/controller/UserController.java b/spring-boot-modules/spring-boot-data-3/src/main/java/com/baeldung/startdbwithawssecretsmanager/controller/UserController.java new file mode 100644 index 000000000000..08745db3f005 --- /dev/null +++ b/spring-boot-modules/spring-boot-data-3/src/main/java/com/baeldung/startdbwithawssecretsmanager/controller/UserController.java @@ -0,0 +1,38 @@ +package com.baeldung.startdbwithawssecretsmanager.controller; + +import com.baeldung.startdbwithawssecretsmanager.model.UserEntity; +import com.baeldung.startdbwithawssecretsmanager.repository.UserRepository; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("users") +public class UserController { + + private final UserRepository userRepository; + + public UserController(UserRepository userRepository) { + this.userRepository = userRepository; + } + + @GetMapping(value = "/{id}", produces = "application/json") + public @ResponseBody UserEntity getUser(@PathVariable Long id) { + return userRepository.findById(id).get(); + } + + @PostMapping + public UserEntity createUser(@RequestBody UserEntity userEntity) { + return userRepository.save(userEntity); + } + + @DeleteMapping(value = "/{id}") + public void removeUser(@PathVariable Long id) { + userRepository.deleteById(id); + } +} diff --git a/spring-boot-modules/spring-boot-data-3/src/main/java/com/baeldung/startdbwithawssecretsmanager/model/UserEntity.java b/spring-boot-modules/spring-boot-data-3/src/main/java/com/baeldung/startdbwithawssecretsmanager/model/UserEntity.java new file mode 100644 index 000000000000..285e7094dd58 --- /dev/null +++ b/spring-boot-modules/spring-boot-data-3/src/main/java/com/baeldung/startdbwithawssecretsmanager/model/UserEntity.java @@ -0,0 +1,40 @@ +package com.baeldung.startdbwithawssecretsmanager.model; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; + +@Entity +public class UserEntity { + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long id; + + private String name; + + public UserEntity() { + } + + public UserEntity(Long id, String name) { + this.id = id; + this.name = name; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/spring-boot-modules/spring-boot-data-3/src/main/java/com/baeldung/startdbwithawssecretsmanager/repository/UserRepository.java b/spring-boot-modules/spring-boot-data-3/src/main/java/com/baeldung/startdbwithawssecretsmanager/repository/UserRepository.java new file mode 100644 index 000000000000..e2abfe88e6a3 --- /dev/null +++ b/spring-boot-modules/spring-boot-data-3/src/main/java/com/baeldung/startdbwithawssecretsmanager/repository/UserRepository.java @@ -0,0 +1,10 @@ +package com.baeldung.startdbwithawssecretsmanager.repository; + +import com.baeldung.startdbwithawssecretsmanager.model.UserEntity; +import org.springframework.data.repository.CrudRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface UserRepository + extends CrudRepository { +} diff --git a/spring-boot-modules/spring-boot-data-3/src/main/resources/application-aws.properties b/spring-boot-modules/spring-boot-data-3/src/main/resources/application-aws.properties new file mode 100644 index 000000000000..07c4b0a4d68a --- /dev/null +++ b/spring-boot-modules/spring-boot-data-3/src/main/resources/application-aws.properties @@ -0,0 +1,9 @@ +spring.datasource.driver-class-name=com.amazonaws.secretsmanager.sql.AWSSecretsManagerMySQLDriver +spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect +spring.datasource.url=jdbc-secretsmanager:mysql://database-1.cwhqvgjbpgfw.eu-central-1.rds.amazonaws.com:3306/test +spring.datasource.username=rds/credentials + +#Overwriting application.properties configuration back to default. +spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults=true + +spring.config.import=aws-secretsmanager:test/secret/ From aa51d77ed6a7a2ee2dfcaa8c6fd897d2e472550b Mon Sep 17 00:00:00 2001 From: anuragkumawat Date: Wed, 12 Apr 2023 07:24:52 +0530 Subject: [PATCH 068/390] Java 19533 Fix references to parents - Week 14 - 2023 (moved-1) (#13824) * JAVA-19533 Fix references to parents - Week 14 - 2023 (moved-1) * JAVA-19533 Fix references to parents - Week 14 - 2023 (moved-1) --- spring-boot-modules/spring-boot-redis/pom.xml | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/spring-boot-modules/spring-boot-redis/pom.xml b/spring-boot-modules/spring-boot-redis/pom.xml index 42aa1321d5f0..42dba1de2fbc 100644 --- a/spring-boot-modules/spring-boot-redis/pom.xml +++ b/spring-boot-modules/spring-boot-redis/pom.xml @@ -2,20 +2,19 @@ 4.0.0 - - org.springframework.boot - spring-boot-starter-parent - 3.0.2 - - com.baelding spring-boot-redis 0.0.1-SNAPSHOT spring-boot-redis Demo project for Spring Boot with Spring Data Redis - - 15 - + + + com.baeldung + parent-boot-3 + 0.0.1-SNAPSHOT + ../../parent-boot-3 + + org.springframework.boot @@ -66,4 +65,8 @@ + + 15 + + From 9684d361223a2e4dbde1b6475650b00d74dbf707 Mon Sep 17 00:00:00 2001 From: 3hsan <56245694+ehsansasanian@users.noreply.github.com> Date: Wed, 12 Apr 2023 03:57:59 +0200 Subject: [PATCH 069/390] Move lombok-module to jdk9-and-above group (excluded lombok-custom) (#13771) * Move lombok-module to jdk9-and-above group (excluded lombok-custom) * Update lombok version * JAVA-18157: Update lombok version for lombok submodule, and add compiler plugin --- .../baeldung/lombok/valvar/ValExample.java | 1 - .../baeldung/lombok/valvar/VarExample.java | 1 - lombok-modules/lombok-custom/pom.xml | 16 +++++++++ lombok-modules/lombok/pom.xml | 36 ++++--------------- lombok-modules/pom.xml | 18 +++++++++- pom.xml | 6 ++-- 6 files changed, 44 insertions(+), 34 deletions(-) diff --git a/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/valvar/ValExample.java b/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/valvar/ValExample.java index b7ecd95fa82f..f436ef81dd8d 100644 --- a/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/valvar/ValExample.java +++ b/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/valvar/ValExample.java @@ -1,7 +1,6 @@ package com.baeldung.lombok.valvar; import lombok.val; -import lombok.var; import java.util.ArrayList; import java.util.HashMap; diff --git a/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/valvar/VarExample.java b/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/valvar/VarExample.java index 6fabf66590f0..138264db0925 100644 --- a/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/valvar/VarExample.java +++ b/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/valvar/VarExample.java @@ -1,6 +1,5 @@ package com.baeldung.lombok.valvar; -import lombok.var; import java.util.ArrayList; import java.util.Arrays; diff --git a/lombok-modules/lombok-custom/pom.xml b/lombok-modules/lombok-custom/pom.xml index c119900c8ace..1f7f630772b6 100644 --- a/lombok-modules/lombok-custom/pom.xml +++ b/lombok-modules/lombok-custom/pom.xml @@ -53,11 +53,27 @@ + + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + ${maven.compiler.source} + ${maven.compiler.target} + + + + + 1.14.8 1.8 3.3.0-v_771 + 1.8 + 1.8 \ No newline at end of file diff --git a/lombok-modules/lombok/pom.xml b/lombok-modules/lombok/pom.xml index 1be22f0bc2b7..57b2a5a99973 100644 --- a/lombok-modules/lombok/pom.xml +++ b/lombok-modules/lombok/pom.xml @@ -40,41 +40,19 @@ true - - - org.projectlombok - lombok-maven-plugin - ${delombok-maven-plugin.version} - - - delombok - generate-sources - - delombok - - - ${project.basedir}/src/main/java - ${project.build.directory}/delombok - false - - skip - - false - - - - - - - - - + edge-SNAPSHOT 1.0.0.Final 1.18.20.0 23.0.0 + + + projectlombok.org + https://projectlombok.org/edge-releases + + \ No newline at end of file diff --git a/lombok-modules/pom.xml b/lombok-modules/pom.xml index 7ca303af9da2..f2bfdb51c075 100644 --- a/lombok-modules/pom.xml +++ b/lombok-modules/pom.xml @@ -18,10 +18,21 @@ lombok lombok-2 - lombok-custom + + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + ${maven.compiler.source} + ${maven.compiler.target} + + + @@ -32,4 +43,9 @@ + + 11 + 11 + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index 1cc5f92cf8f1..2548dbfbdec8 100644 --- a/pom.xml +++ b/pom.xml @@ -363,7 +363,7 @@ libraries-3 libraries-jdk8 - lombok-modules + lombok-modules/lombok-custom muleesb @@ -559,7 +559,7 @@ libraries-3 libraries-jdk8 - lombok-modules + lombok-modules/lombok-custom muleesb web-modules @@ -735,6 +735,7 @@ + lombok-modules osgi spring-katharsis logging-modules @@ -986,6 +987,7 @@ + lombok-modules osgi spring-katharsis logging-modules From c8677ba06cbe217e879eb60dbba22896f79872d9 Mon Sep 17 00:00:00 2001 From: Anastasios Ioannidis <121166333+anastasiosioannidis@users.noreply.github.com> Date: Wed, 12 Apr 2023 05:01:28 +0300 Subject: [PATCH 070/390] JAVA-18142 Removed jhipster-5 (#13813) --- jhipster-5/README.md | 3 - jhipster-5/bookstore-monolith/.editorconfig | 24 - jhipster-5/bookstore-monolith/.gitattributes | 148 - jhipster-5/bookstore-monolith/.gitignore | 146 - jhipster-5/bookstore-monolith/.huskyrc | 5 - .../bookstore-monolith/.jhipster/Book.json | 54 - .../.mvn/wrapper/MavenWrapperDownloader.java | 110 - .../.mvn/wrapper/maven-wrapper.jar | Bin 48337 -> 0 bytes .../.mvn/wrapper/maven-wrapper.properties | 1 - jhipster-5/bookstore-monolith/.prettierignore | 3 - jhipster-5/bookstore-monolith/.prettierrc | 12 - jhipster-5/bookstore-monolith/.yo-rc.json | 34 - jhipster-5/bookstore-monolith/README.md | 5 - jhipster-5/bookstore-monolith/angular.json | 39 - jhipster-5/bookstore-monolith/mvnw | 286 - jhipster-5/bookstore-monolith/mvnw.cmd | 161 - jhipster-5/bookstore-monolith/package.json | 128 - jhipster-5/bookstore-monolith/pom.xml | 1233 --- .../bookstore-monolith/postcss.config.js | 5 - jhipster-5/bookstore-monolith/proxy.conf.json | 7 - .../src/main/docker/.dockerignore | 14 - .../src/main/docker/Dockerfile | 20 - .../src/main/docker/app.yml | 15 - .../src/main/docker/entrypoint.sh | 4 - .../src/main/docker/mysql.yml | 13 - .../src/main/docker/sonar.yml | 7 - .../baeldung/jhipster5/ApplicationWebXml.java | 21 - .../com/baeldung/jhipster5/BookstoreApp.java | 98 - .../jhipster5/aop/logging/LoggingAspect.java | 98 - .../config/ApplicationProperties.java | 14 - .../jhipster5/config/AsyncConfiguration.java | 59 - .../config/CloudDatabaseConfiguration.java | 28 - .../baeldung/jhipster5/config/Constants.java | 17 - .../config/DatabaseConfiguration.java | 59 - .../config/DateTimeFormatConfiguration.java | 20 - .../jhipster5/config/DefaultProfileUtil.java | 51 - .../config/JacksonConfiguration.java | 63 - .../config/LiquibaseConfiguration.java | 50 - .../jhipster5/config/LocaleConfiguration.java | 27 - .../config/LoggingAspectConfiguration.java | 19 - .../config/LoggingConfiguration.java | 154 - .../config/SecurityConfiguration.java | 122 - .../jhipster5/config/WebConfigurer.java | 170 - .../config/audit/AuditEventConverter.java | 86 - .../jhipster5/config/audit/package-info.java | 4 - .../jhipster5/config/package-info.java | 4 - .../domain/AbstractAuditingEntity.java | 79 - .../baeldung/jhipster5/domain/Authority.java | 59 - .../com/baeldung/jhipster5/domain/Book.java | 153 - .../domain/PersistentAuditEvent.java | 109 - .../com/baeldung/jhipster5/domain/User.java | 231 - .../jhipster5/domain/package-info.java | 4 - .../repository/AuthorityRepository.java | 11 - .../jhipster5/repository/BookRepository.java | 15 - .../CustomAuditEventRepository.java | 89 - .../PersistenceAuditEventRepository.java | 25 - .../jhipster5/repository/UserRepository.java | 40 - .../jhipster5/repository/package-info.java | 4 - .../security/AuthoritiesConstants.java | 16 - .../security/CustomAuthenticationManager.java | 126 - .../security/DomainUserDetailsService.java | 62 - .../jhipster5/security/SecurityUtils.java | 76 - .../security/SpringSecurityAuditorAware.java | 20 - .../security/UserNotActivatedException.java | 19 - .../jhipster5/security/dto/LoginRequest.java | 30 - .../jhipster5/security/dto/LoginResponse.java | 50 - .../jhipster5/security/jwt/JWTConfigurer.java | 21 - .../jhipster5/security/jwt/JWTFilter.java | 48 - .../jhipster5/security/jwt/TokenProvider.java | 119 - .../jhipster5/security/package-info.java | 4 - .../jhipster5/service/AuditEventService.java | 51 - .../jhipster5/service/BookService.java | 50 - .../jhipster5/service/MailService.java | 105 - .../jhipster5/service/UserService.java | 273 - .../jhipster5/service/dto/BookDTO.java | 112 - .../service/dto/PasswordChangeDTO.java | 35 - .../jhipster5/service/dto/UserDTO.java | 199 - .../jhipster5/service/dto/package-info.java | 4 - .../service/impl/BookServiceImpl.java | 109 - .../jhipster5/service/mapper/BookMapper.java | 24 - .../service/mapper/EntityMapper.java | 21 - .../jhipster5/service/mapper/UserMapper.java | 81 - .../service/mapper/package-info.java | 4 - .../jhipster5/service/package-info.java | 4 - .../jhipster5/service/util/RandomUtil.java | 41 - .../jhipster5/web/rest/AccountResource.java | 179 - .../jhipster5/web/rest/AuditResource.java | 77 - .../jhipster5/web/rest/BookResource.java | 118 - .../jhipster5/web/rest/LogsResource.java | 36 - .../jhipster5/web/rest/UserJWTController.java | 71 - .../jhipster5/web/rest/UserResource.java | 183 - .../rest/errors/BadRequestAlertException.java | 42 - .../errors/CustomParameterizedException.java | 54 - .../errors/EmailAlreadyUsedException.java | 10 - .../rest/errors/EmailNotFoundException.java | 13 - .../web/rest/errors/ErrorConstants.java | 21 - .../web/rest/errors/ExceptionTranslator.java | 112 - .../web/rest/errors/FieldErrorVM.java | 33 - .../errors/InternalServerErrorException.java | 16 - .../rest/errors/InvalidPasswordException.java | 13 - .../errors/LoginAlreadyUsedException.java | 10 - .../web/rest/errors/package-info.java | 6 - .../jhipster5/web/rest/package-info.java | 4 - .../jhipster5/web/rest/util/HeaderUtil.java | 45 - .../web/rest/util/PaginationUtil.java | 45 - .../web/rest/vm/KeyAndPasswordVM.java | 27 - .../jhipster5/web/rest/vm/LoggerVM.java | 46 - .../jhipster5/web/rest/vm/LoginVM.java | 52 - .../jhipster5/web/rest/vm/ManagedUserVM.java | 35 - .../jhipster5/web/rest/vm/package-info.java | 4 - .../src/main/jib/entrypoint.sh | 4 - .../src/main/resources/.h2.server.properties | 5 - .../src/main/resources/banner.txt | 10 - .../main/resources/config/application-dev.yml | 122 - .../resources/config/application-prod.yml | 133 - .../main/resources/config/application-tls.yml | 20 - .../src/main/resources/config/application.yml | 140 - .../config/liquibase/authorities.csv | 3 - .../00000000000000_initial_schema.xml | 152 - .../20190319124041_added_entity_Book.xml | 50 - .../resources/config/liquibase/master.xml | 11 - .../main/resources/config/liquibase/users.csv | 5 - .../config/liquibase/users_authorities.csv | 6 - .../main/resources/config/tls/keystore.p12 | Bin 2607 -> 0 bytes .../main/resources/i18n/messages.properties | 21 - .../src/main/resources/logback-spring.xml | 66 - .../src/main/resources/templates/error.html | 163 - .../templates/mail/activationEmail.html | 25 - .../templates/mail/creationEmail.html | 25 - .../templates/mail/passwordResetEmail.html | 25 - .../src/main/webapp/404.html | 61 - .../main/webapp/app/account/account.module.ts | 30 - .../main/webapp/app/account/account.route.ts | 12 - .../account/activate/activate.component.html | 17 - .../account/activate/activate.component.ts | 37 - .../app/account/activate/activate.route.ts | 12 - .../app/account/activate/activate.service.ts | 16 - .../src/main/webapp/app/account/index.ts | 19 - .../password-reset-finish.component.html | 77 - .../finish/password-reset-finish.component.ts | 65 - .../finish/password-reset-finish.route.ts | 12 - .../finish/password-reset-finish.service.ts | 14 - .../init/password-reset-init.component.html | 46 - .../init/password-reset-init.component.ts | 43 - .../init/password-reset-init.route.ts | 12 - .../init/password-reset-init.service.ts | 14 - .../password-strength-bar.component.ts | 85 - .../password/password-strength-bar.scss | 23 - .../account/password/password.component.html | 77 - .../account/password/password.component.ts | 46 - .../app/account/password/password.route.ts | 14 - .../app/account/password/password.service.ts | 14 - .../account/register/register.component.html | 124 - .../account/register/register.component.ts | 71 - .../app/account/register/register.route.ts | 12 - .../app/account/register/register.service.ts | 14 - .../account/settings/settings.component.html | 80 - .../account/settings/settings.component.ts | 50 - .../app/account/settings/settings.route.ts | 14 - .../src/main/webapp/app/admin/admin.module.ts | 43 - .../src/main/webapp/app/admin/admin.route.ts | 18 - .../app/admin/audits/audit-data.model.ts | 3 - .../webapp/app/admin/audits/audit.model.ts | 5 - .../app/admin/audits/audits.component.html | 52 - .../app/admin/audits/audits.component.ts | 126 - .../webapp/app/admin/audits/audits.route.ts | 17 - .../webapp/app/admin/audits/audits.service.ts | 25 - .../configuration.component.html | 46 - .../configuration/configuration.component.ts | 43 - .../configuration/configuration.route.ts | 11 - .../configuration/configuration.service.ts | 67 - .../webapp/app/admin/docs/docs.component.html | 2 - .../webapp/app/admin/docs/docs.component.ts | 9 - .../main/webapp/app/admin/docs/docs.route.ts | 11 - .../admin/health/health-modal.component.html | 35 - .../admin/health/health-modal.component.ts | 41 - .../app/admin/health/health.component.html | 34 - .../app/admin/health/health.component.ts | 66 - .../webapp/app/admin/health/health.route.ts | 11 - .../webapp/app/admin/health/health.service.ts | 133 - .../src/main/webapp/app/admin/index.ts | 27 - .../main/webapp/app/admin/logs/log.model.ts | 3 - .../webapp/app/admin/logs/logs.component.html | 28 - .../webapp/app/admin/logs/logs.component.ts | 32 - .../main/webapp/app/admin/logs/logs.route.ts | 11 - .../webapp/app/admin/logs/logs.service.ts | 19 - .../app/admin/metrics/metrics.component.html | 56 - .../app/admin/metrics/metrics.component.ts | 42 - .../webapp/app/admin/metrics/metrics.route.ts | 11 - .../app/admin/metrics/metrics.service.ts | 18 - ...er-management-delete-dialog.component.html | 19 - ...user-management-delete-dialog.component.ts | 29 - .../user-management-detail.component.html | 47 - .../user-management-detail.component.ts | 20 - .../user-management-update.component.html | 118 - .../user-management-update.component.ts | 51 - .../user-management.component.html | 78 - .../user-management.component.ts | 144 - .../user-management/user-management.route.ts | 68 - .../src/main/webapp/app/app-routing.module.ts | 23 - .../src/main/webapp/app/app.constants.ts | 8 - .../src/main/webapp/app/app.main.ts | 14 - .../src/main/webapp/app/app.module.ts | 70 - .../webapp/app/blocks/config/prod.config.ts | 9 - .../blocks/config/uib-pagination.config.ts | 14 - .../interceptor/auth-expired.interceptor.ts | 25 - .../blocks/interceptor/auth.interceptor.ts | 27 - .../interceptor/errorhandler.interceptor.ts | 25 - .../interceptor/notification.interceptor.ts | 34 - .../webapp/app/core/auth/account.service.ts | 108 - .../webapp/app/core/auth/auth-jwt.service.ts | 59 - .../main/webapp/app/core/auth/csrf.service.ts | 11 - .../app/core/auth/state-storage.service.ts | 46 - .../core/auth/user-route-access-service.ts | 52 - .../src/main/webapp/app/core/core.module.ts | 24 - .../src/main/webapp/app/core/index.ts | 11 - .../app/core/login/login-modal.service.ts | 27 - .../webapp/app/core/login/login.service.ts | 38 - .../webapp/app/core/user/account.model.ts | 12 - .../main/webapp/app/core/user/user.model.ts | 47 - .../main/webapp/app/core/user/user.service.ts | 39 - .../book/book-delete-dialog.component.html | 19 - .../book/book-delete-dialog.component.ts | 65 - .../entities/book/book-detail.component.html | 49 - .../entities/book/book-detail.component.ts | 36 - .../entities/book/book-update.component.html | 100 - .../entities/book/book-update.component.ts | 53 - .../app/entities/book/book.component.html | 62 - .../app/entities/book/book.component.ts | 65 - .../webapp/app/entities/book/book.module.ts | 23 - .../webapp/app/entities/book/book.route.ts | 93 - .../webapp/app/entities/book/book.service.ts | 81 - .../main/webapp/app/entities/book/index.ts | 6 - .../main/webapp/app/entities/entity.module.ts | 19 - .../main/webapp/app/home/home.component.html | 41 - .../main/webapp/app/home/home.component.ts | 44 - .../src/main/webapp/app/home/home.module.ts | 12 - .../src/main/webapp/app/home/home.route.ts | 12 - .../src/main/webapp/app/home/home.scss | 23 - .../src/main/webapp/app/home/index.ts | 3 - .../app/layouts/error/error.component.html | 19 - .../app/layouts/error/error.component.ts | 28 - .../webapp/app/layouts/error/error.route.ts | 36 - .../app/layouts/footer/footer.component.html | 3 - .../app/layouts/footer/footer.component.ts | 7 - .../src/main/webapp/app/layouts/index.ts | 9 - .../app/layouts/main/main.component.html | 11 - .../webapp/app/layouts/main/main.component.ts | 31 - .../app/layouts/navbar/navbar.component.html | 133 - .../app/layouts/navbar/navbar.component.ts | 65 - .../webapp/app/layouts/navbar/navbar.route.ts | 9 - .../webapp/app/layouts/navbar/navbar.scss | 53 - .../layouts/profiles/page-ribbon.component.ts | 26 - .../app/layouts/profiles/page-ribbon.scss | 31 - .../layouts/profiles/profile-info.model.ts | 6 - .../app/layouts/profiles/profile.service.ts | 40 - .../src/main/webapp/app/polyfills.ts | 70 - .../app/shared/alert/alert-error.component.ts | 110 - .../app/shared/alert/alert.component.ts | 35 - .../auth/has-any-authority.directive.ts | 42 - .../app/shared/constants/error.constants.ts | 4 - .../app/shared/constants/input.constants.ts | 2 - .../shared/constants/pagination.constants.ts | 1 - .../src/main/webapp/app/shared/index.ts | 12 - .../app/shared/login/login.component.html | 35 - .../app/shared/login/login.component.ts | 87 - .../webapp/app/shared/model/book.model.ts | 21 - .../webapp/app/shared/shared-common.module.ts | 10 - .../webapp/app/shared/shared-libs.module.ts | 20 - .../main/webapp/app/shared/shared.module.ts | 21 - .../app/shared/util/datepicker-adapter.ts | 21 - .../webapp/app/shared/util/request-util.ts | 18 - .../src/main/webapp/app/vendor.ts | 81 - .../src/main/webapp/content/css/loading.css | 152 - .../images/jhipster_family_member_0.svg | 198 - .../jhipster_family_member_0_head-192.png | Bin 13322 -> 0 bytes .../jhipster_family_member_0_head-256.png | Bin 17812 -> 0 bytes .../jhipster_family_member_0_head-384.png | Bin 27723 -> 0 bytes .../jhipster_family_member_0_head-512.png | Bin 37449 -> 0 bytes .../images/jhipster_family_member_1.svg | 9387 ----------------- .../jhipster_family_member_1_head-192.png | Bin 19660 -> 0 bytes .../jhipster_family_member_1_head-256.png | Bin 29152 -> 0 bytes .../jhipster_family_member_1_head-384.png | Bin 48895 -> 0 bytes .../jhipster_family_member_1_head-512.png | Bin 68803 -> 0 bytes .../images/jhipster_family_member_2.svg | 841 -- .../jhipster_family_member_2_head-192.png | Bin 11463 -> 0 bytes .../jhipster_family_member_2_head-256.png | Bin 15638 -> 0 bytes .../jhipster_family_member_2_head-384.png | Bin 23850 -> 0 bytes .../jhipster_family_member_2_head-512.png | Bin 32300 -> 0 bytes .../images/jhipster_family_member_3.svg | 308 - .../jhipster_family_member_3_head-192.png | Bin 13573 -> 0 bytes .../jhipster_family_member_3_head-256.png | Bin 19239 -> 0 bytes .../jhipster_family_member_3_head-384.png | Bin 30253 -> 0 bytes .../jhipster_family_member_3_head-512.png | Bin 41857 -> 0 bytes .../webapp/content/images/logo-jhipster.png | Bin 1085 -> 0 bytes .../content/scss/_bootstrap-variables.scss | 42 - .../src/main/webapp/content/scss/global.scss | 226 - .../src/main/webapp/content/scss/vendor.scss | 12 - .../src/main/webapp/favicon.ico | Bin 1574 -> 0 bytes .../src/main/webapp/index.html | 108 - .../src/main/webapp/manifest.webapp | 31 - .../src/main/webapp/robots.txt | 11 - .../src/main/webapp/swagger-ui/index.html | 166 - .../config/WebConfigurerUnitTest.java | 189 - .../WebConfigurerUnitTestController.java | 16 - .../HibernateTimeZoneIntegrationTest.java | 176 - ...omAuditEventRepositoryIntegrationTest.java | 165 - .../repository/timezone/DateTimeWrapper.java | 131 - .../timezone/DateTimeWrapperRepository.java | 12 - ...mainUserDetailsServiceIntegrationTest.java | 127 - .../security/MockAuthenticationManager.java | 54 - .../security/SecurityUtilsUnitTest.java | 73 - .../security/jwt/JWTFilterUnitTest.java | 115 - .../security/jwt/TokenProviderUnitTest.java | 111 - .../service/MailServiceIntegrationTest.java | 187 - .../service/UserServiceIntegrationTest.java | 192 - .../mapper/UserMapperIntegrationTest.java | 150 - .../rest/AccountResourceIntegrationTest.java | 818 -- .../rest/AuditResourceIntegrationTest.java | 162 - .../web/rest/BookResourceIntegrationTest.java | 416 - .../web/rest/LogsResourceIntegrationTest.java | 66 - .../baeldung/jhipster5/web/rest/TestUtil.java | 141 - .../UserJWTControllerIntegrationTest.java | 125 - .../web/rest/UserResourceIntegrationTest.java | 596 -- .../ExceptionTranslatorIntegrationTest.java | 150 - .../ExceptionTranslatorTestController.java | 86 - .../web/rest/util/PaginationUtilUnitTest.java | 44 - .../src/test/javascript/jest-global-mocks.ts | 15 - .../src/test/javascript/jest.conf.js | 26 - .../src/test/javascript/jest.ts | 2 - .../activate/activate.component.spec.ts | 72 - .../password-reset-finish.component.spec.ts | 119 - .../password-reset-init.component.spec.ts | 110 - .../password-strength-bar.component.spec.ts | 48 - .../password/password.component.spec.ts | 89 - .../register/register.component.spec.ts | 118 - .../settings/settings.component.spec.ts | 81 - .../app/admin/audits/audits.component.spec.ts | 133 - .../app/admin/audits/audits.service.spec.ts | 59 - .../configuration.component.spec.ts | 71 - .../configuration.service.spec.ts | 64 - .../app/admin/health/health.component.spec.ts | 321 - .../app/admin/logs/logs.component.spec.ts | 77 - .../spec/app/admin/logs/logs.service.spec.ts | 58 - .../admin/metrics/metrics.component.spec.ts | 55 - .../app/admin/metrics/metrics.service.spec.ts | 57 - ...management-delete-dialog.component.spec.ts | 54 - .../user-management-detail.component.spec.ts | 65 - .../user-management-update.component.spec.ts | 99 - .../user-management.component.spec.ts | 85 - .../app/core/user/account.service.spec.ts | 102 - .../spec/app/core/user/user.service.spec.ts | 66 - .../book/book-delete-dialog.component.spec.ts | 52 - .../book/book-detail.component.spec.ts | 40 - .../book/book-update.component.spec.ts | 60 - .../app/entities/book/book.component.spec.ts | 51 - .../app/entities/book/book.service.spec.ts | 137 - .../alert/alert-error.component.spec.ts | 134 - .../app/shared/login/login.component.spec.ts | 157 - .../spec/helpers/mock-account.service.ts | 35 - .../spec/helpers/mock-active-modal.service.ts | 12 - .../spec/helpers/mock-alert.service.ts | 11 - .../helpers/mock-event-manager.service.ts | 12 - .../spec/helpers/mock-login.service.ts | 29 - .../spec/helpers/mock-route.service.ts | 29 - .../helpers/mock-state-storage.service.ts | 22 - .../test/javascript/spec/helpers/spyobject.ts | 69 - .../src/test/javascript/spec/test.module.ts | 63 - .../src/test/resources/config/application.yml | 105 - .../resources/i18n/messages_en.properties | 1 - .../src/test/resources/logback.xml | 42 - .../resources/templates/mail/testEmail.html | 1 - .../bookstore-monolith/tsconfig-aot.json | 28 - jhipster-5/bookstore-monolith/tsconfig.json | 25 - jhipster-5/bookstore-monolith/tslint.json | 76 - .../webpack/logo-jhipster.png | Bin 4459 -> 0 bytes .../bookstore-monolith/webpack/utils.js | 44 - .../webpack/webpack.common.js | 86 - .../bookstore-monolith/webpack/webpack.dev.js | 148 - .../webpack/webpack.prod.js | 144 - jhipster-5/pom.xml | 22 - pom.xml | 4 - 382 files changed, 33227 deletions(-) delete mode 100644 jhipster-5/README.md delete mode 100644 jhipster-5/bookstore-monolith/.editorconfig delete mode 100644 jhipster-5/bookstore-monolith/.gitattributes delete mode 100644 jhipster-5/bookstore-monolith/.gitignore delete mode 100644 jhipster-5/bookstore-monolith/.huskyrc delete mode 100644 jhipster-5/bookstore-monolith/.jhipster/Book.json delete mode 100644 jhipster-5/bookstore-monolith/.mvn/wrapper/MavenWrapperDownloader.java delete mode 100644 jhipster-5/bookstore-monolith/.mvn/wrapper/maven-wrapper.jar delete mode 100644 jhipster-5/bookstore-monolith/.mvn/wrapper/maven-wrapper.properties delete mode 100644 jhipster-5/bookstore-monolith/.prettierignore delete mode 100644 jhipster-5/bookstore-monolith/.prettierrc delete mode 100644 jhipster-5/bookstore-monolith/.yo-rc.json delete mode 100644 jhipster-5/bookstore-monolith/README.md delete mode 100644 jhipster-5/bookstore-monolith/angular.json delete mode 100755 jhipster-5/bookstore-monolith/mvnw delete mode 100644 jhipster-5/bookstore-monolith/mvnw.cmd delete mode 100644 jhipster-5/bookstore-monolith/package.json delete mode 100644 jhipster-5/bookstore-monolith/pom.xml delete mode 100644 jhipster-5/bookstore-monolith/postcss.config.js delete mode 100644 jhipster-5/bookstore-monolith/proxy.conf.json delete mode 100644 jhipster-5/bookstore-monolith/src/main/docker/.dockerignore delete mode 100644 jhipster-5/bookstore-monolith/src/main/docker/Dockerfile delete mode 100644 jhipster-5/bookstore-monolith/src/main/docker/app.yml delete mode 100644 jhipster-5/bookstore-monolith/src/main/docker/entrypoint.sh delete mode 100644 jhipster-5/bookstore-monolith/src/main/docker/mysql.yml delete mode 100644 jhipster-5/bookstore-monolith/src/main/docker/sonar.yml delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/ApplicationWebXml.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/BookstoreApp.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/aop/logging/LoggingAspect.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/ApplicationProperties.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/AsyncConfiguration.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/CloudDatabaseConfiguration.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/Constants.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/DatabaseConfiguration.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/DateTimeFormatConfiguration.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/DefaultProfileUtil.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/JacksonConfiguration.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/LiquibaseConfiguration.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/LocaleConfiguration.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/LoggingAspectConfiguration.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/LoggingConfiguration.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/SecurityConfiguration.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/WebConfigurer.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/audit/AuditEventConverter.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/audit/package-info.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/package-info.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/domain/AbstractAuditingEntity.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/domain/Authority.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/domain/Book.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/domain/PersistentAuditEvent.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/domain/User.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/domain/package-info.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/repository/AuthorityRepository.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/repository/BookRepository.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/repository/CustomAuditEventRepository.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/repository/PersistenceAuditEventRepository.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/repository/UserRepository.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/repository/package-info.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/AuthoritiesConstants.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/CustomAuthenticationManager.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/DomainUserDetailsService.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/SecurityUtils.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/SpringSecurityAuditorAware.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/UserNotActivatedException.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/dto/LoginRequest.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/dto/LoginResponse.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/jwt/JWTConfigurer.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/jwt/JWTFilter.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/jwt/TokenProvider.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/package-info.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/AuditEventService.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/BookService.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/MailService.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/UserService.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/dto/BookDTO.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/dto/PasswordChangeDTO.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/dto/UserDTO.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/dto/package-info.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/impl/BookServiceImpl.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/mapper/BookMapper.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/mapper/EntityMapper.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/mapper/UserMapper.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/mapper/package-info.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/package-info.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/util/RandomUtil.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/AccountResource.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/AuditResource.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/BookResource.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/LogsResource.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/UserJWTController.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/UserResource.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/BadRequestAlertException.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/CustomParameterizedException.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/EmailAlreadyUsedException.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/EmailNotFoundException.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/ErrorConstants.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/ExceptionTranslator.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/FieldErrorVM.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/InternalServerErrorException.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/InvalidPasswordException.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/LoginAlreadyUsedException.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/package-info.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/package-info.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/util/HeaderUtil.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/util/PaginationUtil.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/vm/KeyAndPasswordVM.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/vm/LoggerVM.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/vm/LoginVM.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/vm/ManagedUserVM.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/vm/package-info.java delete mode 100644 jhipster-5/bookstore-monolith/src/main/jib/entrypoint.sh delete mode 100644 jhipster-5/bookstore-monolith/src/main/resources/.h2.server.properties delete mode 100644 jhipster-5/bookstore-monolith/src/main/resources/banner.txt delete mode 100644 jhipster-5/bookstore-monolith/src/main/resources/config/application-dev.yml delete mode 100644 jhipster-5/bookstore-monolith/src/main/resources/config/application-prod.yml delete mode 100644 jhipster-5/bookstore-monolith/src/main/resources/config/application-tls.yml delete mode 100644 jhipster-5/bookstore-monolith/src/main/resources/config/application.yml delete mode 100644 jhipster-5/bookstore-monolith/src/main/resources/config/liquibase/authorities.csv delete mode 100644 jhipster-5/bookstore-monolith/src/main/resources/config/liquibase/changelog/00000000000000_initial_schema.xml delete mode 100644 jhipster-5/bookstore-monolith/src/main/resources/config/liquibase/changelog/20190319124041_added_entity_Book.xml delete mode 100644 jhipster-5/bookstore-monolith/src/main/resources/config/liquibase/master.xml delete mode 100644 jhipster-5/bookstore-monolith/src/main/resources/config/liquibase/users.csv delete mode 100644 jhipster-5/bookstore-monolith/src/main/resources/config/liquibase/users_authorities.csv delete mode 100644 jhipster-5/bookstore-monolith/src/main/resources/config/tls/keystore.p12 delete mode 100644 jhipster-5/bookstore-monolith/src/main/resources/i18n/messages.properties delete mode 100644 jhipster-5/bookstore-monolith/src/main/resources/logback-spring.xml delete mode 100644 jhipster-5/bookstore-monolith/src/main/resources/templates/error.html delete mode 100644 jhipster-5/bookstore-monolith/src/main/resources/templates/mail/activationEmail.html delete mode 100644 jhipster-5/bookstore-monolith/src/main/resources/templates/mail/creationEmail.html delete mode 100644 jhipster-5/bookstore-monolith/src/main/resources/templates/mail/passwordResetEmail.html delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/404.html delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/account/account.module.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/account/account.route.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/account/activate/activate.component.html delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/account/activate/activate.component.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/account/activate/activate.route.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/account/activate/activate.service.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/account/index.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.html delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/account/password-reset/finish/password-reset-finish.route.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/account/password-reset/finish/password-reset-finish.service.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/account/password-reset/init/password-reset-init.component.html delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/account/password-reset/init/password-reset-init.component.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/account/password-reset/init/password-reset-init.route.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/account/password-reset/init/password-reset-init.service.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/account/password/password-strength-bar.component.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/account/password/password-strength-bar.scss delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/account/password/password.component.html delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/account/password/password.component.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/account/password/password.route.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/account/password/password.service.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/account/register/register.component.html delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/account/register/register.component.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/account/register/register.route.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/account/register/register.service.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/account/settings/settings.component.html delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/account/settings/settings.component.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/account/settings/settings.route.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/admin/admin.module.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/admin/admin.route.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/admin/audits/audit-data.model.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/admin/audits/audit.model.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/admin/audits/audits.component.html delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/admin/audits/audits.component.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/admin/audits/audits.route.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/admin/audits/audits.service.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/admin/configuration/configuration.component.html delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/admin/configuration/configuration.component.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/admin/configuration/configuration.route.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/admin/configuration/configuration.service.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/admin/docs/docs.component.html delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/admin/docs/docs.component.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/admin/docs/docs.route.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/admin/health/health-modal.component.html delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/admin/health/health-modal.component.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/admin/health/health.component.html delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/admin/health/health.component.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/admin/health/health.route.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/admin/health/health.service.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/admin/index.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/admin/logs/log.model.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/admin/logs/logs.component.html delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/admin/logs/logs.component.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/admin/logs/logs.route.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/admin/logs/logs.service.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/admin/metrics/metrics.component.html delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/admin/metrics/metrics.component.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/admin/metrics/metrics.route.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/admin/metrics/metrics.service.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-delete-dialog.component.html delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-delete-dialog.component.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-detail.component.html delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-detail.component.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-update.component.html delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-update.component.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management.component.html delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management.component.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management.route.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/app-routing.module.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/app.constants.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/app.main.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/app.module.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/blocks/config/prod.config.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/blocks/config/uib-pagination.config.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/blocks/interceptor/auth-expired.interceptor.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/blocks/interceptor/auth.interceptor.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/blocks/interceptor/errorhandler.interceptor.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/blocks/interceptor/notification.interceptor.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/core/auth/account.service.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/core/auth/auth-jwt.service.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/core/auth/csrf.service.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/core/auth/state-storage.service.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/core/auth/user-route-access-service.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/core/core.module.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/core/index.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/core/login/login-modal.service.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/core/login/login.service.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/core/user/account.model.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/core/user/user.model.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/core/user/user.service.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book-delete-dialog.component.html delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book-delete-dialog.component.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book-detail.component.html delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book-detail.component.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book-update.component.html delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book-update.component.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book.component.html delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book.component.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book.module.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book.route.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book.service.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/index.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/entities/entity.module.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/home/home.component.html delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/home/home.component.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/home/home.module.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/home/home.route.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/home/home.scss delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/home/index.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/error/error.component.html delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/error/error.component.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/error/error.route.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/footer/footer.component.html delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/footer/footer.component.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/index.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/main/main.component.html delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/main/main.component.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/navbar/navbar.component.html delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/navbar/navbar.component.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/navbar/navbar.route.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/navbar/navbar.scss delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/profiles/page-ribbon.component.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/profiles/page-ribbon.scss delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/profiles/profile-info.model.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/profiles/profile.service.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/polyfills.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/shared/alert/alert-error.component.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/shared/alert/alert.component.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/shared/auth/has-any-authority.directive.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/shared/constants/error.constants.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/shared/constants/input.constants.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/shared/constants/pagination.constants.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/shared/index.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/shared/login/login.component.html delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/shared/login/login.component.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/shared/model/book.model.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/shared/shared-common.module.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/shared/shared-libs.module.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/shared/shared.module.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/shared/util/datepicker-adapter.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/shared/util/request-util.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/app/vendor.ts delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/content/css/loading.css delete mode 100755 jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_0.svg delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_0_head-192.png delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_0_head-256.png delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_0_head-384.png delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_0_head-512.png delete mode 100755 jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_1.svg delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_1_head-192.png delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_1_head-256.png delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_1_head-384.png delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_1_head-512.png delete mode 100755 jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_2.svg delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_2_head-192.png delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_2_head-256.png delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_2_head-384.png delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_2_head-512.png delete mode 100755 jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_3.svg delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_3_head-192.png delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_3_head-256.png delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_3_head-384.png delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_3_head-512.png delete mode 100755 jhipster-5/bookstore-monolith/src/main/webapp/content/images/logo-jhipster.png delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/content/scss/_bootstrap-variables.scss delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/content/scss/global.scss delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/content/scss/vendor.scss delete mode 100755 jhipster-5/bookstore-monolith/src/main/webapp/favicon.ico delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/index.html delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/manifest.webapp delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/robots.txt delete mode 100644 jhipster-5/bookstore-monolith/src/main/webapp/swagger-ui/index.html delete mode 100644 jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/config/WebConfigurerUnitTest.java delete mode 100644 jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/config/WebConfigurerUnitTestController.java delete mode 100644 jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/config/timezone/HibernateTimeZoneIntegrationTest.java delete mode 100644 jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/repository/CustomAuditEventRepositoryIntegrationTest.java delete mode 100644 jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/repository/timezone/DateTimeWrapper.java delete mode 100644 jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/repository/timezone/DateTimeWrapperRepository.java delete mode 100644 jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/security/DomainUserDetailsServiceIntegrationTest.java delete mode 100644 jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/security/MockAuthenticationManager.java delete mode 100644 jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/security/SecurityUtilsUnitTest.java delete mode 100644 jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/security/jwt/JWTFilterUnitTest.java delete mode 100644 jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/security/jwt/TokenProviderUnitTest.java delete mode 100644 jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/service/MailServiceIntegrationTest.java delete mode 100644 jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/service/UserServiceIntegrationTest.java delete mode 100644 jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/service/mapper/UserMapperIntegrationTest.java delete mode 100644 jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/AccountResourceIntegrationTest.java delete mode 100644 jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/AuditResourceIntegrationTest.java delete mode 100644 jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/BookResourceIntegrationTest.java delete mode 100644 jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/LogsResourceIntegrationTest.java delete mode 100644 jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/TestUtil.java delete mode 100644 jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/UserJWTControllerIntegrationTest.java delete mode 100644 jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/UserResourceIntegrationTest.java delete mode 100644 jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/errors/ExceptionTranslatorIntegrationTest.java delete mode 100644 jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/errors/ExceptionTranslatorTestController.java delete mode 100644 jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/util/PaginationUtilUnitTest.java delete mode 100644 jhipster-5/bookstore-monolith/src/test/javascript/jest-global-mocks.ts delete mode 100644 jhipster-5/bookstore-monolith/src/test/javascript/jest.conf.js delete mode 100644 jhipster-5/bookstore-monolith/src/test/javascript/jest.ts delete mode 100644 jhipster-5/bookstore-monolith/src/test/javascript/spec/app/account/activate/activate.component.spec.ts delete mode 100644 jhipster-5/bookstore-monolith/src/test/javascript/spec/app/account/password-reset/finish/password-reset-finish.component.spec.ts delete mode 100644 jhipster-5/bookstore-monolith/src/test/javascript/spec/app/account/password-reset/init/password-reset-init.component.spec.ts delete mode 100644 jhipster-5/bookstore-monolith/src/test/javascript/spec/app/account/password/password-strength-bar.component.spec.ts delete mode 100644 jhipster-5/bookstore-monolith/src/test/javascript/spec/app/account/password/password.component.spec.ts delete mode 100644 jhipster-5/bookstore-monolith/src/test/javascript/spec/app/account/register/register.component.spec.ts delete mode 100644 jhipster-5/bookstore-monolith/src/test/javascript/spec/app/account/settings/settings.component.spec.ts delete mode 100644 jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/audits/audits.component.spec.ts delete mode 100644 jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/audits/audits.service.spec.ts delete mode 100644 jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/configuration/configuration.component.spec.ts delete mode 100644 jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/configuration/configuration.service.spec.ts delete mode 100644 jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/health/health.component.spec.ts delete mode 100644 jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/logs/logs.component.spec.ts delete mode 100644 jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/logs/logs.service.spec.ts delete mode 100644 jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/metrics/metrics.component.spec.ts delete mode 100644 jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/metrics/metrics.service.spec.ts delete mode 100644 jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/user-management/user-management-delete-dialog.component.spec.ts delete mode 100644 jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/user-management/user-management-detail.component.spec.ts delete mode 100644 jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/user-management/user-management-update.component.spec.ts delete mode 100644 jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/user-management/user-management.component.spec.ts delete mode 100644 jhipster-5/bookstore-monolith/src/test/javascript/spec/app/core/user/account.service.spec.ts delete mode 100644 jhipster-5/bookstore-monolith/src/test/javascript/spec/app/core/user/user.service.spec.ts delete mode 100644 jhipster-5/bookstore-monolith/src/test/javascript/spec/app/entities/book/book-delete-dialog.component.spec.ts delete mode 100644 jhipster-5/bookstore-monolith/src/test/javascript/spec/app/entities/book/book-detail.component.spec.ts delete mode 100644 jhipster-5/bookstore-monolith/src/test/javascript/spec/app/entities/book/book-update.component.spec.ts delete mode 100644 jhipster-5/bookstore-monolith/src/test/javascript/spec/app/entities/book/book.component.spec.ts delete mode 100644 jhipster-5/bookstore-monolith/src/test/javascript/spec/app/entities/book/book.service.spec.ts delete mode 100644 jhipster-5/bookstore-monolith/src/test/javascript/spec/app/shared/alert/alert-error.component.spec.ts delete mode 100644 jhipster-5/bookstore-monolith/src/test/javascript/spec/app/shared/login/login.component.spec.ts delete mode 100644 jhipster-5/bookstore-monolith/src/test/javascript/spec/helpers/mock-account.service.ts delete mode 100644 jhipster-5/bookstore-monolith/src/test/javascript/spec/helpers/mock-active-modal.service.ts delete mode 100644 jhipster-5/bookstore-monolith/src/test/javascript/spec/helpers/mock-alert.service.ts delete mode 100644 jhipster-5/bookstore-monolith/src/test/javascript/spec/helpers/mock-event-manager.service.ts delete mode 100644 jhipster-5/bookstore-monolith/src/test/javascript/spec/helpers/mock-login.service.ts delete mode 100644 jhipster-5/bookstore-monolith/src/test/javascript/spec/helpers/mock-route.service.ts delete mode 100644 jhipster-5/bookstore-monolith/src/test/javascript/spec/helpers/mock-state-storage.service.ts delete mode 100644 jhipster-5/bookstore-monolith/src/test/javascript/spec/helpers/spyobject.ts delete mode 100644 jhipster-5/bookstore-monolith/src/test/javascript/spec/test.module.ts delete mode 100644 jhipster-5/bookstore-monolith/src/test/resources/config/application.yml delete mode 100644 jhipster-5/bookstore-monolith/src/test/resources/i18n/messages_en.properties delete mode 100644 jhipster-5/bookstore-monolith/src/test/resources/logback.xml delete mode 100644 jhipster-5/bookstore-monolith/src/test/resources/templates/mail/testEmail.html delete mode 100644 jhipster-5/bookstore-monolith/tsconfig-aot.json delete mode 100644 jhipster-5/bookstore-monolith/tsconfig.json delete mode 100644 jhipster-5/bookstore-monolith/tslint.json delete mode 100644 jhipster-5/bookstore-monolith/webpack/logo-jhipster.png delete mode 100644 jhipster-5/bookstore-monolith/webpack/utils.js delete mode 100644 jhipster-5/bookstore-monolith/webpack/webpack.common.js delete mode 100644 jhipster-5/bookstore-monolith/webpack/webpack.dev.js delete mode 100644 jhipster-5/bookstore-monolith/webpack/webpack.prod.js delete mode 100644 jhipster-5/pom.xml diff --git a/jhipster-5/README.md b/jhipster-5/README.md deleted file mode 100644 index ba05641af0c0..000000000000 --- a/jhipster-5/README.md +++ /dev/null @@ -1,3 +0,0 @@ -## JHipster 5 - -This module contains articles about JHipster 5. This is an aggregator module, articles are in the relevant submodules. diff --git a/jhipster-5/bookstore-monolith/.editorconfig b/jhipster-5/bookstore-monolith/.editorconfig deleted file mode 100644 index a79c052f53d4..000000000000 --- a/jhipster-5/bookstore-monolith/.editorconfig +++ /dev/null @@ -1,24 +0,0 @@ -# EditorConfig helps developers define and maintain consistent -# coding styles between different editors and IDEs -# editorconfig.org - -root = true - -[*] - -# Change these settings to your own preference -indent_style = space -indent_size = 4 - -# We recommend you to keep these unchanged -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true - -[*.md] -trim_trailing_whitespace = false - -[package.json] -indent_style = space -indent_size = 2 diff --git a/jhipster-5/bookstore-monolith/.gitattributes b/jhipster-5/bookstore-monolith/.gitattributes deleted file mode 100644 index c013844d1068..000000000000 --- a/jhipster-5/bookstore-monolith/.gitattributes +++ /dev/null @@ -1,148 +0,0 @@ -# This file is inspired by https://github.com/alexkaratarakis/gitattributes -# -# Auto detect text files and perform LF normalization -# http://davidlaing.com/2012/09/19/customise-your-gitattributes-to-become-a-git-ninja/ -* text=auto - -# The above will handle all files NOT found below -# These files are text and should be normalized (Convert crlf => lf) - -*.bat text eol=crlf -*.coffee text -*.css text -*.cql text -*.df text -*.ejs text -*.html text -*.java text -*.js text -*.json text -*.less text -*.properties text -*.sass text -*.scss text -*.sh text eol=lf -*.sql text -*.txt text -*.ts text -*.xml text -*.yaml text -*.yml text - -# Documents -*.doc diff=astextplain -*.DOC diff=astextplain -*.docx diff=astextplain -*.DOCX diff=astextplain -*.dot diff=astextplain -*.DOT diff=astextplain -*.pdf diff=astextplain -*.PDF diff=astextplain -*.rtf diff=astextplain -*.RTF diff=astextplain -*.markdown text -*.md text -*.adoc text -*.textile text -*.mustache text -*.csv text -*.tab text -*.tsv text -*.txt text -AUTHORS text -CHANGELOG text -CHANGES text -CONTRIBUTING text -COPYING text -copyright text -*COPYRIGHT* text -INSTALL text -license text -LICENSE text -NEWS text -readme text -*README* text -TODO text - -# Graphics -*.png binary -*.jpg binary -*.jpeg binary -*.gif binary -*.tif binary -*.tiff binary -*.ico binary -# SVG treated as an asset (binary) by default. If you want to treat it as text, -# comment-out the following line and uncomment the line after. -*.svg binary -#*.svg text -*.eps binary - -# These files are binary and should be left untouched -# (binary is a macro for -text -diff) -*.class binary -*.jar binary -*.war binary - -## LINTERS -.csslintrc text -.eslintrc text -.jscsrc text -.jshintrc text -.jshintignore text -.stylelintrc text - -## CONFIGS -*.conf text -*.config text -.editorconfig text -.gitattributes text -.gitconfig text -.gitignore text -.htaccess text -*.npmignore text - -## HEROKU -Procfile text -.slugignore text - -## AUDIO -*.kar binary -*.m4a binary -*.mid binary -*.midi binary -*.mp3 binary -*.ogg binary -*.ra binary - -## VIDEO -*.3gpp binary -*.3gp binary -*.as binary -*.asf binary -*.asx binary -*.fla binary -*.flv binary -*.m4v binary -*.mng binary -*.mov binary -*.mp4 binary -*.mpeg binary -*.mpg binary -*.swc binary -*.swf binary -*.webm binary - -## ARCHIVES -*.7z binary -*.gz binary -*.rar binary -*.tar binary -*.zip binary - -## FONTS -*.ttf binary -*.eot binary -*.otf binary -*.woff binary -*.woff2 binary diff --git a/jhipster-5/bookstore-monolith/.gitignore b/jhipster-5/bookstore-monolith/.gitignore deleted file mode 100644 index b3f7df5404ab..000000000000 --- a/jhipster-5/bookstore-monolith/.gitignore +++ /dev/null @@ -1,146 +0,0 @@ -###################### -# Project Specific -###################### -/src/main/webapp/content/css/main.css -/target/www/** -/src/test/javascript/coverage/ - -###################### -# Node -###################### -/node/ -node_tmp/ -node_modules/ -npm-debug.log.* -/.awcache/* -/.cache-loader/* -package-lock.json - -###################### -# SASS -###################### -.sass-cache/ - -###################### -# Eclipse -###################### -*.pydevproject -.project -.metadata -tmp/ -tmp/**/* -*.tmp -*.bak -*.swp -*~.nib -local.properties -.classpath -.settings/ -.loadpath -.factorypath -/src/main/resources/rebel.xml - -# External tool builders -.externalToolBuilders/** - -# Locally stored "Eclipse launch configurations" -*.launch - -# CDT-specific -.cproject - -# PDT-specific -.buildpath - -###################### -# Intellij -###################### -.idea/ -*.iml -*.iws -*.ipr -*.ids -*.orig -classes/ -out/ - -###################### -# Visual Studio Code -###################### -.vscode/ - -###################### -# Maven -###################### -/log/ -/target/ - -###################### -# Gradle -###################### -.gradle/ -/build/ - -###################### -# Package Files -###################### -*.jar -*.war -*.ear -*.db - -###################### -# Windows -###################### -# Windows image file caches -Thumbs.db - -# Folder config file -Desktop.ini - -###################### -# Mac OSX -###################### -.DS_Store -.svn - -# Thumbnails -._* - -# Files that might appear on external disk -.Spotlight-V100 -.Trashes - -###################### -# Directories -###################### -/bin/ -/deploy/ - -###################### -# Logs -###################### -*.log* - -###################### -# Others -###################### -*.class -*.*~ -*~ -.merge_file* - -###################### -# Gradle Wrapper -###################### -!gradle/wrapper/gradle-wrapper.jar - -###################### -# Maven Wrapper -###################### -!.mvn/wrapper/maven-wrapper.jar - -###################### -# ESLint -###################### -.eslintcache diff --git a/jhipster-5/bookstore-monolith/.huskyrc b/jhipster-5/bookstore-monolith/.huskyrc deleted file mode 100644 index 9e18d87674f4..000000000000 --- a/jhipster-5/bookstore-monolith/.huskyrc +++ /dev/null @@ -1,5 +0,0 @@ -{ - "hooks": { - "pre-commit": "lint-staged" - } -} diff --git a/jhipster-5/bookstore-monolith/.jhipster/Book.json b/jhipster-5/bookstore-monolith/.jhipster/Book.json deleted file mode 100644 index 4c5bd1fa5238..000000000000 --- a/jhipster-5/bookstore-monolith/.jhipster/Book.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "fluentMethods": true, - "clientRootFolder": "", - "relationships": [], - "fields": [ - { - "fieldName": "title", - "fieldType": "String", - "fieldValidateRules": [ - "required" - ] - }, - { - "fieldName": "author", - "fieldType": "String", - "fieldValidateRules": [ - "required" - ] - }, - { - "fieldName": "published", - "fieldType": "LocalDate", - "fieldValidateRules": [ - "required" - ] - }, - { - "fieldName": "quantity", - "fieldType": "Integer", - "fieldValidateRules": [ - "required", - "min" - ], - "fieldValidateRulesMin": 0 - }, - { - "fieldName": "price", - "fieldType": "Double", - "fieldValidateRules": [ - "required", - "min" - ], - "fieldValidateRulesMin": 0 - } - ], - "changelogDate": "20190319124041", - "dto": "mapstruct", - "searchEngine": false, - "service": "serviceImpl", - "entityTableName": "book", - "databaseType": "sql", - "jpaMetamodelFiltering": false, - "pagination": "no" -} diff --git a/jhipster-5/bookstore-monolith/.mvn/wrapper/MavenWrapperDownloader.java b/jhipster-5/bookstore-monolith/.mvn/wrapper/MavenWrapperDownloader.java deleted file mode 100644 index 8fe1fab5a229..000000000000 --- a/jhipster-5/bookstore-monolith/.mvn/wrapper/MavenWrapperDownloader.java +++ /dev/null @@ -1,110 +0,0 @@ -/* -Licensed to the Apache Software Foundation (ASF) under one -or more contributor license agreements. See the NOTICE file -distributed with this work for additional information -regarding copyright ownership. The ASF licenses this file -to you under the Apache License, Version 2.0 (the -"License"); you may not use this file except in compliance -with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, -software distributed under the License is distributed on an -"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -KIND, either express or implied. See the License for the -specific language governing permissions and limitations -under the License. -*/ - -import java.net.*; -import java.io.*; -import java.nio.channels.*; -import java.util.Properties; - -public class MavenWrapperDownloader { - - /** - * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. - */ - private static final String DEFAULT_DOWNLOAD_URL = - "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar"; - - /** - * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to - * use instead of the default one. - */ - private static final String MAVEN_WRAPPER_PROPERTIES_PATH = - ".mvn/wrapper/maven-wrapper.properties"; - - /** - * Path where the maven-wrapper.jar will be saved to. - */ - private static final String MAVEN_WRAPPER_JAR_PATH = - ".mvn/wrapper/maven-wrapper.jar"; - - /** - * Name of the property which should be used to override the default download url for the wrapper. - */ - private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; - - public static void main(String args[]) { - System.out.println("- Downloader started"); - File baseDirectory = new File(args[0]); - System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); - - // If the maven-wrapper.properties exists, read it and check if it contains a custom - // wrapperUrl parameter. - File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); - String url = DEFAULT_DOWNLOAD_URL; - if (mavenWrapperPropertyFile.exists()) { - FileInputStream mavenWrapperPropertyFileInputStream = null; - try { - mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); - Properties mavenWrapperProperties = new Properties(); - mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); - url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); - } catch (IOException e) { - System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); - } finally { - try { - if (mavenWrapperPropertyFileInputStream != null) { - mavenWrapperPropertyFileInputStream.close(); - } - } catch (IOException e) { - // Ignore ... - } - } - } - System.out.println("- Downloading from: : " + url); - - File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); - if (!outputFile.getParentFile().exists()) { - if (!outputFile.getParentFile().mkdirs()) { - System.out.println( - "- ERROR creating output direcrory '" + outputFile.getParentFile().getAbsolutePath() + "'"); - } - } - System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); - try { - downloadFileFromURL(url, outputFile); - System.out.println("Done"); - System.exit(0); - } catch (Throwable e) { - System.out.println("- Error downloading"); - e.printStackTrace(); - System.exit(1); - } - } - - private static void downloadFileFromURL(String urlString, File destination) throws Exception { - URL website = new URL(urlString); - ReadableByteChannel rbc; - rbc = Channels.newChannel(website.openStream()); - FileOutputStream fos = new FileOutputStream(destination); - fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); - fos.close(); - rbc.close(); - } - -} diff --git a/jhipster-5/bookstore-monolith/.mvn/wrapper/maven-wrapper.jar b/jhipster-5/bookstore-monolith/.mvn/wrapper/maven-wrapper.jar deleted file mode 100644 index 01e67997377a393fd672c7dcde9dccbedf0cb1e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48337 zcmbTe1CV9Qwl>;j+wQV$+qSXFw%KK)%eHN!%U!l@+x~l>b1vR}@9y}|TM-#CBjy|< zb7YRpp)Z$$Gzci_H%LgxZ{NNV{%Qa9gZlF*E2<($D=8;N5Asbx8se{Sz5)O13x)rc z5cR(k$_mO!iis+#(8-D=#R@|AF(8UQ`L7dVNSKQ%v^P|1A%aF~Lye$@HcO@sMYOb3 zl`5!ThJ1xSJwsg7hVYFtE5vS^5UE0$iDGCS{}RO;R#3y#{w-1hVSg*f1)7^vfkxrm!!N|oTR0Hj?N~IbVk+yC#NK} z5myv()UMzV^!zkX@O=Yf!(Z_bF7}W>k*U4@--&RH0tHiHY0IpeezqrF#@8{E$9d=- z7^kT=1Bl;(Q0k{*_vzz1Et{+*lbz%mkIOw(UA8)EE-Pkp{JtJhe@VXQ8sPNTn$Vkj zicVp)sV%0omhsj;NCmI0l8zzAipDV#tp(Jr7p_BlL$}Pys_SoljztS%G-Wg+t z&Q#=<03Hoga0R1&L!B);r{Cf~b$G5p#@?R-NNXMS8@cTWE^7V!?ixz(Ag>lld;>COenWc$RZ61W+pOW0wh>sN{~j; zCBj!2nn|4~COwSgXHFH?BDr8pK323zvmDK-84ESq25b;Tg%9(%NneBcs3;r znZpzntG%E^XsSh|md^r-k0Oen5qE@awGLfpg;8P@a-s<{Fwf?w3WapWe|b-CQkqlo z46GmTdPtkGYdI$e(d9Zl=?TU&uv94VR`g|=7xB2Ur%=6id&R2 z4e@fP7`y58O2sl;YBCQFu7>0(lVt-r$9|06Q5V>4=>ycnT}Fyz#9p;3?86`ZD23@7 z7n&`!LXzjxyg*P4Tz`>WVvpU9-<5MDSDcb1 zZaUyN@7mKLEPGS$^odZcW=GLe?3E$JsMR0kcL4#Z=b4P94Q#7O%_60{h>0D(6P*VH z3}>$stt2s!)w4C4 z{zsj!EyQm$2ARSHiRm49r7u)59ZyE}ZznFE7AdF&O&!-&(y=?-7$LWcn4L_Yj%w`qzwz`cLqPRem1zN; z)r)07;JFTnPODe09Z)SF5@^uRuGP~Mjil??oWmJTaCb;yx4?T?d**;AW!pOC^@GnT zaY`WF609J>fG+h?5&#}OD1<%&;_lzM2vw70FNwn2U`-jMH7bJxdQM#6+dPNiiRFGT z7zc{F6bo_V%NILyM?rBnNsH2>Bx~zj)pJ}*FJxW^DC2NLlOI~18Mk`7sl=t`)To6Ui zu4GK6KJx^6Ms4PP?jTn~jW6TOFLl3e2-q&ftT=31P1~a1%7=1XB z+H~<1dh6%L)PbBmtsAr38>m~)?k3}<->1Bs+;227M@?!S+%X&M49o_e)X8|vZiLVa z;zWb1gYokP;Sbao^qD+2ZD_kUn=m=d{Q9_kpGxcbdQ0d5<_OZJ!bZJcmgBRf z!Cdh`qQ_1NLhCulgn{V`C%|wLE8E6vq1Ogm`wb;7Dj+xpwik~?kEzDT$LS?#%!@_{ zhOoXOC95lVcQU^pK5x$Da$TscVXo19Pps zA!(Mk>N|tskqBn=a#aDC4K%jV#+qI$$dPOK6;fPO)0$0j$`OV+mWhE+TqJoF5dgA=TH-}5DH_)H_ zh?b(tUu@65G-O)1ah%|CsU8>cLEy0!Y~#ut#Q|UT92MZok0b4V1INUL-)Dvvq`RZ4 zTU)YVX^r%_lXpn_cwv`H=y49?!m{krF3Rh7O z^z7l4D<+^7E?ji(L5CptsPGttD+Z7{N6c-`0V^lfFjsdO{aJMFfLG9+wClt<=Rj&G zf6NgsPSKMrK6@Kvgarmx{&S48uc+ZLIvk0fbH}q-HQ4FSR33$+%FvNEusl6xin!?e z@rrWUP5U?MbBDeYSO~L;S$hjxISwLr&0BOSd?fOyeCWm6hD~)|_9#jo+PVbAY3wzf zcZS*2pX+8EHD~LdAl>sA*P>`g>>+&B{l94LNLp#KmC)t6`EPhL95s&MMph46Sk^9x%B$RK!2MI--j8nvN31MNLAJBsG`+WMvo1}xpaoq z%+W95_I`J1Pr&Xj`=)eN9!Yt?LWKs3-`7nf)`G6#6#f+=JK!v943*F&veRQxKy-dm(VcnmA?K_l~ zfDWPYl6hhN?17d~^6Zuo@>Hswhq@HrQ)sb7KK^TRhaM2f&td)$6zOn7we@ zd)x4-`?!qzTGDNS-E(^mjM%d46n>vPeMa;%7IJDT(nC)T+WM5F-M$|p(78W!^ck6)A_!6|1o!D97tw8k|5@0(!8W&q9*ovYl)afk z2mxnniCOSh7yHcSoEu8k`i15#oOi^O>uO_oMpT=KQx4Ou{&C4vqZG}YD0q!{RX=`#5wmcHT=hqW3;Yvg5Y^^ ziVunz9V)>2&b^rI{ssTPx26OxTuCw|+{tt_M0TqD?Bg7cWN4 z%UH{38(EW1L^!b~rtWl)#i}=8IUa_oU8**_UEIw+SYMekH;Epx*SA7Hf!EN&t!)zuUca@_Q^zW(u_iK_ zrSw{nva4E6-Npy9?lHAa;b(O z`I74A{jNEXj(#r|eS^Vfj-I!aHv{fEkzv4=F%z0m;3^PXa27k0Hq#RN@J7TwQT4u7 ztisbp3w6#k!RC~!5g-RyjpTth$lf!5HIY_5pfZ8k#q!=q*n>~@93dD|V>=GvH^`zn zVNwT@LfA8^4rpWz%FqcmzX2qEAhQ|_#u}md1$6G9qD%FXLw;fWWvqudd_m+PzI~g3 z`#WPz`M1XUKfT3&T4~XkUie-C#E`GN#P~S(Zx9%CY?EC?KP5KNK`aLlI1;pJvq@d z&0wI|dx##t6Gut6%Y9c-L|+kMov(7Oay++QemvI`JOle{8iE|2kZb=4x%a32?>-B~ z-%W$0t&=mr+WJ3o8d(|^209BapD`@6IMLbcBlWZlrr*Yrn^uRC1(}BGNr!ct z>xzEMV(&;ExHj5cce`pk%6!Xu=)QWtx2gfrAkJY@AZlHWiEe%^_}mdzvs(6>k7$e; ze4i;rv$_Z$K>1Yo9f4&Jbx80?@X!+S{&QwA3j#sAA4U4#v zwZqJ8%l~t7V+~BT%j4Bwga#Aq0&#rBl6p$QFqS{DalLd~MNR8Fru+cdoQ78Dl^K}@l#pmH1-e3?_0tZKdj@d2qu z_{-B11*iuywLJgGUUxI|aen-((KcAZZdu8685Zi1b(#@_pmyAwTr?}#O7zNB7U6P3 zD=_g*ZqJkg_9_X3lStTA-ENl1r>Q?p$X{6wU6~e7OKNIX_l9T# z>XS?PlNEM>P&ycY3sbivwJYAqbQH^)z@PobVRER*Ud*bUi-hjADId`5WqlZ&o+^x= z-Lf_80rC9>tqFBF%x#`o>69>D5f5Kp->>YPi5ArvgDwV#I6!UoP_F0YtfKoF2YduA zCU!1`EB5;r68;WyeL-;(1K2!9sP)at9C?$hhy(dfKKBf}>skPqvcRl>UTAB05SRW! z;`}sPVFFZ4I%YrPEtEsF(|F8gnfGkXI-2DLsj4_>%$_ZX8zVPrO=_$7412)Mr9BH{ zwKD;e13jP2XK&EpbhD-|`T~aI`N(*}*@yeDUr^;-J_`fl*NTSNbupyHLxMxjwmbuw zt3@H|(hvcRldE+OHGL1Y;jtBN76Ioxm@UF1K}DPbgzf_a{`ohXp_u4=ps@x-6-ZT>F z)dU`Jpu~Xn&Qkq2kg%VsM?mKC)ArP5c%r8m4aLqimgTK$atIxt^b8lDVPEGDOJu!) z%rvASo5|v`u_}vleP#wyu1$L5Ta%9YOyS5;w2I!UG&nG0t2YL|DWxr#T7P#Ww8MXDg;-gr`x1?|V`wy&0vm z=hqozzA!zqjOm~*DSI9jk8(9nc4^PL6VOS$?&^!o^Td8z0|eU$9x8s{8H!9zK|)NO zqvK*dKfzG^Dy^vkZU|p9c+uVV3>esY)8SU1v4o{dZ+dPP$OT@XCB&@GJ<5U&$Pw#iQ9qzuc`I_%uT@%-v zLf|?9w=mc;b0G%%{o==Z7AIn{nHk`>(!e(QG%(DN75xfc#H&S)DzSFB6`J(cH!@mX3mv_!BJv?ByIN%r-i{Y zBJU)}Vhu)6oGoQjT2tw&tt4n=9=S*nQV`D_MSw7V8u1-$TE>F-R6Vo0giKnEc4NYZ zAk2$+Tba~}N0wG{$_7eaoCeb*Ubc0 zq~id50^$U>WZjmcnIgsDione)f+T)0ID$xtgM zpGZXmVez0DN!)ioW1E45{!`G9^Y1P1oXhP^rc@c?o+c$^Kj_bn(Uo1H2$|g7=92v- z%Syv9Vo3VcibvH)b78USOTwIh{3%;3skO_htlfS?Cluwe`p&TMwo_WK6Z3Tz#nOoy z_E17(!pJ>`C2KECOo38F1uP0hqBr>%E=LCCCG{j6$b?;r?Fd$4@V-qjEzgWvzbQN%_nlBg?Ly`x-BzO2Nnd1 zuO|li(oo^Rubh?@$q8RVYn*aLnlWO_dhx8y(qzXN6~j>}-^Cuq4>=d|I>vhcjzhSO zU`lu_UZ?JaNs1nH$I1Ww+NJI32^qUikAUfz&k!gM&E_L=e_9}!<(?BfH~aCmI&hfzHi1~ zraRkci>zMPLkad=A&NEnVtQQ#YO8Xh&K*;6pMm$ap_38m;XQej5zEqUr`HdP&cf0i z5DX_c86@15jlm*F}u-+a*^v%u_hpzwN2eT66Zj_1w)UdPz*jI|fJb#kSD_8Q-7q9gf}zNu2h=q{)O*XH8FU)l|m;I;rV^QpXRvMJ|7% zWKTBX*cn`VY6k>mS#cq!uNw7H=GW3?wM$8@odjh$ynPiV7=Ownp}-|fhULZ)5{Z!Q z20oT!6BZTK;-zh=i~RQ$Jw>BTA=T(J)WdnTObDM#61lUm>IFRy@QJ3RBZr)A9CN!T z4k7%)I4yZ-0_n5d083t!=YcpSJ}M5E8`{uIs3L0lIaQws1l2}+w2(}hW&evDlMnC!WV?9U^YXF}!N*iyBGyCyJ<(2(Ca<>!$rID`( zR?V~-53&$6%DhW=)Hbd-oetTXJ-&XykowOx61}1f`V?LF=n8Nb-RLFGqheS7zNM_0 z1ozNap9J4GIM1CHj-%chrCdqPlP307wfrr^=XciOqn?YPL1|ozZ#LNj8QoCtAzY^q z7&b^^K&?fNSWD@*`&I+`l9 zP2SlD0IO?MK60nbucIQWgz85l#+*<{*SKk1K~|x{ux+hn=SvE_XE`oFlr7$oHt-&7 zP{+x)*y}Hnt?WKs_Ymf(J^aoe2(wsMMRPu>Pg8H#x|zQ_=(G5&ieVhvjEXHg1zY?U zW-hcH!DJPr+6Xnt)MslitmnHN(Kgs4)Y`PFcV0Qvemj;GG`kf<>?p})@kd9DA7dqs zNtGRKVr0%x#Yo*lXN+vT;TC{MR}}4JvUHJHDLd-g88unUj1(#7CM<%r!Z1Ve>DD)FneZ| z8Q0yI@i4asJaJ^ge%JPl>zC3+UZ;UDUr7JvUYNMf=M2t{It56OW1nw#K8%sXdX$Yg zpw3T=n}Om?j3-7lu)^XfBQkoaZ(qF0D=Aw&D%-bsox~`8Y|!whzpd5JZ{dmM^A5)M zOwWEM>bj}~885z9bo{kWFA0H(hv(vL$G2;pF$@_M%DSH#g%V*R(>;7Z7eKX&AQv1~ z+lKq=488TbTwA!VtgSHwduwAkGycunrg}>6oiX~;Kv@cZlz=E}POn%BWt{EEd;*GV zmc%PiT~k<(TA`J$#6HVg2HzF6Iw5w9{C63y`Y7?OB$WsC$~6WMm3`UHaWRZLN3nKiV# zE;iiu_)wTr7ZiELH$M^!i5eC9aRU#-RYZhCl1z_aNs@f`tD4A^$xd7I_ijCgI!$+| zsulIT$KB&PZ}T-G;Ibh@UPafvOc-=p7{H-~P)s{3M+;PmXe7}}&Mn+9WT#(Jmt5DW%73OBA$tC#Ug!j1BR~=Xbnaz4hGq zUOjC*z3mKNbrJm1Q!Ft^5{Nd54Q-O7<;n})TTQeLDY3C}RBGwhy*&wgnl8dB4lwkG zBX6Xn#hn|!v7fp@@tj9mUPrdD!9B;tJh8-$aE^t26n_<4^=u~s_MfbD?lHnSd^FGGL6the7a|AbltRGhfET*X;P7=AL?WPjBtt;3IXgUHLFMRBz(aWW_ zZ?%%SEPFu&+O?{JgTNB6^5nR@)rL6DFqK$KS$bvE#&hrPs>sYsW=?XzOyD6ixglJ8rdt{P8 zPAa*+qKt(%ju&jDkbB6x7aE(={xIb*&l=GF(yEnWPj)><_8U5m#gQIIa@l49W_=Qn^RCsYqlEy6Om%!&e~6mCAfDgeXe3aYpHQAA!N|kmIW~Rk}+p6B2U5@|1@7iVbm5&e7E3;c9q@XQlb^JS(gmJl%j9!N|eNQ$*OZf`3!;raRLJ z;X-h>nvB=S?mG!-VH{65kwX-UwNRMQB9S3ZRf`hL z#WR)+rn4C(AG(T*FU}`&UJOU4#wT&oDyZfHP^s9#>V@ens??pxuu-6RCk=Er`DF)X z>yH=P9RtrtY;2|Zg3Tnx3Vb!(lRLedVRmK##_#;Kjnlwq)eTbsY8|D{@Pjn_=kGYO zJq0T<_b;aB37{U`5g6OSG=>|pkj&PohM%*O#>kCPGK2{0*=m(-gKBEOh`fFa6*~Z! zVxw@7BS%e?cV^8{a`Ys4;w=tH4&0izFxgqjE#}UfsE^?w)cYEQjlU|uuv6{>nFTp| zNLjRRT1{g{?U2b6C^w{!s+LQ(n}FfQPDfYPsNV?KH_1HgscqG7z&n3Bh|xNYW4i5i zT4Uv-&mXciu3ej=+4X9h2uBW9o(SF*N~%4%=g|48R-~N32QNq!*{M4~Y!cS4+N=Zr z?32_`YpAeg5&r_hdhJkI4|i(-&BxCKru`zm9`v+CN8p3r9P_RHfr{U$H~RddyZKw{ zR?g5i>ad^Ge&h?LHlP7l%4uvOv_n&WGc$vhn}2d!xIWrPV|%x#2Q-cCbQqQ|-yoTe z_C(P))5e*WtmpB`Fa~#b*yl#vL4D_h;CidEbI9tsE%+{-4ZLKh#9^{mvY24#u}S6oiUr8b0xLYaga!(Fe7Dxi}v6 z%5xNDa~i%tN`Cy_6jbk@aMaY(xO2#vWZh9U?mrNrLs5-*n>04(-Dlp%6AXsy;f|a+ z^g~X2LhLA>xy(8aNL9U2wr=ec%;J2hEyOkL*D%t4cNg7WZF@m?kF5YGvCy`L5jus# zGP8@iGTY|ov#t&F$%gkWDoMR7v*UezIWMeg$C2~WE9*5%}$3!eFiFJ?hypfIA(PQT@=B|^Ipcu z{9cM3?rPF|gM~{G)j*af1hm+l92W7HRpQ*hSMDbh(auwr}VBG7`ldp>`FZ^amvau zTa~Y7%tH@>|BB6kSRGiWZFK?MIzxEHKGz#P!>rB-90Q_UsZ=uW6aTzxY{MPP@1rw- z&RP^Ld%HTo($y?6*aNMz8h&E?_PiO{jq%u4kr#*uN&Q+Yg1Rn831U4A6u#XOzaSL4 zrcM+0v@%On8N*Mj!)&IzXW6A80bUK&3w|z06cP!UD^?_rb_(L-u$m+#%YilEjkrlxthGCLQ@Q?J!p?ggv~0 z!qipxy&`w48T0(Elsz<^hp_^#1O1cNJ1UG=61Nc=)rlRo_P6v&&h??Qvv$ifC3oJh zo)ZZhU5enAqU%YB>+FU!1vW)i$m-Z%w!c&92M1?))n4z1a#4-FufZ$DatpJ^q)_Zif z;Br{HmZ|8LYRTi`#?TUfd;#>c4@2qM5_(H+Clt@kkQT+kx78KACyvY)?^zhyuN_Z& z-*9_o_f3IC2lX^(aLeqv#>qnelb6_jk+lgQh;TN>+6AU9*6O2h_*=74m;xSPD1^C9 zE0#!+B;utJ@8P6_DKTQ9kNOf`C*Jj0QAzsngKMQVDUsp=k~hd@wt}f{@$O*xI!a?p z6Gti>uE}IKAaQwKHRb0DjmhaF#+{9*=*^0)M-~6lPS-kCI#RFGJ-GyaQ+rhbmhQef zwco))WNA1LFr|J3Qsp4ra=_j?Y%b{JWMX6Zr`$;*V`l`g7P0sP?Y1yOY;e0Sb!AOW0Em=U8&i8EKxTd$dX6=^Iq5ZC%zMT5Jjj%0_ zbf|}I=pWjBKAx7wY<4-4o&E6vVStcNlT?I18f5TYP9!s|5yQ_C!MNnRyDt7~u~^VS@kKd}Zwc~? z=_;2}`Zl^xl3f?ce8$}g^V)`b8Pz88=9FwYuK_x%R?sbAF-dw`*@wokEC3mp0Id>P z>OpMGxtx!um8@gW2#5|)RHpRez+)}_p;`+|*m&3&qy{b@X>uphcgAVgWy`?Nc|NlH z75_k2%3h7Fy~EkO{vBMuzV7lj4B}*1Cj(Ew7oltspA6`d69P`q#Y+rHr5-m5&be&( zS1GcP5u#aM9V{fUQTfHSYU`kW&Wsxeg;S*{H_CdZ$?N>S$JPv!_6T(NqYPaS{yp0H7F~7vy#>UHJr^lV?=^vt4?8$v8vkI-1eJ4{iZ!7D5A zg_!ZxZV+9Wx5EIZ1%rbg8`-m|=>knmTE1cpaBVew_iZpC1>d>qd3`b6<(-)mtJBmd zjuq-qIxyKvIs!w4$qpl{0cp^-oq<=-IDEYV7{pvfBM7tU+ zfX3fc+VGtqjPIIx`^I0i>*L-NfY=gFS+|sC75Cg;2<)!Y`&p&-AxfOHVADHSv1?7t zlOKyXxi|7HdwG5s4T0))dWudvz8SZpxd<{z&rT<34l}XaaP86x)Q=2u5}1@Sgc41D z2gF)|aD7}UVy)bnm788oYp}Es!?|j73=tU<_+A4s5&it~_K4 z;^$i0Vnz8y&I!abOkzN|Vz;kUTya#Wi07>}Xf^7joZMiHH3Mdy@e_7t?l8^A!r#jTBau^wn#{|!tTg=w01EQUKJOca!I zV*>St2399#)bMF++1qS8T2iO3^oA`i^Px*i)T_=j=H^Kp4$Zao(>Y)kpZ=l#dSgcUqY=7QbGz9mP9lHnII8vl?yY9rU+i%X)-j0&-- zrtaJsbkQ$;DXyIqDqqq)LIJQ!`MIsI;goVbW}73clAjN;1Rtp7%{67uAfFNe_hyk= zn=8Q1x*zHR?txU)x9$nQu~nq7{Gbh7?tbgJ>i8%QX3Y8%T{^58W^{}(!9oPOM+zF3 zW`%<~q@W}9hoes56uZnNdLkgtcRqPQ%W8>o7mS(j5Sq_nN=b0A`Hr%13P{uvH?25L zMfC&Z0!{JBGiKoVwcIhbbx{I35o}twdI_ckbs%1%AQ(Tdb~Xw+sXAYcOoH_9WS(yM z2dIzNLy4D%le8Fxa31fd;5SuW?ERAsagZVEo^i};yjBhbxy9&*XChFtOPV8G77{8! zlYemh2vp7aBDMGT;YO#=YltE~(Qv~e7c=6$VKOxHwvrehtq>n|w}vY*YvXB%a58}n zqEBR4zueP@A~uQ2x~W-{o3|-xS@o>Ad@W99)ya--dRx;TZLL?5E(xstg(6SwDIpL5 zMZ)+)+&(hYL(--dxIKB*#v4mDq=0ve zNU~~jk426bXlS8%lcqsvuqbpgn zbFgxap;17;@xVh+Y~9@+-lX@LQv^Mw=yCM&2!%VCfZsiwN>DI=O?vHupbv9!4d*>K zcj@a5vqjcjpwkm@!2dxzzJGQ7#ujW(IndUuYC)i3N2<*doRGX8a$bSbyRO#0rA zUpFyEGx4S9$TKuP9BybRtjcAn$bGH-9>e(V{pKYPM3waYrihBCQf+UmIC#E=9v?or z_7*yzZfT|)8R6>s(lv6uzosT%WoR`bQIv(?llcH2Bd@26?zU%r1K25qscRrE1 z9TIIP_?`78@uJ{%I|_K;*syVinV;pCW!+zY-!^#n{3It^6EKw{~WIA0pf_hVzEZy zFzE=d-NC#mge{4Fn}we02-%Zh$JHKpXX3qF<#8__*I}+)Npxm?26dgldWyCmtwr9c zOXI|P0zCzn8M_Auv*h9;2lG}x*E|u2!*-s}moqS%Z`?O$<0amJG9n`dOV4**mypG- zE}In1pOQ|;@@Jm;I#m}jkQegIXag4K%J;C7<@R2X8IdsCNqrbsaUZZRT|#6=N!~H} zlc2hPngy9r+Gm_%tr9V&HetvI#QwUBKV&6NC~PK>HNQ3@fHz;J&rR7XB>sWkXKp%A ziLlogA`I*$Z7KzLaX^H_j)6R|9Q>IHc? z{s0MsOW>%xW|JW=RUxY@@0!toq`QXa=`j;)o2iDBiDZ7c4Bc>BiDTw+zk}Jm&vvH8qX$R`M6Owo>m%n`eizBf!&9X6 z)f{GpMak@NWF+HNg*t#H5yift5@QhoYgT7)jxvl&O=U54Z>FxT5prvlDER}AwrK4Q z*&JP9^k332OxC$(E6^H`#zw|K#cpwy0i*+!z{T23;dqUKbjP!-r*@_!sp+Uec@^f0 zIJMjqhp?A#YoX5EB%iWu;mxJ1&W6Nb4QQ@GElqNjFNRc*=@aGc$PHdoUptckkoOZC zk@c9i+WVnDI=GZ1?lKjobDl%nY2vW~d)eS6Lch&J zDi~}*fzj9#<%xg<5z-4(c}V4*pj~1z2z60gZc}sAmys^yvobWz)DKDGWuVpp^4-(!2Nn7 z3pO})bO)({KboXlQA>3PIlg@Ie$a=G;MzVeft@OMcKEjIr=?;=G0AH?dE_DcNo%n$_bFjqQ8GjeIyJP^NkX~7e&@+PqnU-c3@ABap z=}IZvC0N{@fMDOpatOp*LZ7J6Hz@XnJzD!Yh|S8p2O($2>A4hbpW{8?#WM`uJG>?} zwkDF3dimqejl$3uYoE7&pr5^f4QP-5TvJ;5^M?ZeJM8ywZ#Dm`kR)tpYieQU;t2S! z05~aeOBqKMb+`vZ2zfR*2(&z`Y1VROAcR(^Q7ZyYlFCLHSrTOQm;pnhf3Y@WW#gC1 z7b$_W*ia0@2grK??$pMHK>a$;J)xIx&fALD4)w=xlT=EzrwD!)1g$2q zy8GQ+r8N@?^_tuCKVi*q_G*!#NxxY#hpaV~hF} zF1xXy#XS|q#)`SMAA|46+UnJZ__lETDwy}uecTSfz69@YO)u&QORO~F^>^^j-6q?V z-WK*o?XSw~ukjoIT9p6$6*OStr`=+;HrF#)p>*>e|gy0D9G z#TN(VSC11^F}H#?^|^ona|%;xCC!~H3~+a>vjyRC5MPGxFqkj6 zttv9I_fv+5$vWl2r8+pXP&^yudvLxP44;9XzUr&a$&`?VNhU^$J z`3m68BAuA?ia*IF%Hs)@>xre4W0YoB^(X8RwlZ?pKR)rvGX?u&K`kb8XBs^pe}2v* z_NS*z7;4%Be$ts_emapc#zKjVMEqn8;aCX=dISG3zvJP>l4zHdpUwARLixQSFzLZ0 z$$Q+9fAnVjA?7PqANPiH*XH~VhrVfW11#NkAKjfjQN-UNz?ZT}SG#*sk*)VUXZ1$P zdxiM@I2RI7Tr043ZgWd3G^k56$Non@LKE|zLwBgXW#e~{7C{iB3&UjhKZPEj#)cH9 z%HUDubc0u@}dBz>4zU;sTluxBtCl!O4>g9ywc zhEiM-!|!C&LMjMNs6dr6Q!h{nvTrNN0hJ+w*h+EfxW=ro zxAB%*!~&)uaqXyuh~O`J(6e!YsD0o0l_ung1rCAZt~%4R{#izD2jT~${>f}m{O!i4 z`#UGbiSh{L=FR`Q`e~9wrKHSj?I>eXHduB`;%TcCTYNG<)l@A%*Ld?PK=fJi}J? z9T-|Ib8*rLE)v_3|1+Hqa!0ch>f% zfNFz@o6r5S`QQJCwRa4zgx$7AyQ7ZTv2EM7ZQHh!72CFL+qT`Y)k!)|Zr;7mcfV8T z)PB$1r*5rUzgE@y^E_kDG3Ol5n6q}eU2hJcXY7PI1}N=>nwC6k%nqxBIAx4Eix*`W zch0}3aPFe5*lg1P(=7J^0ZXvpOi9v2l*b?j>dI%iamGp$SmFaxpZod*TgYiyhF0= za44lXRu%9MA~QWN;YX@8LM32BqKs&W4&a3ve9C~ndQq>S{zjRNj9&&8k-?>si8)^m zW%~)EU)*$2YJzTXjRV=-dPAu;;n2EDYb=6XFyz`D0f2#29(mUX}*5~KU3k>$LwN#OvBx@ zl6lC>UnN#0?mK9*+*DMiboas!mmGnoG%gSYeThXI<=rE(!Pf-}oW}?yDY0804dH3o zo;RMFJzxP|srP-6ZmZ_peiVycfvH<`WJa9R`Z#suW3KrI*>cECF(_CB({ToWXSS18#3%vihZZJ{BwJPa?m^(6xyd1(oidUkrOU zlqyRQUbb@W_C)5Q)%5bT3K0l)w(2cJ-%?R>wK35XNl&}JR&Pn*laf1M#|s4yVXQS# zJvkT$HR;^3k{6C{E+{`)J+~=mPA%lv1T|r#kN8kZP}os;n39exCXz^cc{AN(Ksc%} zA561&OeQU8gIQ5U&Y;Ca1TatzG`K6*`9LV<|GL-^=qg+nOx~6 zBEMIM7Q^rkuhMtw(CZtpU(%JlBeV?KC+kjVDL34GG1sac&6(XN>nd+@Loqjo%i6I~ zjNKFm^n}K=`z8EugP20fd_%~$Nfu(J(sLL1gvXhxZt|uvibd6rLXvM%!s2{g0oNA8 z#Q~RfoW8T?HE{ge3W>L9bx1s2_L83Odx)u1XUo<`?a~V-_ZlCeB=N-RWHfs1(Yj!_ zP@oxCRysp9H8Yy@6qIc69TQx(1P`{iCh)8_kH)_vw1=*5JXLD(njxE?2vkOJ z>qQz!*r`>X!I69i#1ogdVVB=TB40sVHX;gak=fu27xf*}n^d>@*f~qbtVMEW!_|+2 zXS`-E%v`_>(m2sQnc6+OA3R z-6K{6$KZsM+lF&sn~w4u_md6J#+FzqmtncY;_ z-Q^D=%LVM{A0@VCf zV9;?kF?vV}*=N@FgqC>n-QhKJD+IT7J!6llTEH2nmUxKiBa*DO4&PD5=HwuD$aa(1 z+uGf}UT40OZAH@$jjWoI7FjOQAGX6roHvf_wiFKBfe4w|YV{V;le}#aT3_Bh^$`Pp zJZGM_()iFy#@8I^t{ryOKQLt%kF7xq&ZeD$$ghlTh@bLMv~||?Z$#B2_A4M&8)PT{ zyq$BzJpRrj+=?F}zH+8XcPvhRP+a(nnX2^#LbZqgWQ7uydmIM&FlXNx4o6m;Q5}rB z^ryM&o|~a-Zb20>UCfSFwdK4zfk$*~<|90v0=^!I?JnHBE{N}74iN;w6XS=#79G+P zB|iewe$kk;9^4LinO>)~KIT%%4Io6iFFXV9gJcIvu-(!um{WfKAwZDmTrv=wb#|71 zWqRjN8{3cRq4Ha2r5{tw^S>0DhaC3m!i}tk9q08o>6PtUx1GsUd{Z17FH45rIoS+oym1>3S0B`>;uo``+ADrd_Um+8s$8V6tKsA8KhAm z{pTv@zj~@+{~g&ewEBD3um9@q!23V_8Nb0_R#1jcg0|MyU)?7ua~tEY63XSvqwD`D zJ+qY0Wia^BxCtXpB)X6htj~*7)%un+HYgSsSJPAFED7*WdtlFhuJj5d3!h8gt6$(s ztrx=0hFH8z(Fi9}=kvPI?07j&KTkssT=Vk!d{-M50r!TsMD8fPqhN&%(m5LGpO>}L zse;sGl_>63FJ)(8&8(7Wo2&|~G!Lr^cc!uuUBxGZE)ac7Jtww7euxPo)MvxLXQXlk zeE>E*nMqAPwW0&r3*!o`S7wK&078Q#1bh!hNbAw0MFnK-2gU25&8R@@j5}^5-kHeR z!%krca(JG%&qL2mjFv380Gvb*eTLllTaIpVr3$gLH2e3^xo z=qXjG0VmES%OXAIsOQG|>{aj3fv+ZWdoo+a9tu8)4AyntBP>+}5VEmv@WtpTo<-aH zF4C(M#dL)MyZmU3sl*=TpAqU#r>c8f?-zWMq`wjEcp^jG2H`8m$p-%TW?n#E5#Th+ z7Zy#D>PPOA4|G@-I$!#Yees_9Ku{i_Y%GQyM)_*u^nl+bXMH!f_ z8>BM|OTex;vYWu`AhgfXFn)0~--Z7E0WR-v|n$XB-NOvjM156WR(eu z(qKJvJ%0n+%+%YQP=2Iz-hkgI_R>7+=)#FWjM#M~Y1xM8m_t8%=FxV~Np$BJ{^rg9 z5(BOvYfIY{$h1+IJyz-h`@jhU1g^Mo4K`vQvR<3wrynWD>p{*S!kre-(MT&`7-WK! zS}2ceK+{KF1yY*x7FH&E-1^8b$zrD~Ny9|9(!1Y)a#)*zf^Uo@gy~#%+*u`U!R`^v zCJ#N!^*u_gFq7;-XIYKXvac$_=booOzPgrMBkonnn%@#{srUC<((e*&7@YR?`CP;o zD2*OE0c%EsrI72QiN`3FpJ#^Bgf2~qOa#PHVmbzonW=dcrs92>6#{pEnw19AWk%;H zJ4uqiD-dx*w2pHf8&Jy{NXvGF^Gg!ungr2StHpMQK5^+ zEmDjjBonrrT?d9X;BHSJeU@lX19|?On)(Lz2y-_;_!|}QQMsq4Ww9SmzGkzVPQTr* z)YN>_8i^rTM>Bz@%!!v)UsF&Nb{Abz>`1msFHcf{)Ufc_a-mYUPo@ei#*%I_jWm#7 zX01=Jo<@6tl`c;P_uri^gJxDVHOpCano2Xc5jJE8(;r@y6THDE>x*#-hSKuMQ_@nc z68-JLZyag_BTRE(B)Pw{B;L0+Zx!5jf%z-Zqug*og@^ zs{y3{Za(0ywO6zYvES>SW*cd4gwCN^o9KQYF)Lm^hzr$w&spGNah6g>EQBufQCN!y zI5WH$K#67$+ic{yKAsX@el=SbBcjRId*cs~xk~3BBpQsf%IsoPG)LGs zdK0_rwz7?L0XGC^2$dktLQ9qjwMsc1rpGx2Yt?zmYvUGnURx(1k!kmfPUC@2Pv;r9 z`-Heo+_sn+!QUJTAt;uS_z5SL-GWQc#pe0uA+^MCWH=d~s*h$XtlN)uCI4$KDm4L$ zIBA|m0o6@?%4HtAHRcDwmzd^(5|KwZ89#UKor)8zNI^EsrIk z1QLDBnNU1!PpE3iQg9^HI){x7QXQV{&D>2U%b_II>*2*HF2%>KZ>bxM)Jx4}|CCEa`186nD_B9h`mv6l45vRp*L+z_nx5i#9KvHi>rqxJIjKOeG(5lCeo zLC|-b(JL3YP1Ds=t;U!Y&Gln*Uwc0TnDSZCnh3m$N=xWMcs~&Rb?w}l51ubtz=QUZsWQhWOX;*AYb)o(^<$zU_v=cFwN~ZVrlSLx| zpr)Q7!_v*%U}!@PAnZLqOZ&EbviFbej-GwbeyaTq)HSBB+tLH=-nv1{MJ-rGW%uQ1 znDgP2bU@}!Gd=-;3`KlJYqB@U#Iq8Ynl%eE!9g;d*2|PbC{A}>mgAc8LK<69qcm)piu?`y~3K8zlZ1>~K_4T{%4zJG6H?6%{q3B-}iP_SGXELeSv*bvBq~^&C=3TsP z9{cff4KD2ZYzkArq=;H(Xd)1CAd%byUXZdBHcI*%a24Zj{Hm@XA}wj$=7~$Q*>&4} z2-V62ek{rKhPvvB711`qtAy+q{f1yWuFDcYt}hP)Vd>G?;VTb^P4 z(QDa?zvetCoB_)iGdmQ4VbG@QQ5Zt9a&t(D5Rf#|hC`LrONeUkbV)QF`ySE5x+t_v z-(cW{S13ye9>gtJm6w&>WwJynxJQm8U2My?#>+(|)JK}bEufIYSI5Y}T;vs?rzmLE zAIk%;^qbd@9WUMi*cGCr=oe1-nthYRQlhVHqf{ylD^0S09pI}qOQO=3&dBsD)BWo# z$NE2Ix&L&4|Aj{;ed*A?4z4S!7o_Kg^8@%#ZW26_F<>y4ghZ0b|3+unIoWDUVfen~ z`4`-cD7qxQSm9hF-;6WvCbu$t5r$LCOh}=`k1(W<&bG-xK{VXFl-cD%^Q*x-9eq;k8FzxAqZB zH@ja_3%O7XF~>owf3LSC_Yn!iO}|1Uc5uN{Wr-2lS=7&JlsYSp3IA%=E?H6JNf()z zh>jA>JVsH}VC>3Be>^UXk&3o&rK?eYHgLwE-qCHNJyzDLmg4G(uOFX5g1f(C{>W3u zn~j`zexZ=sawG8W+|SErqc?uEvQP(YT(YF;u%%6r00FP;yQeH)M9l+1Sv^yddvGo- z%>u>5SYyJ|#8_j&%h3#auTJ!4y@yEg<(wp#(~NH zXP7B#sv@cW{D4Iz1&H@5wW(F82?-JmcBt@Gw1}WK+>FRXnX(8vwSeUw{3i%HX6-pvQS-~Omm#x-udgp{=9#!>kDiLwqs_7fYy{H z)jx_^CY?5l9#fR$wukoI>4aETnU>n<$UY!JDlIvEti908)Cl2Ziyjjtv|P&&_8di> z<^amHu|WgwMBKHNZ)t)AHII#SqDIGTAd<(I0Q_LNPk*?UmK>C5=rIN^gs}@65VR*!J{W;wp5|&aF8605*l-Sj zQk+C#V<#;=Sl-)hzre6n0n{}|F=(#JF)X4I4MPhtm~qKeR8qM?a@h!-kKDyUaDrqO z1xstrCRCmDvdIFOQ7I4qesby8`-5Y>t_E1tUTVOPuNA1De9| z8{B0NBp*X2-ons_BNzb*Jk{cAJ(^F}skK~i;p0V(R7PKEV3bB;syZ4(hOw47M*-r8 z3qtuleeteUl$FHL$)LN|q8&e;QUN4(id`Br{rtsjpBdriO}WHLcr<;aqGyJP{&d6? zMKuMeLbc=2X0Q_qvSbl3r?F8A^oWw9Z{5@uQ`ySGm@DUZ=XJ^mKZ-ipJtmiXjcu<%z?Nj%-1QY*O{NfHd z=V}Y(UnK=f?xLb-_~H1b2T&0%O*2Z3bBDf06-nO*q%6uEaLs;=omaux7nqqW%tP$i zoF-PC%pxc(ymH{^MR_aV{@fN@0D1g&zv`1$Pyu3cvdR~(r*3Y%DJ@&EU?EserVEJ` zEprux{EfT+(Uq1m4F?S!TrZ+!AssSdX)fyhyPW6C`}ko~@y#7acRviE(4>moNe$HXzf zY@@fJa~o_r5nTeZ7ceiXI=k=ISkdp1gd1p)J;SlRn^5;rog!MlTr<<6-U9|oboRBN zlG~o*dR;%?9+2=g==&ZK;Cy0pyQFe)x!I!8g6;hGl`{{3q1_UzZy)J@c{lBIEJVZ& z!;q{8h*zI!kzY#RO8z3TNlN$}l;qj10=}du!tIKJs8O+?KMJDoZ+y)Iu`x`yJ@krO zwxETN$i!bz8{!>BKqHpPha{96eriM?mST)_9Aw-1X^7&;Bf=c^?17k)5&s08^E$m^ zRt02U_r!99xfiow-XC~Eo|Yt8t>32z=rv$Z;Ps|^26H73JS1Xle?;-nisDq$K5G3y znR|l8@rlvv^wj%tdgw+}@F#Ju{SkrQdqZ?5zh;}|IPIdhy3ivi0Q41C@4934naAaY z%+otS8%Muvrr{S-Y96G?b2j0ldu1&coOqsq^vfcUT3}#+=#;fii6@M+hDp}dr9A0Y zjbhvqmB03%4jhsZ{_KQfGh5HKm-=dFxN;3tnwBej^uzcVLrrs z>eFP-jb#~LE$qTP9JJ;#$nVOw%&;}y>ezA6&i8S^7YK#w&t4!A36Ub|or)MJT z^GGrzgcnQf6D+!rtfuX|Pna`Kq*ScO#H=de2B7%;t+Ij<>N5@(Psw%>nT4cW338WJ z>TNgQ^!285hS1JoHJcBk;3I8%#(jBmcpEkHkQDk%!4ygr;Q2a%0T==W zT#dDH>hxQx2E8+jE~jFY$FligkN&{vUZeIn*#I_Ca!l&;yf){eghi z>&?fXc-C$z8ab$IYS`7g!2#!3F@!)cUquAGR2oiR0~1pO<$3Y$B_@S2dFwu~B0e4D z6(WiE@O{(!vP<(t{p|S5#r$jl6h;3@+ygrPg|bBDjKgil!@Sq)5;rXNjv#2)N5_nn zuqEURL>(itBYrT&3mu-|q;soBd52?jMT75cvXYR!uFuVP`QMot+Yq?CO%D9$Jv24r zhq1Q5`FD$r9%&}9VlYcqNiw2#=3dZsho0cKKkv$%X&gmVuv&S__zyz@0zmZdZI59~s)1xFs~kZS0C^271hR*O z9nt$5=y0gjEI#S-iV0paHx!|MUNUq&$*zi>DGt<#?;y;Gms|dS{2#wF-S`G3$^$7g z1#@7C65g$=4Ij?|Oz?X4=zF=QfixmicIw{0oDL5N7iY}Q-vcVXdyQNMb>o_?3A?e6 z$4`S_=6ZUf&KbMgpn6Zt>6n~)zxI1>{HSge3uKBiN$01WB9OXscO?jd!)`?y5#%yp zJvgJU0h+|^MdA{!g@E=dJuyHPOh}i&alC+cY*I3rjB<~DgE{`p(FdHuXW;p$a+%5` zo{}x#Ex3{Sp-PPi)N8jGVo{K!$^;z%tVWm?b^oG8M?Djk)L)c{_-`@F|8LNu|BTUp zQY6QJVzVg8S{8{Pe&o}Ux=ITQ6d42;0l}OSEA&Oci$p?-BL187L6rJ>Q)aX0)Wf%T zneJF2;<-V%-VlcA?X03zpf;wI&8z9@Hy0BZm&ac-Gdtgo>}VkZYk##OOD+nVOKLFJ z5hgXAhkIzZtCU%2M#xl=D7EQPwh?^gZ_@0p$HLd*tF>qgA_P*dP;l^cWm&iQSPJZE zBoipodanrwD0}}{H#5o&PpQpCh61auqlckZq2_Eg__8;G-CwyH#h1r0iyD#Hd_$WgM89n+ldz;=b!@pvr4;x zs|YH}rQuCyZO!FWMy%lUyDE*0)(HR}QEYxIXFexCkq7SHmSUQ)2tZM2s`G<9dq;Vc ziNVj5hiDyqET?chgEA*YBzfzYh_RX#0MeD@xco%)ON%6B7E3#3iFBkPK^P_=&8$pf zpM<0>QmE~1FX1>mztm>JkRoosOq8cdJ1gF5?%*zMDak%qubN}SM!dW6fgH<*F>4M7 zX}%^g{>ng^2_xRNGi^a(epr8SPSP>@rg7s=0PO-#5*s}VOH~4GpK9<4;g=+zuJY!& ze_ld=ybcca?dUI-qyq2Mwl~-N%iCGL;LrE<#N}DRbGow7@5wMf&d`kT-m-@geUI&U z0NckZmgse~(#gx;tsChgNd|i1Cz$quL>qLzEO}ndg&Pg4f zy`?VSk9X5&Ab_TyKe=oiIiuNTWCsk6s9Ie2UYyg1y|i}B7h0k2X#YY0CZ;B7!dDg7 z_a#pK*I7#9-$#Iev5BpN@xMq@mx@TH@SoNWc5dv%^8!V}nADI&0K#xu_#y)k%P2m~ zqNqQ{(fj6X8JqMe5%;>MIkUDd#n@J9Dm~7_wC^z-Tcqqnsfz54jPJ1*+^;SjJzJhG zIq!F`Io}+fRD>h#wjL;g+w?Wg`%BZ{f()%Zj)sG8permeL0eQ9vzqcRLyZ?IplqMg zpQaxM11^`|6%3hUE9AiM5V)zWpPJ7nt*^FDga?ZP!U1v1aeYrV2Br|l`J^tgLm;~%gX^2l-L9L`B?UDHE9_+jaMxy|dzBY4 zjsR2rcZ6HbuyyXsDV(K0#%uPd#<^V%@9c7{6Qd_kQEZL&;z_Jf+eabr)NF%@Ulz_a1e(qWqJC$tTC! zwF&P-+~VN1Vt9OPf`H2N{6L@UF@=g+xCC_^^DZ`8jURfhR_yFD7#VFmklCR*&qk;A zzyw8IH~jFm+zGWHM5|EyBI>n3?2vq3W?aKt8bC+K1`YjklQx4*>$GezfU%E|>Or9Y zNRJ@s(>L{WBXdNiJiL|^In*1VA`xiE#D)%V+C;KuoQi{1t3~4*8 z;tbUGJ2@2@$XB?1!U;)MxQ}r67D&C49k{ceku^9NyFuSgc}DC2pD|+S=qLH&L}Vd4 zM=-UK4{?L?xzB@v;qCy}Ib65*jCWUh(FVc&rg|+KnopG`%cb>t;RNv=1%4= z#)@CB7i~$$JDM>q@4ll8{Ja5Rsq0 z$^|nRac)f7oZH^=-VdQldC~E_=5%JRZSm!z8TJocv`w<_e0>^teZ1en^x!yQse%Lf z;JA5?0vUIso|MS03y${dX19A&bU4wXS~*T7h+*4cgSIX11EB?XGiBS39hvWWuyP{!5AY^x5j{!c?z<}7f-kz27%b>llPq%Z7hq+CU|Ev2 z*jh(wt-^7oL`DQ~Zw+GMH}V*ndCc~ zr>WVQHJQ8ZqF^A7sH{N5~PbeDihT$;tUP`OwWn=j6@L+!=T|+ze%YQ zO+|c}I)o_F!T(^YLygYOTxz&PYDh9DDiv_|Ewm~i7|&Ck^$jsv_0n_}q-U5|_1>*L44)nt!W|;4q?n&k#;c4wpSx5atrznZbPc;uQI^I}4h5Fy`9J)l z7yYa7Rg~f@0oMHO;seQl|E@~fd|532lLG#e6n#vXrfdh~?NP){lZ z&3-33d;bUTEAG=!4_{YHd3%GCV=WS|2b)vZgX{JC)?rsljjzWw@Hflbwg3kIs^l%y zm3fVP-55Btz;<-p`X(ohmi@3qgdHmwXfu=gExL!S^ve^MsimP zNCBV>2>=BjLTobY^67f;8mXQ1YbM_NA3R^s z{zhY+5@9iYKMS-)S>zSCQuFl!Sd-f@v%;;*fW5hme#xAvh0QPtJ##}b>&tth$)6!$ z0S&b2OV-SE<|4Vh^8rs*jN;v9aC}S2EiPKo(G&<6C|%$JQ{;JEg-L|Yob*<-`z?AsI(~U(P>cC=1V$OETG$7i# zG#^QwW|HZuf3|X|&86lOm+M+BE>UJJSSAAijknNp*eyLUq=Au z7&aqR(x8h|>`&^n%p#TPcC@8@PG% zM&7k6IT*o-NK61P1XGeq0?{8kA`x;#O+|7`GTcbmyWgf^JvWU8Y?^7hpe^85_VuRq7yS~8uZ=Cf%W^OfwF_cbBhr`TMw^MH0<{3y zU=y;22&oVlrH55eGNvoklhfPM`bPX`|C_q#*etS^O@5PeLk(-DrK`l|P*@#T4(kRZ z`AY7^%&{!mqa5}q%<=x1e29}KZ63=O>89Q)yO4G@0USgbGhR#r~OvWI4+yu4*F8o`f?EG~x zBCEND=ImLu2b(FDF3sOk_|LPL!wrzx_G-?&^EUof1C~A{feam{2&eAf@2GWem7! z|LV-lff1Dk+mvTw@=*8~0@_Xu@?5u?-u*r8E7>_l1JRMpi{9sZqYG+#Ty4%Mo$`ds zsVROZH*QoCErDeU7&=&-ma>IUM|i_Egxp4M^|%^I7ecXzq@K8_oz!}cHK#>&+$E4rs2H8Fyc)@Bva?(KO%+oc!+3G0&Rv1cP)e9u_Y|dXr#!J;n%T4+9rTF>^m_4X3 z(g+$G6Zb@RW*J-IO;HtWHvopoVCr7zm4*h{rX!>cglE`j&;l_m(FTa?hUpgv%LNV9 zkSnUu1TXF3=tX)^}kDZk|AF%7FmLv6sh?XCORzhTU%d>y4cC;4W5mn=i6vLf2 ztbTQ8RM@1gn|y$*jZa8&u?yTOlNo{coXPgc%s;_Y!VJw2Z1bf%57p%kC1*5e{bepl zwm?2YGk~x=#69_Ul8A~(BB}>UP27=M)#aKrxWc-)rLL+97=>x|?}j)_5ewvoAY?P| z{ekQQbmjbGC%E$X*x-M=;Fx}oLHbzyu=Dw>&WtypMHnOc92LSDJ~PL7sU!}sZw`MY z&3jd_wS8>a!si2Y=ijCo(rMnAqq z-o2uzz}Fd5wD%MAMD*Y&=Ct?|B6!f0jfiJt;hvkIyO8me(u=fv_;C;O4X^vbO}R_% zo&Hx7C@EcZ!r%oy}|S-8CvPR?Ns0$j`FtMB;h z`#0Qq)+6Fxx;RCVnhwp`%>0H4hk(>Kd!(Y}>U+Tr_6Yp?W%jt_zdusOcA$pTA z(4l9$K=VXT2ITDs!OcShuUlG=R6#x@t74B2x7Dle%LGwsZrtiqtTuZGFUio_Xwpl} z=T7jdfT~ld#U${?)B67E*mP*E)XebDuMO(=3~Y=}Z}rm;*4f~7ka196QIHj;JK%DU z?AQw4I4ZufG}gmfVQ3w{snkpkgU~Xi;}V~S5j~;No^-9eZEYvA`Et=Q4(5@qcK=Pr zk9mo>v!%S>YD^GQc7t4c!C4*qU76b}r(hJhO*m-s9OcsktiXY#O1<OoH z#J^Y@1A;nRrrxNFh?3t@Hx9d>EZK*kMb-oe`2J!gZ;~I*QJ*f1p93>$lU|4qz!_zH z&mOaj#(^uiFf{*Nq?_4&9ZssrZeCgj1J$1VKn`j+bH%9#C5Q5Z@9LYX1mlm^+jkHf z+CgcdXlX5);Ztq6OT@;UK_zG(M5sv%I`d2(i1)>O`VD|d1_l(_aH(h>c7fP_$LA@d z6Wgm))NkU!v^YaRK_IjQy-_+>f_y(LeS@z+B$5be|FzXqqg}`{eYpO;sXLrU{*fJT zQHUEXoWk%wh%Kal`E~jiu@(Q@&d&dW*!~9;T=gA{{~NJwQvULf;s43Ku#A$NgaR^1 z%U3BNX`J^YE-#2dM*Ov*CzGdP9^`iI&`tmD~Bwqy4*N=DHt%RycykhF* zc7BcXG28Jvv(5G8@-?OATk6|l{Rg1 zwdU2Md1Qv?#$EO3E}zk&9>x1sQiD*sO0dGSUPkCN-gjuppdE*%*d*9tEWyQ%hRp*7 zT`N^=$PSaWD>f;h@$d2Ca7 z8bNsm14sdOS%FQhMn9yC83$ z-YATg3X!>lWbLUU7iNk-`O%W8MrgI03%}@6l$9+}1KJ1cTCiT3>^e}-cTP&aEJcUt zCTh_xG@Oa-v#t_UDKKfd#w0tJfA+Ash!0>X&`&;2%qv$!Gogr4*rfMcKfFl%@{ztA zwoAarl`DEU&W_DUcIq-{xaeRu(ktyQ64-uw?1S*A>7pRHH5_F)_yC+2o@+&APivkn zwxDBp%e=?P?3&tiVQb8pODI}tSU8cke~T#JLAxhyrZ(yx)>fUhig`c`%;#7Ot9le# zSaep4L&sRBd-n&>6=$R4#mU8>T>=pB)feU9;*@j2kyFHIvG`>hWYJ_yqv?Kk2XTw` z42;hd=hm4Iu0h{^M>-&c9zKPtqD>+c$~>k&Wvq#>%FjOyifO%RoFgh*XW$%Hz$y2-W!@W6+rFJja=pw-u_s0O3WMVgLb&CrCQ)8I^6g!iQj%a%#h z<~<0S#^NV4n!@tiKb!OZbkiSPp~31?f9Aj#fosfd*v}j6&7YpRGgQ5hI_eA2m+Je) zT2QkD;A@crBzA>7T zw4o1MZ_d$)puHvFA2J|`IwSXKZyI_iK_}FvkLDaFj^&6}e|5@mrHr^prr{fPVuN1+ z4=9}DkfKLYqUq7Q7@qa$)o6&2)kJx-3|go}k9HCI6ahL?NPA&khLUL}k_;mU&7GcN zNG6(xXW}(+a%IT80=-13-Q~sBo>$F2m`)7~wjW&XKndrz8soC*br=F*A_>Sh_Y}2Mt!#A1~2l?|hj) z9wpN&jISjW)?nl{@t`yuLviwvj)vyZQ4KR#mU-LE)mQ$yThO1oohRv;93oEXE8mYE zXPQSVCK~Lp3hIA_46A{8DdA+rguh@98p?VG2+Nw(4mu=W(sK<#S`IoS9nwuOM}C0) zH9U|6N=BXf!jJ#o;z#6vi=Y3NU5XT>ZNGe^z4u$i&x4ty^Sl;t_#`|^hmur~;r;o- z*CqJb?KWBoT`4`St5}10d*RL?!hm`GaFyxLMJPgbBvjVD??f7GU9*o?4!>NabqqR! z{BGK7%_}96G95B299eErE5_rkGmSWKP~590$HXvsRGJN5-%6d@=~Rs_68BLA1RkZb zD%ccBqGF0oGuZ?jbulkt!M}{S1;9gwAVkgdilT^_AS`w6?UH5Jd=wTUA-d$_O0DuM z|9E9XZFl$tZctd`Bq=OfI(cw4A)|t zl$W~3_RkP zFA6wSu+^efs79KH@)0~c3Dn1nSkNj_s)qBUGs6q?G0vjT&C5Y3ax-seA_+_}m`aj} zvW04)0TSIpqQkD@#NXZBg9z@GK1^ru*aKLrc4{J0PjhNfJT}J;vEeJ1ov?*KVNBy< zXtNIY3TqLZ=o1Byc^wL!1L6#i6n(088T9W<_iu~$S&VWGfmD|wNj?Q?Dnc#6iskoG zt^u26JqFnt=xjS-=|ACC%(=YQh{_alLW1tk;+tz1ujzeQ--lEu)W^Jk>UmHK(H303f}P2i zrsrQ*nEz`&{V!%2O446^8qLR~-Pl;2Y==NYj^B*j1vD}R5plk>%)GZSSjbi|tx>YM zVd@IS7b>&Uy%v==*35wGwIK4^iV{31mc)dS^LnN8j%#M}s%B@$=bPFI_ifcyPd4hilEWm71chIwfIR(-SeQaf20{;EF*(K(Eo+hu{}I zZkjXyF}{(x@Ql~*yig5lAq7%>-O5E++KSzEe(sqiqf1>{Em)pN`wf~WW1PntPpzKX zn;14G3FK7IQf!~n>Y=cd?=jhAw1+bwlVcY_kVuRyf!rSFNmR4fOc(g7(fR{ANvcO< zbG|cnYvKLa>dU(Z9YP796`Au?gz)Ys?w!af`F}1#W>x_O|k9Q z>#<6bKDt3Y}?KT2tmhU>H6Umn}J5M zarILVggiZs=kschc2TKib2`gl^9f|(37W93>80keUkrC3ok1q{;PO6HMbm{cZ^ROcT#tWWsQy?8qKWt<42BGryC(Dx>^ohIa0u7$^)V@Bn17^(VUgBD> zAr*Wl6UwQ&AAP%YZ;q2cZ;@2M(QeYFtW@PZ+mOO5gD1v-JzyE3^zceyE5H?WLW?$4 zhBP*+3i<09M$#XU;jwi7>}kW~v%9agMDM_V1$WlMV|U-Ldmr|<_nz*F_kcgrJnrViguEnJt{=Mk5f4Foin7(3vUXC>4gyJ>sK<;-p{h7 z2_mr&Fca!E^7R6VvodGznqJn3o)Ibd`gk>uKF7aemX*b~Sn#=NYl5j?v*T4FWZF2D zaX(M9hJ2YuEi%b~4?RkJwT*?aCRT@ecBkq$O!i}EJJEw`*++J_a>gsMo0CG^pZ3x+ zdfTSbCgRwtvAhL$p=iIf7%Vyb!j*UJsmOMler--IauWQ;(ddOk+U$WgN-RBle~v9v z9m2~@h|x*3t@m+4{U2}fKzRoVePrF-}U{`YT|vW?~64Bv*7|Dz03 zRYM^Yquhf*ZqkN?+NK4Ffm1;6BR0ZyW3MOFuV1ljP~V(=-tr^Tgu#7$`}nSd<8?cP z`VKtIz5$~InI0YnxAmn|pJZj+nPlI3zWsykXTKRnDCBm~Dy*m^^qTuY+8dSl@>&B8~0H$Y0Zc25APo|?R= z>_#h^kcfs#ae|iNe{BWA7K1mLuM%K!_V?fDyEqLkkT&<`SkEJ;E+Py^%hPVZ(%a2P4vL=vglF|X_`Z$^}q470V+7I4;UYdcZ7vU=41dd{d#KmI+|ZGa>C10g6w1a?wxAc&?iYsEv zuCwWvcw4FoG=Xrq=JNyPG*yIT@xbOeV`$s_kx`pH0DXPf0S7L?F208x4ET~j;yQ2c zhtq=S{T%82U7GxlUUKMf-NiuhHD$5*x{6}}_eZ8_kh}(}BxSPS9<(x2m$Rn0sx>)a zt$+qLRJU}0)5X>PXVxE?Jxpw(kD0W43ctKkj8DjpYq}lFZE98Je+v2t7uxuKV;p0l z5b9smYi5~k2%4aZe+~6HyobTQ@4_z#*lRHl# zSA`s~Jl@RGq=B3SNQF$+puBQv>DaQ--V!alvRSI~ZoOJx3VP4sbk!NdgMNBVbG&BX zdG*@)^g4#M#qoT`^NTR538vx~rdyOZcfzd7GBHl68-rG|fkofiGAXTJx~`~%a&boY zZ#M4sYwHIOnu-Mr!Ltpl8!NrX^p74tq{f_F4%M@&<=le;>xc5pAi&qn4P>04D$fp` z(OuJXQia--?vD0DIE6?HC|+DjH-?Cl|GqRKvs8PSe027_NH=}+8km9Ur8(JrVx@*x z0lHuHd=7*O+&AU_B;k{>hRvV}^Uxl^L1-c-2j4V^TG?2v66BRxd~&-GMfcvKhWgwu z60u{2)M{ZS)r*=&J4%z*rtqs2syPiOQq(`V0UZF)boPOql@E0U39>d>MP=BqFeJzz zh?HDKtY3%mR~reR7S2rsR0aDMA^a|L^_*8XM9KjabpYSBu z;zkfzU~12|X_W_*VNA=e^%Za14PMOC!z`5Xt|Fl$2bP9fz>(|&VJFZ9{z;;eEGhOl zl7OqqDJzvgZvaWc7Nr!5lfl*Qy7_-fy9%f(v#t#&2#9o-ba%J3(%s#C=@dagx*I{d zB&AzGT9EEiknWJU^naNdz7Logo%#OFV!eyCIQuzgpZDDN-1F}JJTdGXiLN85p|GT! zGOfNd8^RD;MsK*^3gatg2#W0J<8j)UCkUYoZRR|R*UibOm-G)S#|(`$hPA7UmH+fT ziZxTgeiR_yzvNS1s+T!xw)QgNSH(_?B@O?uTBwMj`G)2c^8%g8zu zxMu5SrQ^J+K91tkPrP%*nTpyZor#4`)}(T-Y8eLd(|sv8xcIoHnicKyAlQfm1YPyI z!$zimjMlEcmJu?M6z|RtdouAN1U5lKmEWY3gajkPuUHYRvTVeM05CE@`@VZ%dNoZN z>=Y3~f$~Gosud$AN{}!DwV<6CHm3TPU^qcR!_0$cY#S5a+GJU-2I2Dv;ktonSLRRH zALlc(lvX9rm-b5`09uNu904c}sU(hlJZMp@%nvkcgwkT;Kd7-=Z_z9rYH@8V6Assf zKpXju&hT<=x4+tCZ{elYtH+_F$V=tq@-`oC%vdO>0Wmu#w*&?_=LEWRJpW|spYc8V z=$)u#r}Pu7kvjSuM{FSyy9_&851CO^B zTm$`pF+lBWU!q>X#;AO1&=tOt=i!=9BVPC#kPJU}K$pO&8Ads)XOFr336_Iyn z$d{MTGYQLX9;@mdO;_%2Ayw3hv}_$UT00*e{hWxS?r=KT^ymEwBo429b5i}LFmSk` zo)-*bF1g;y@&o=34TW|6jCjUx{55EH&DZ?7wB_EmUg*B4zc6l7x-}qYLQR@^7o6rrgkoujRNym9O)K>wNfvY+uy+4Om{XgRHi#Hpg*bZ36_X%pP`m7FIF z?n?G*g&>kt$>J_PiXIDzgw3IupL3QZbysSzP&}?JQ-6TN-aEYbA$X>=(Zm}0{hm6J zJnqQnEFCZGmT06LAdJ^T#o`&)CA*eIYu?zzDJi#c$1H9zX}hdATSA|zX0Vb^q$mgg z&6kAJ=~gIARct>}4z&kzWWvaD9#1WK=P>A_aQxe#+4cpJtcRvd)TCu! z>eqrt)r(`qYw6JPKRXSU#;zYNB7a@MYoGuAT0Nzxr`>$=vk`uEq2t@k9?jYqg)MXl z67MA3^5_}Ig*mycsGeH0_VtK3bNo;8#0fFQ&qDAj=;lMU9%G)&HL>NO|lWU3z+m4t7 zfV*3gSuZ++rIWsinX@QaT>dsbD>Xp8%8c`HLamm~(i{7L&S0uZ;`W-tqU4XAgQclM$PxE76OH(PSjHjR$(nh({vsNnawhP!!HcP!l)5 zG;C=k0xL<^q+4rpbp{sGzcc~ZfGv9J*k~PPl}e~t$>WPSxzi0}05(D6d<=5+E}Y4e z@_QZtDcC7qh4#dQFYb6Pulf_8iAYYE z1SWJfNe5@auBbE5O=oeO@o*H5mS(pm%$!5yz-71~lEN5=x0eN|V`xAeP;eTje?eC= z53WneK;6n35{OaIH2Oh6Hx)kV-jL-wMzFlynGI8Wk_A<~_|06rKB#Pi_QY2XtIGW_ zYr)RECK_JRzR1tMd(pM(L=F98y~7wd4QBKAmFF(AF(e~+80$GLZpFc;a{kj1h}g4l z3SxIRlV=h%Pl1yRacl^g>9q%>U+`P(J`oh-w8i82mFCn|NJ5oX*^VKODX2>~HLUky z3D(ak0Sj=Kv^&8dUhU(3Ab!U5TIy97PKQ))&`Ml~hik%cHNspUpCn24cqH@dq6ZVo zO9xz!cEMm;NL;#z-tThlFF%=^ukE8S0;hDMR_`rv#eTYg7io1w9n_vJpK+6%=c#Y?wjAs_(#RQA0gr&Va2BQTq` zUc8)wHEDl&Uyo<>-PHksM;b-y(`E_t8Rez@Iw+eogcEI*FDg@Bc;;?3j3&kPsq(mx z+Yr_J#?G6D?t2G%O9o&e7Gbf&>#(-)|8)GIbG_a${TU26cVrIQSt=% zQ~XY-b1VQVc>IV=7um0^Li>dF z`zSm_o*i@ra4B+Tw5jdguVqx`O(f4?_USIMJzLvS$*kvBfEuToq-VR%K*%1VHu=++ zQ`=cG3cCnEv{ZbP-h9qbkF}%qT$j|Z7ZB2?s7nK@gM{bAD=eoDKCCMlm4LG~yre!- zzPP#Rn9ZDUgb4++M78-V&VX<1ah(DN z(4O5b`Fif%*k?L|t%!WY`W$C_C`tzC`tI7XC`->oJs_Ezs=K*O_{*#SgNcvYdmBbG zHd8!UTzGApZC}n7LUp1fe0L<3|B5GdLbxX@{ETeUB2vymJgWP0q2E<&!Dtg4>v`aa zw(QcLoA&eK{6?Rb&6P0kY+YszBLXK49i~F!jr)7|xcnA*mOe1aZgkdmt4{Nq2!!SL z`aD{6M>c00muqJt4$P+RAj*cV^vn99UtJ*s${&agQ;C>;SEM|l%KoH_^kAcmX=%)* zHpByMU_F12iGE#68rHGAHO_ReJ#<2ijo|T7`{PSG)V-bKw}mpTJwtCl%cq2zxB__m zM_p2k8pDmwA*$v@cmm>I)TW|7a7ng*X7afyR1dcuVGl|BQzy$MM+zD{d~n#)9?1qW zdk(th4Ljb-vpv5VUt&9iuQBnQ$JicZ)+HoL`&)B^Jr9F1wvf=*1and~v}3u{+7u7F zf0U`l4Qx-ANfaB3bD1uIeT^zeXerps8nIW(tmIxYSL;5~!&&ZOLVug2j4t7G=zzK+ zmPy5<4h%vq$Fw)i1)ya{D;GyEm3fybsc8$=$`y^bRdmO{XU#95EZ$I$bBg)FW#=}s z@@&c?xwLF3|C7$%>}T7xl0toBc6N^C{!>a8vWc=G!bAFKmn{AKS6RxOWIJBZXP&0CyXAiHd?7R#S46K6UXYXl#c_#APL5SfW<<-|rcfX&B6e*isa|L^RK=0}D`4q-T0VAs0 zToyrF6`_k$UFGAGhY^&gg)(Fq0p%J{h?E)WQ(h@Gy=f6oxUSAuT4ir}jI)36|NnmnI|vtij;t!jT?6Jf-E19}9Lf9(+N+ z)+0)I5mST_?3diP*n2=ZONTYdXkjKsZ%E$jjU@0w_lL+UHJOz|K{{Uh%Zy0dhiqyh zofWXzgRyFzY>zpMC8-L^43>u#+-zlaTMOS(uS!p{Jw#u3_9s)(s)L6j-+`M5sq?f+ zIIcjq$}~j9b`0_hIz~?4?b(Sqdpi(;1=8~wkIABU+APWQdf5v@g=1c{c{d*J(X5+cfEdG?qxq z{GKkF;)8^H&Xdi~fb~hwtJRsfg#tdExEuDRY^x9l6=E+|fxczIW4Z29NS~-oLa$Iq z93;5$(M0N8ba%8&q>vFc=1}a8T?P~_nrL5tYe~X>G=3QoFlBae8vVt-K!^@vusN<8gQJ!WD7H%{*YgY0#(tXxXy##C@o^U7ysxe zLmUWN@4)JBjjZ3G-_)mrA`|NPCc8Oe!%Ios4$HWpBmJse7q?)@Xk%$x&lIY>vX$7L zpfNWlXxy2p7TqW`Wq22}Q3OC2OWTP_X(*#kRx1WPe%}$C!Qn^FvdYmvqgk>^nyk;6 zXv*S#P~NVx1n6pdbXuX9x_}h1SY#3ZyvLZ&VnWVva4)9D|i7kjGY{>am&^ z-_x1UYM1RU#z17=AruK~{BK$A65Sajj_OW|cpYQBGWO*xfGJXSn4E&VMWchq%>0yP z{M2q=zx!VnO71gb8}Al2i+uxb=ffIyx@oso@8Jb88ld6M#wgXd=WcX$q$91o(94Ek zjeBqQ+CZ64hI>sZ@#tjdL}JeJu?GS7N^s$WCIzO`cvj60*d&#&-BQ>+qK#7l+!u1t zBuyL-Cqups?2>)ek2Z|QnAqs_`u1#y8=~Hvsn^2Jtx-O`limc*w;byk^2D-!*zqRi zVcX+4lzwcCgb+(lROWJ~qi;q2!t6;?%qjGcIza=C6{T7q6_?A@qrK#+)+?drrs3U}4Fov+Y}`>M z#40OUPpwpaC-8&q8yW0XWGw`RcSpBX+7hZ@xarfCNnrl-{k@`@Vv> zYWB*T=4hLJ1SObSF_)2AaX*g(#(88~bVG9w)ZE91eIQWflNecYC zzUt}ov<&)S&i$}?LlbIi9i&-g=UUgjWTq*v$!0$;8u&hwL*S^V!GPSpM3PR3Ra5*d z7d77UC4M{#587NcZS4+JN=m#i)7T0`jWQ{HK3rIIlr3cDFt4odV25yu9H1!}BVW-& zrqM5DjDzbd^pE^Q<-$1^_tX)dX8;97ILK{ z!{kF{!h`(`6__+1UD5=8sS&#!R>*KqN9_?(Z$4cY#B)pG8>2pZqI;RiYW6aUt7kk*s^D~Rml_fg$m+4+O5?J&p1)wE zp5L-X(6og1s(?d7X#l-RWO+5Jj(pAS{nz1abM^O;8hb^X4pC7ADpzUlS{F~RUoZp^ zuJCU_fq}V!9;knx^uYD2S9E`RnEsyF^ZO$;`8uWNI%hZzKq=t`q12cKEvQjJ9dww9 zCerpM3n@Ag+XZJztlqHRs!9X(Dv&P;_}zz$N&xwA@~Kfnd3}YiABK*T)Ar2E?OG6V z<;mFs`D?U7>Rradv7(?3oCZZS_0Xr#3NNkpM1@qn-X$;aNLYL;yIMX4uubh^Xb?HloImt$=^s8vm)3g!{H1D|k zmbg_Rr-ypQokGREIcG<8u(=W^+oxelI&t0U`dT=bBMe1fl+9!l&vEPFFu~yAu!XIv4@S{;| z8?%<1@hJp%7AfZPYRARF1hf`cq_VFQ-y74;EdMob{z&qec2hiQJOQa>f-?Iz^VXOr z-wnfu*uT$(5WmLsGsVkHULPBvTRy0H(}S0SQ18W0kp_U}8Phc3gz!Hj#*VYh$AiDE245!YA0M$Q@rM zT;}1DQ}MxV<)*j{hknSHyihgMPCK=H)b-iz9N~KT%<&Qmjf39L@&7b;;>9nQkDax- zk%7ZMA%o41l#(G5K=k{D{80E@P|I;aufYpOlIJXv!dS+T^plIVpPeZ)Gp`vo+?BWt z8U8u=C51u%>yDCWt>`VGkE5~2dD4y_8+n_+I9mFN(4jHJ&x!+l*>%}b4Z>z#(tb~< z+<+X~GIi`sDb=SI-7m>*krlqE3aQD?D5WiYX;#8m|ENYKw}H^95u!=n=xr3jxhCB&InJ7>zgLJg;i?Sjjd`YW!2; z%+y=LwB+MMnSGF@iu#I%!mvt)aXzQ*NW$cHNHwjoaLtqKCHqB}LW^ozBX?`D4&h%# zeMZ3ZumBn}5y9&odo3=hN$Q&SRte*^-SNZg2<}6>OzRpF91oy0{RuZU(Q0I zvx%|9>;)-Ca9#L)HQt~axu0q{745Ac;s1XQKV ze3D9I5gV5SP-J>&3U!lg1`HN>n5B6XxYpwhL^t0Z)4$`YK93vTd^7BD%<)cIm|4e!;*%9}B-3NX+J*Nr@;5(27Zmf(TmfHsej^Bz+J1 zXKIjJ)H{thL4WOuro|6&aPw=-JW8G=2 z|L4YL)^rYf7J7DOKXpTX$4$Y{-2B!jT4y^w8yh3LKRKO3-4DOshFk}N^^Q{r(0K0+ z?7w}x>(s{Diq6K)8sy)>%*g&{u>)l+-Lg~=gteW?pE`B@FE`N!F-+aE;XhjF+2|RV z8vV2((yeA-VDO;3=^E;fhW~b=Wd5r8otQrO{Vu)M1{j(+?+^q%xpYCojc6rmQ<&ytZ2ly?bw*X)WB8(n^B4Gmxr^1bQ&=m;I4O$g{ z3m|M{tmkOyAPnMHu(Z}Q1X1GM|A+)VDP3Fz934zSl)z>N|D^`G-+>Mej|VcK+?iew zQ3=DH4zz;i>z{Yv_l@j*?{936kxM{c7eK$1cf8wxL>>O#`+vsu*KR)te$adfTD*w( zAStXnZk<6N3V-Vs#GB%vXZat+(EFWbkbky#{yGY`rOvN)?{5qUuFv=r=dyYZrULf%MppWuNRUWc z8|YaIn}P0DGkwSZ(njAO$Zhr3Yw`3O1A+&F*2UjO{0`P%kK(qL;kEkfjRC=lxPRjL z{{4PO3-*5RZ_B3LUB&?ZpJ4nk1E4L&eT~HX0Jo(|uGQCW3utB@p)rF@W*n$==TlS zKiTfzhrLbAeRqru%D;fUwXOUcHud{pw@Ib1xxQ}<2)?KC&%y5PVef<7rcu2l!8dsy z?lvdaHJ#s$0m18y{x#fB$o=l)-sV?Qya5GWf#8Vd{~Grn@qgX#!EI`Y>++l%1A;eL z{_7t6jMeEr@a+oxyCL^+_}9Qc;i0&Xd%LXp?to*R|26LKHG(m0)*QF4*h;5%YG5<9)c> z1vq!7bIJSv1^27i-mcH!zX>ep3Iw0^{nx<1jOy)N_UoFD8v}x~2mEWapI3m~kMQkR z#&@4FuEGBn`mgtSx6jeY7vUQNf=^}sTZErIEpH!cy|@7Z zU4h_Oxxd2s=f{}$XXy4}%JqTSjRC \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG="`dirname "$PRG"`/$link" - fi - done - - saveddir=`pwd` - - M2_HOME=`dirname "$PRG"`/.. - - # make it fully qualified - M2_HOME=`cd "$M2_HOME" && pwd` - - cd "$saveddir" - # echo Using m2 at $M2_HOME -fi - -# For Cygwin, ensure paths are in UNIX format before anything is touched -if $cygwin ; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --unix "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --unix "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --unix "$CLASSPATH"` -fi - -# For Mingw, ensure paths are in UNIX format before anything is touched -if $mingw ; then - [ -n "$M2_HOME" ] && - M2_HOME="`(cd "$M2_HOME"; pwd)`" - [ -n "$JAVA_HOME" ] && - JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" - # TODO classpath? -fi - -if [ -z "$JAVA_HOME" ]; then - javaExecutable="`which javac`" - if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then - # readlink(1) is not available as standard on Solaris 10. - readLink=`which readlink` - if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then - if $darwin ; then - javaHome="`dirname \"$javaExecutable\"`" - javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" - else - javaExecutable="`readlink -f \"$javaExecutable\"`" - fi - javaHome="`dirname \"$javaExecutable\"`" - javaHome=`expr "$javaHome" : '\(.*\)/bin'` - JAVA_HOME="$javaHome" - export JAVA_HOME - fi - fi -fi - -if [ -z "$JAVACMD" ] ; then - if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - else - JAVACMD="`which java`" - fi -fi - -if [ ! -x "$JAVACMD" ] ; then - echo "Error: JAVA_HOME is not defined correctly." >&2 - echo " We cannot execute $JAVACMD" >&2 - exit 1 -fi - -if [ -z "$JAVA_HOME" ] ; then - echo "Warning: JAVA_HOME environment variable is not set." -fi - -CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher - -# traverses directory structure from process work directory to filesystem root -# first directory with .mvn subdirectory is considered project base directory -find_maven_basedir() { - - if [ -z "$1" ] - then - echo "Path not specified to find_maven_basedir" - return 1 - fi - - basedir="$1" - wdir="$1" - while [ "$wdir" != '/' ] ; do - if [ -d "$wdir"/.mvn ] ; then - basedir=$wdir - break - fi - # workaround for JBEAP-8937 (on Solaris 10/Sparc) - if [ -d "${wdir}" ]; then - wdir=`cd "$wdir/.."; pwd` - fi - # end of workaround - done - echo "${basedir}" -} - -# concatenates all lines of a file -concat_lines() { - if [ -f "$1" ]; then - echo "$(tr -s '\n' ' ' < "$1")" - fi -} - -BASE_DIR=`find_maven_basedir "$(pwd)"` -if [ -z "$BASE_DIR" ]; then - exit 1; -fi - -########################################################################################## -# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central -# This allows using the maven wrapper in projects that prohibit checking in binary data. -########################################################################################## -if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found .mvn/wrapper/maven-wrapper.jar" - fi -else - if [ "$MVNW_VERBOSE" = true ]; then - echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." - fi - jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar" - while IFS="=" read key value; do - case "$key" in (wrapperUrl) jarUrl="$value"; break ;; - esac - done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" - if [ "$MVNW_VERBOSE" = true ]; then - echo "Downloading from: $jarUrl" - fi - wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" - - if command -v wget > /dev/null; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found wget ... using wget" - fi - wget "$jarUrl" -O "$wrapperJarPath" - elif command -v curl > /dev/null; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found curl ... using curl" - fi - curl -o "$wrapperJarPath" "$jarUrl" - else - if [ "$MVNW_VERBOSE" = true ]; then - echo "Falling back to using Java to download" - fi - javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" - if [ -e "$javaClass" ]; then - if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then - if [ "$MVNW_VERBOSE" = true ]; then - echo " - Compiling MavenWrapperDownloader.java ..." - fi - # Compiling the Java class - ("$JAVA_HOME/bin/javac" "$javaClass") - fi - if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then - # Running the downloader - if [ "$MVNW_VERBOSE" = true ]; then - echo " - Running MavenWrapperDownloader.java ..." - fi - ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") - fi - fi - fi -fi -########################################################################################## -# End of extension -########################################################################################## - -export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} -if [ "$MVNW_VERBOSE" = true ]; then - echo $MAVEN_PROJECTBASEDIR -fi -MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" - -# For Cygwin, switch paths to Windows format before running java -if $cygwin; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --path --windows "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --windows "$CLASSPATH"` - [ -n "$MAVEN_PROJECTBASEDIR" ] && - MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` -fi - -WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -exec "$JAVACMD" \ - $MAVEN_OPTS \ - -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ - "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ - ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/jhipster-5/bookstore-monolith/mvnw.cmd b/jhipster-5/bookstore-monolith/mvnw.cmd deleted file mode 100644 index e5cfb0ae9eab..000000000000 --- a/jhipster-5/bookstore-monolith/mvnw.cmd +++ /dev/null @@ -1,161 +0,0 @@ -@REM ---------------------------------------------------------------------------- -@REM Licensed to the Apache Software Foundation (ASF) under one -@REM or more contributor license agreements. See the NOTICE file -@REM distributed with this work for additional information -@REM regarding copyright ownership. The ASF licenses this file -@REM to you under the Apache License, Version 2.0 (the -@REM "License"); you may not use this file except in compliance -@REM with the License. You may obtain a copy of the License at -@REM -@REM http://www.apache.org/licenses/LICENSE-2.0 -@REM -@REM Unless required by applicable law or agreed to in writing, -@REM software distributed under the License is distributed on an -@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -@REM KIND, either express or implied. See the License for the -@REM specific language governing permissions and limitations -@REM under the License. -@REM ---------------------------------------------------------------------------- - -@REM ---------------------------------------------------------------------------- -@REM Maven2 Start Up Batch script -@REM -@REM Required ENV vars: -@REM JAVA_HOME - location of a JDK home dir -@REM -@REM Optional ENV vars -@REM M2_HOME - location of maven2's installed home dir -@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands -@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending -@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven -@REM e.g. to debug Maven itself, use -@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files -@REM ---------------------------------------------------------------------------- - -@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' -@echo off -@REM set title of command window -title %0 -@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on' -@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% - -@REM set %HOME% to equivalent of $HOME -if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") - -@REM Execute a user defined script before this one -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre -@REM check for pre script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" -if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" -:skipRcPre - -@setlocal - -set ERROR_CODE=0 - -@REM To isolate internal variables from possible post scripts, we use another setlocal -@setlocal - -@REM ==== START VALIDATION ==== -if not "%JAVA_HOME%" == "" goto OkJHome - -echo. -echo Error: JAVA_HOME not found in your environment. >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -:OkJHome -if exist "%JAVA_HOME%\bin\java.exe" goto init - -echo. -echo Error: JAVA_HOME is set to an invalid directory. >&2 -echo JAVA_HOME = "%JAVA_HOME%" >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -@REM ==== END VALIDATION ==== - -:init - -@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". -@REM Fallback to current working directory if not found. - -set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% -IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir - -set EXEC_DIR=%CD% -set WDIR=%EXEC_DIR% -:findBaseDir -IF EXIST "%WDIR%"\.mvn goto baseDirFound -cd .. -IF "%WDIR%"=="%CD%" goto baseDirNotFound -set WDIR=%CD% -goto findBaseDir - -:baseDirFound -set MAVEN_PROJECTBASEDIR=%WDIR% -cd "%EXEC_DIR%" -goto endDetectBaseDir - -:baseDirNotFound -set MAVEN_PROJECTBASEDIR=%EXEC_DIR% -cd "%EXEC_DIR%" - -:endDetectBaseDir - -IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig - -@setlocal EnableExtensions EnableDelayedExpansion -for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a -@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% - -:endReadAdditionalConfig - -SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" -set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" -set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar" -FOR /F "tokens=1,2 delims==" %%A IN (%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties) DO ( - IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B -) - -@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central -@REM This allows using the maven wrapper in projects that prohibit checking in binary data. -if exist %WRAPPER_JAR% ( - echo Found %WRAPPER_JAR% -) else ( - echo Couldn't find %WRAPPER_JAR%, downloading it ... - echo Downloading from: %DOWNLOAD_URL% - powershell -Command "(New-Object Net.WebClient).DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')" - echo Finished downloading %WRAPPER_JAR% -) -@REM End of extension - -%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* -if ERRORLEVEL 1 goto error -goto end - -:error -set ERROR_CODE=1 - -:end -@endlocal & set ERROR_CODE=%ERROR_CODE% - -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost -@REM check for post script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" -if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" -:skipRcPost - -@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' -if "%MAVEN_BATCH_PAUSE%" == "on" pause - -if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% - -exit /B %ERROR_CODE% diff --git a/jhipster-5/bookstore-monolith/package.json b/jhipster-5/bookstore-monolith/package.json deleted file mode 100644 index 46b920edb3cf..000000000000 --- a/jhipster-5/bookstore-monolith/package.json +++ /dev/null @@ -1,128 +0,0 @@ -{ - "name": "bookstore", - "version": "0.0.0", - "description": "Description for Bookstore", - "private": true, - "license": "UNLICENSED", - "cacheDirectories": [ - "node_modules" - ], - "dependencies": { - "@angular/common": "7.2.4", - "@angular/compiler": "7.2.4", - "@angular/core": "7.2.4", - "@angular/forms": "7.2.4", - "@angular/platform-browser": "7.2.4", - "@angular/platform-browser-dynamic": "7.2.4", - "@angular/router": "7.2.4", - "@fortawesome/angular-fontawesome": "0.3.0", - "@fortawesome/fontawesome-svg-core": "1.2.14", - "@fortawesome/free-solid-svg-icons": "5.7.1", - "@ng-bootstrap/ng-bootstrap": "4.0.2", - "@ngx-translate/core": "11.0.1", - "@ngx-translate/http-loader": "4.0.0", - "bootstrap": "4.2.1", - "core-js": "2.6.4", - "moment": "2.24.0", - "ng-jhipster": "0.9.1", - "ngx-cookie": "2.0.1", - "ngx-infinite-scroll": "7.0.1", - "ngx-webstorage": "2.0.1", - "rxjs": "6.4.0", - "swagger-ui": "2.2.10", - "tslib": "1.9.3", - "zone.js": "0.8.29" - }, - "devDependencies": { - "@angular/cli": "7.3.1", - "@angular/compiler-cli": "7.2.4", - "@ngtools/webpack": "7.3.1", - "@types/jest": "24.0.0", - "@types/node": "10.12.24", - "angular-router-loader": "0.8.5", - "angular2-template-loader": "0.6.2", - "autoprefixer": "9.4.7", - "browser-sync": "2.26.3", - "browser-sync-webpack-plugin": "2.2.2", - "cache-loader": "2.0.1", - "codelyzer": "4.5.0", - "copy-webpack-plugin": "4.6.0", - "css-loader": "2.1.0", - "file-loader": "3.0.1", - "fork-ts-checker-webpack-plugin": "0.5.2", - "friendly-errors-webpack-plugin": "1.7.0", - "generator-jhipster": "5.8.2", - "html-loader": "0.5.5", - "html-webpack-plugin": "3.2.0", - "husky": "1.3.1", - "jest": "24.1.0", - "jest-junit": "6.2.1", - "jest-preset-angular": "6.0.2", - "jest-sonar-reporter": "2.0.0", - "lint-staged": "8.1.3", - "mini-css-extract-plugin": "0.5.0", - "moment-locales-webpack-plugin": "1.0.7", - "optimize-css-assets-webpack-plugin": "5.0.1", - "prettier": "1.16.4", - "reflect-metadata": "0.1.13", - "rimraf": "2.6.3", - "simple-progress-webpack-plugin": "1.1.2", - "style-loader": "0.23.1", - "terser-webpack-plugin": "1.2.2", - "thread-loader": "2.1.2", - "to-string-loader": "1.1.5", - "ts-loader": "5.3.3", - "tslint": "5.12.1", - "tslint-config-prettier": "1.18.0", - "tslint-loader": "3.6.0", - "typescript": "3.2.4", - "sass": "1.17.0", - "sass-loader": "7.1.0", - "postcss-loader": "3.0.0", - "xml2js": "0.4.19", - "webpack": "4.29.3", - "webpack-cli": "3.2.3", - "webpack-dev-server": "3.1.14", - "webpack-merge": "4.2.1", - "webpack-notifier": "1.7.0", - "webpack-visualizer-plugin": "0.1.11", - "workbox-webpack-plugin": "3.6.3", - "write-file-webpack-plugin": "4.5.0" - }, - "engines": { - "node": ">=8.9.0" - }, - "lint-staged": { - "{,src/**/}*.{md,json,ts,css,scss}": [ - "prettier --write", - "git add" - ] - }, - "scripts": { - "prettier:format": "prettier --write \"{,src/**/}*.{md,json,ts,css,scss}\"", - "lint": "tslint --project tsconfig.json -e 'node_modules/**'", - "lint:fix": "npm run lint -- --fix", - "ngc": "ngc -p tsconfig-aot.json", - "cleanup": "rimraf target/{aot,www}", - "clean-www": "rimraf target//www/app/{src,target/}", - "start": "npm run webpack:dev", - "start-tls": "npm run webpack:dev -- --env.tls", - "serve": "npm run start", - "build": "npm run webpack:prod", - "test": "npm run lint && jest --coverage --logHeapUsage -w=2 --config src/test/javascript/jest.conf.js", - "test:watch": "npm run test -- --watch", - "webpack:dev": "npm run webpack-dev-server -- --config webpack/webpack.dev.js --inline --hot --port=9060 --watch-content-base --env.stats=minimal", - "webpack:dev-verbose": "npm run webpack-dev-server -- --config webpack/webpack.dev.js --inline --hot --port=9060 --watch-content-base --profile --progress --env.stats=normal", - "webpack:build:main": "npm run webpack -- --config webpack/webpack.dev.js --env.stats=minimal", - "webpack:build": "npm run cleanup && npm run webpack:build:main", - "webpack:prod:main": "npm run webpack -- --config webpack/webpack.prod.js --profile", - "webpack:prod": "npm run cleanup && npm run webpack:prod:main && npm run clean-www", - "webpack:test": "npm run test", - "webpack-dev-server": "node --max_old_space_size=4096 node_modules/webpack-dev-server/bin/webpack-dev-server.js", - "webpack": "node --max_old_space_size=4096 node_modules/webpack/bin/webpack.js" - }, - "jestSonar": { - "reportPath": "target/test-results/jest", - "reportFile": "TESTS-results-sonar.xml" - } -} diff --git a/jhipster-5/bookstore-monolith/pom.xml b/jhipster-5/bookstore-monolith/pom.xml deleted file mode 100644 index ccaa802a3973..000000000000 --- a/jhipster-5/bookstore-monolith/pom.xml +++ /dev/null @@ -1,1233 +0,0 @@ - - - 4.0.0 - - com.baeldung.jhipster5 - bookstore-monolith - 0.0.1-SNAPSHOT - war - bookstore-monolith - - - jhipster-5 - com.baeldung.jhipster - 1.0.0-SNAPSHOT - - - - - - - - - - - - - - - - io.github.jhipster - jhipster-dependencies - ${jhipster-dependencies.version} - pom - import - - - - - - - - io.github.jhipster - jhipster-framework - - - - com.fasterxml.jackson.datatype - jackson-datatype-hibernate5 - - - com.fasterxml.jackson.datatype - jackson-datatype-hppc - - - com.fasterxml.jackson.datatype - jackson-datatype-jsr310 - - - com.fasterxml.jackson.module - jackson-module-afterburner - - - com.h2database - h2 - test - - - com.jayway.jsonpath - json-path - test - - - - io.springfox - springfox-swagger2 - - - io.springfox - springfox-bean-validators - - - com.mattbertolini - liquibase-slf4j - - - com.zaxxer - HikariCP - - - commons-io - commons-io - - - org.apache.commons - commons-lang3 - - - org.assertj - assertj-core - test - - - org.hibernate - hibernate-jpamodelgen - provided - - - org.hibernate - hibernate-envers - - - org.hibernate.validator - hibernate-validator - - - org.liquibase - liquibase-core - - - net.logstash.logback - logstash-logback-encoder - - - org.mapstruct - mapstruct-jdk8 - - - org.mapstruct - mapstruct-processor - provided - - - org.springframework.boot - spring-boot-configuration-processor - provided - - - org.springframework.boot - spring-boot-loader-tools - - - org.springframework.boot - spring-boot-starter-actuator - - - org.springframework.boot - spring-boot-starter-aop - - - org.springframework.boot - spring-boot-starter-data-jpa - - - org.springframework.boot - spring-boot-starter-logging - - - org.springframework.boot - spring-boot-starter-mail - - - org.springframework.boot - spring-boot-starter-security - - - org.springframework.boot - spring-boot-starter-thymeleaf - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-test - test - - - org.springframework.boot - spring-boot-test - test - - - org.springframework.security - spring-security-test - test - - - org.zalando - problem-spring-web - - - io.jsonwebtoken - jjwt-api - - - io.jsonwebtoken - jjwt-impl - runtime - - - io.jsonwebtoken - jjwt-jackson - runtime - - - - org.springframework.boot - spring-boot-starter-cloud-connectors - - - - org.springframework.security - spring-security-data - - - io.micrometer - micrometer-registry-prometheus - - - io.dropwizard.metrics - metrics-core - - - net.bytebuddy - byte-buddy - ${byte-buddy.version} - test - - - - - - spring-boot:run - - - org.codehaus.mojo - properties-maven-plugin - 1.0.0 - - - - set-system-properties - - - - - org.slf4j.simpleLogger.log.com.github.eirslett - error - - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - - - - org.mapstruct - mapstruct-processor - ${mapstruct.version} - - - - org.hibernate - hibernate-jpamodelgen - ${hibernate.version} - - - - - - - org.apache.maven.plugins - maven-eclipse-plugin - - - org.apache.maven.plugins - maven-enforcer-plugin - - - org.apache.maven.plugins - maven-idea-plugin - - - org.apache.maven.plugins - maven-resources-plugin - - - org.apache.maven.plugins - maven-surefire-plugin - - - org.jacoco - jacoco-maven-plugin - - - org.sonarsource.scanner.maven - sonar-maven-plugin - - - org.liquibase - liquibase-maven-plugin - - - org.springframework.boot - spring-boot-maven-plugin - - - - repackage - - - - - ${start-class} - true - true - - - - - com.google.cloud.tools - jib-maven-plugin - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - ${maven-compiler-plugin.version} - - - com.github.eirslett - frontend-maven-plugin - ${frontend-maven-plugin.version} - - - pl.project13.maven - git-commit-id-plugin - ${git-commit-id-plugin.version} - - - - revision - - - - - false - true - - ^git.commit.id.abbrev$ - ^git.commit.id.describe$ - ^git.branch$ - - - - - org.jacoco - jacoco-maven-plugin - ${jacoco-maven-plugin.version} - - - pre-unit-tests - - prepare-agent - - - - ${project.testresult.directory}/coverage/jacoco/jacoco.exec - - - - - post-unit-test - test - - report - - - ${project.testresult.directory}/coverage/jacoco/jacoco.exec - ${project.testresult.directory}/coverage/jacoco - - - - - - com.google.cloud.tools - jib-maven-plugin - ${jib-maven-plugin.version} - - - openjdk:8-jre-alpine - - - bookstore:latest - - - - sh - - chmod +x /entrypoint.sh && sync && /entrypoint.sh - - - 8080 - - - ALWAYS - 0 - - true - - - - - org.liquibase - liquibase-maven-plugin - ${liquibase.version} - - ${project.basedir}/src/main/resources/config/liquibase/master.xml - ${project.basedir}/src/main/resources/config/liquibase/changelog/${maven.build.timestamp}_changelog.xml - - - - Bookstore - - hibernate:spring:com.baeldung.jhipster5.domain?dialect=&hibernate.physical_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy&hibernate.implicit_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy - true - debug - - - - org.javassist - javassist - ${javassist.version} - - - org.liquibase.ext - liquibase-hibernate5 - ${liquibase-hibernate5.version} - - - org.springframework.boot - spring-boot-starter-data-jpa - ${spring-boot.version} - - - javax.validation - validation-api - ${validation-api.version} - - - - - maven-clean-plugin - ${maven-clean-plugin.version} - - - org.apache.maven.plugins - maven-eclipse-plugin - ${maven-eclipse-plugin.version} - - true - true - - - - org.apache.maven.plugins - maven-enforcer-plugin - ${maven-enforcer-plugin.version} - - - enforce-versions - - enforce - - - - - - - You are running an older version of Maven. JHipster requires at least Maven ${maven.version} - [${maven.version},) - - - - You are running an incompatible version of Java. JHipster requires JDK ${java.version} - [1.8,1.9) - - - - - - org.apache.maven.plugins - maven-idea-plugin - ${maven-idea-plugin.version} - - node_modules - - - - org.apache.maven.plugins - maven-resources-plugin - ${maven-resources-plugin.version} - - - default-resources - validate - - copy-resources - - - ${project.build.directory}/classes - false - - # - - - - src/main/resources/ - true - - config/*.yml - - - - src/main/resources/ - false - - config/*.yml - - - - - - - jib-www-resources - verify - - copy-resources - - - ${project.build.directory}/classes/static/ - - - ${project.build.directory}/www - false - - - - - - - - org.apache.maven.plugins - maven-surefire-plugin - ${maven-surefire-plugin.version} - - - alphabetical - - - false - ${sonar.junit.reportsPath} - - - - org.apache.maven.plugins - maven-war-plugin - ${maven-war-plugin.version} - - - net.alchim31.maven - scala-maven-plugin - ${scala-maven-plugin.version} - - - compile - compile - - add-source - compile - - - - test-compile - test-compile - - add-source - testCompile - - - - - incremental - true - ${scala.version} - - - - org.sonarsource.scanner.maven - sonar-maven-plugin - ${sonar-maven-plugin.version} - - - org.springframework.boot - spring-boot-maven-plugin - ${spring-boot.version} - - - - - - - no-liquibase - - ,no-liquibase - - - - swagger - - ,swagger - - - - tls - - ,tls - - - - webpack - - - ${basedir}/target/www/app/main.bundle.js - - - - - org.springframework.boot - spring-boot-starter-undertow - - - org.springframework.boot - spring-boot-devtools - true - - - com.h2database - h2 - - - - - - com.github.eirslett - frontend-maven-plugin - - - install node and npm - - install-node-and-npm - - - ${node.version} - ${npm.version} - - - - npm install - - npm - - - - webpack build dev - - npm - - generate-resources - - run webpack:build - false - - - - - - org.apache.maven.plugins - maven-war-plugin - - false - target/www/ - - - src/main/webapp - - WEB-INF/** - - - - - - - - - - dev${profile.no-liquibase} - - - - dev - - true - - - - org.springframework.boot - spring-boot-starter-undertow - - - org.springframework.boot - spring-boot-devtools - true - - - com.h2database - h2 - - - - - - org.apache.maven.plugins - maven-war-plugin - - false - target/www/ - - - src/main/webapp - - WEB-INF/** - - - - - - - - - - dev${profile.tls}${profile.no-liquibase} - - - - prod - - - org.springframework.boot - spring-boot-starter-undertow - - - - - - maven-clean-plugin - - - - target/www/ - - - - - - org.apache.maven.plugins - maven-war-plugin - - false - target/www/ - - - src/main/webapp - - WEB-INF/** - - - - - - - org.springframework.boot - spring-boot-maven-plugin - - ${start-class} - true - - - - - build-info - - - - - - com.github.eirslett - frontend-maven-plugin - - - install node and npm - - install-node-and-npm - - - ${node.version} - ${npm.version} - - - - npm install - - npm - - - install - - - - webpack build test - - npm - - test - - run webpack:test - false - - - - webpack build prod - - npm - - generate-resources - - run webpack:prod - false - - - - - - pl.project13.maven - git-commit-id-plugin - - - - - - prod${profile.swagger}${profile.no-liquibase} - - - - - cc - - - org.springframework.boot - spring-boot-starter-undertow - - - org.springframework.boot - spring-boot-devtools - true - - - - - - org.apache.maven.plugins - maven-war-plugin - - false - src/main/webapp/ - - - - org.springframework.boot - spring-boot-maven-plugin - - ${start-class} - true - true - true - - - - - org.apache.maven.plugins - maven-compiler-plugin - - - default-compile - none - - - default-testCompile - none - - - - - net.alchim31.maven - scala-maven-plugin - - - - - - dev,swagger - - - - - IDE - - - org.mapstruct - mapstruct-processor - - - org.hibernate - hibernate-jpamodelgen - - - - - - eclipse - - - m2e.version - - - - - - - - org.eclipse.m2e - lifecycle-mapping - ${lifecycle-mapping.version} - - - - - - org.jacoco - - jacoco-maven-plugin - - - ${jacoco-maven-plugin.version} - - - prepare-agent - - - - - - - - - com.github.eirslett - frontend-maven-plugin - ${frontend-maven-plugin.version} - - install-node-and-npm - npm - - - - - - - - - - - - - - - - - default-first - - - - - com.github.eirslett - frontend-maven-plugin - - - - install node and npm - none - - - npm install - none - - - webpack build dev - none - - - webpack build test - none - - - - - - - - default-second - - - - - com.github.eirslett - frontend-maven-plugin - - - - install node and npm - none - - - npm install - none - - - webpack build dev - none - - - webpack build test - none - - - - - - - - integration-lite-first - - - - com.github.eirslett - frontend-maven-plugin - - - - install node and npm - none - - - npm install - none - - - webpack build dev - none - - - webpack build test - none - - - - - - - - integration-lite-second - - - - com.github.eirslett - frontend-maven-plugin - - - - install node and npm - none - - - npm install - none - - - webpack build dev - none - - - webpack build test - none - - - - - - - - - - - 3.0.0 - 1.8 - 2.12.6 - v10.15.0 - 6.4.1 - ${project.build.directory}/test-results - yyyyMMddHHmmss - ${java.version} - ${java.version} - -Djava.security.egd=file:/dev/./urandom -Xmx256m - jdt_apt - false - - - - - - - 2.1.1 - - 2.7.8 - - 5.2.17.Final - - 3.22.0-GA - - 3.5.5 - 3.6 - 2.0.1.Final - 1.2.0.Final - - - 3.1.0 - 3.8.0 - 2.10 - 3.0.0-M2 - 2.2.1 - 3.1.0 - 2.22.2 - 3.2.2 - 0.9.11 - 1.6 - 0.8.2 - 1.0.0 - 3.4.2 - 3.5.0.1254 - 2.2.5 - - - http://localhost:9001 - src/main/webapp/content/**/*.*, src/main/webapp/i18n/*.js, target/www/**/*.* - S3437,S4502,S4684,UndocumentedApi,BoldAndItalicTagsCheck - - src/main/webapp/app/**/*.* - Web:BoldAndItalicTagsCheck - - src/main/java/**/* - squid:S3437 - - src/main/java/**/* - squid:UndocumentedApi - - src/main/java/**/* - squid:S4502 - - src/main/java/**/* - squid:S4684 - ${project.testresult.directory}/coverage/jacoco/jacoco.exec - jacoco - ${project.testresult.directory}/lcov.info - ${project.basedir}/src/main/ - ${project.testresult.directory} - ${project.basedir}/src/test/ - - - - diff --git a/jhipster-5/bookstore-monolith/postcss.config.js b/jhipster-5/bookstore-monolith/postcss.config.js deleted file mode 100644 index a26de7e9f1a3..000000000000 --- a/jhipster-5/bookstore-monolith/postcss.config.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = { - plugins: [ - require('autoprefixer') - ] -} diff --git a/jhipster-5/bookstore-monolith/proxy.conf.json b/jhipster-5/bookstore-monolith/proxy.conf.json deleted file mode 100644 index 8b41fdf7fae8..000000000000 --- a/jhipster-5/bookstore-monolith/proxy.conf.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "*": { - "target": "http://localhost:8080", - "secure": false, - "loglevel": "debug" - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/docker/.dockerignore b/jhipster-5/bookstore-monolith/src/main/docker/.dockerignore deleted file mode 100644 index b03bdc71eeee..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/docker/.dockerignore +++ /dev/null @@ -1,14 +0,0 @@ -# https://docs.docker.com/engine/reference/builder/#dockerignore-file -classes/ -generated-sources/ -generated-test-sources/ -h2db/ -maven-archiver/ -maven-status/ -reports/ -surefire-reports/ -test-classes/ -test-results/ -www/ -!*.jar -!*.war diff --git a/jhipster-5/bookstore-monolith/src/main/docker/Dockerfile b/jhipster-5/bookstore-monolith/src/main/docker/Dockerfile deleted file mode 100644 index 43fadcb6f8f0..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/docker/Dockerfile +++ /dev/null @@ -1,20 +0,0 @@ -FROM openjdk:8-jre-alpine - -ENV SPRING_OUTPUT_ANSI_ENABLED=ALWAYS \ - JHIPSTER_SLEEP=0 \ - JAVA_OPTS="" - -# Add a jhipster user to run our application so that it doesn't need to run as root -RUN adduser -D -s /bin/sh jhipster -WORKDIR /home/jhipster - -ADD entrypoint.sh entrypoint.sh -RUN chmod 755 entrypoint.sh && chown jhipster:jhipster entrypoint.sh -USER jhipster - -ENTRYPOINT ["./entrypoint.sh"] - -EXPOSE 8080 - -ADD *.war app.war - diff --git a/jhipster-5/bookstore-monolith/src/main/docker/app.yml b/jhipster-5/bookstore-monolith/src/main/docker/app.yml deleted file mode 100644 index f60f0f503870..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/docker/app.yml +++ /dev/null @@ -1,15 +0,0 @@ -version: '2' -services: - bookstore-app: - image: bookstore - environment: - - _JAVA_OPTIONS=-Xmx512m -Xms256m - - SPRING_PROFILES_ACTIVE=prod,swagger - - SPRING_DATASOURCE_URL=jdbc:mysql://bookstore-mysql:3306/bookstore?useUnicode=true&characterEncoding=utf8&useSSL=false - - JHIPSTER_SLEEP=10 # gives time for the database to boot before the application - ports: - - 8080:8080 - bookstore-mysql: - extends: - file: mysql.yml - service: bookstore-mysql diff --git a/jhipster-5/bookstore-monolith/src/main/docker/entrypoint.sh b/jhipster-5/bookstore-monolith/src/main/docker/entrypoint.sh deleted file mode 100644 index ccffafb5a499..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/docker/entrypoint.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh - -echo "The application will start in ${JHIPSTER_SLEEP}s..." && sleep ${JHIPSTER_SLEEP} -exec java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar "${HOME}/app.war" "$@" diff --git a/jhipster-5/bookstore-monolith/src/main/docker/mysql.yml b/jhipster-5/bookstore-monolith/src/main/docker/mysql.yml deleted file mode 100644 index 13faba0457ae..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/docker/mysql.yml +++ /dev/null @@ -1,13 +0,0 @@ -version: '2' -services: - bookstore-mysql: - image: mysql:5.7.20 - # volumes: - # - ~/volumes/jhipster/Bookstore/mysql/:/var/lib/mysql/ - environment: - - MYSQL_USER=root - - MYSQL_ALLOW_EMPTY_PASSWORD=yes - - MYSQL_DATABASE=bookstore - ports: - - 3306:3306 - command: mysqld --lower_case_table_names=1 --skip-ssl --character_set_server=utf8mb4 --explicit_defaults_for_timestamp diff --git a/jhipster-5/bookstore-monolith/src/main/docker/sonar.yml b/jhipster-5/bookstore-monolith/src/main/docker/sonar.yml deleted file mode 100644 index 756175b7d072..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/docker/sonar.yml +++ /dev/null @@ -1,7 +0,0 @@ -version: '2' -services: - bookstore-sonar: - image: sonarqube:7.1 - ports: - - 9001:9000 - - 9092:9092 diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/ApplicationWebXml.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/ApplicationWebXml.java deleted file mode 100644 index ca65727e77be..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/ApplicationWebXml.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.baeldung.jhipster5; - -import com.baeldung.jhipster5.config.DefaultProfileUtil; -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -/** - * This is a helper Java class that provides an alternative to creating a web.xml. - * This will be invoked only when the application is deployed to a Servlet container like Tomcat, JBoss etc. - */ -public class ApplicationWebXml extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - /** - * set a default to use when no profile is configured. - */ - DefaultProfileUtil.addDefaultProfile(application.application()); - return application.sources(BookstoreApp.class); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/BookstoreApp.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/BookstoreApp.java deleted file mode 100644 index e7ca925228e5..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/BookstoreApp.java +++ /dev/null @@ -1,98 +0,0 @@ -package com.baeldung.jhipster5; - -import com.baeldung.jhipster5.config.ApplicationProperties; -import com.baeldung.jhipster5.config.DefaultProfileUtil; - -import io.github.jhipster.config.JHipsterConstants; - -import org.apache.commons.lang3.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.autoconfigure.liquibase.LiquibaseProperties; -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.core.env.Environment; - -import javax.annotation.PostConstruct; -import java.net.InetAddress; -import java.net.UnknownHostException; -import java.util.Arrays; -import java.util.Collection; - -@SpringBootApplication -@EnableConfigurationProperties({LiquibaseProperties.class, ApplicationProperties.class}) -public class BookstoreApp { - - private static final Logger log = LoggerFactory.getLogger(BookstoreApp.class); - - private final Environment env; - - public BookstoreApp(Environment env) { - this.env = env; - } - - /** - * Initializes Bookstore. - *

- * Spring profiles can be configured with a program argument --spring.profiles.active=your-active-profile - *

- * You can find more information on how profiles work with JHipster on https://www.jhipster.tech/profiles/. - */ - @PostConstruct - public void initApplication() { - Collection activeProfiles = Arrays.asList(env.getActiveProfiles()); - if (activeProfiles.contains(JHipsterConstants.SPRING_PROFILE_DEVELOPMENT) && activeProfiles.contains(JHipsterConstants.SPRING_PROFILE_PRODUCTION)) { - log.error("You have misconfigured your application! It should not run " + - "with both the 'dev' and 'prod' profiles at the same time."); - } - if (activeProfiles.contains(JHipsterConstants.SPRING_PROFILE_DEVELOPMENT) && activeProfiles.contains(JHipsterConstants.SPRING_PROFILE_CLOUD)) { - log.error("You have misconfigured your application! It should not " + - "run with both the 'dev' and 'cloud' profiles at the same time."); - } - } - - /** - * Main method, used to run the application. - * - * @param args the command line arguments - */ - public static void main(String[] args) { - SpringApplication app = new SpringApplication(BookstoreApp.class); - DefaultProfileUtil.addDefaultProfile(app); - Environment env = app.run(args).getEnvironment(); - logApplicationStartup(env); - } - - private static void logApplicationStartup(Environment env) { - String protocol = "http"; - if (env.getProperty("server.ssl.key-store") != null) { - protocol = "https"; - } - String serverPort = env.getProperty("server.port"); - String contextPath = env.getProperty("server.servlet.context-path"); - if (StringUtils.isBlank(contextPath)) { - contextPath = "/"; - } - String hostAddress = "localhost"; - try { - hostAddress = InetAddress.getLocalHost().getHostAddress(); - } catch (UnknownHostException e) { - log.warn("The host name could not be determined, using `localhost` as fallback"); - } - log.info("\n----------------------------------------------------------\n\t" + - "Application '{}' is running! Access URLs:\n\t" + - "Local: \t\t{}://localhost:{}{}\n\t" + - "External: \t{}://{}:{}{}\n\t" + - "Profile(s): \t{}\n----------------------------------------------------------", - env.getProperty("spring.application.name"), - protocol, - serverPort, - contextPath, - protocol, - hostAddress, - serverPort, - contextPath, - env.getActiveProfiles()); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/aop/logging/LoggingAspect.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/aop/logging/LoggingAspect.java deleted file mode 100644 index 037963706158..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/aop/logging/LoggingAspect.java +++ /dev/null @@ -1,98 +0,0 @@ -package com.baeldung.jhipster5.aop.logging; - -import io.github.jhipster.config.JHipsterConstants; - -import org.aspectj.lang.JoinPoint; -import org.aspectj.lang.ProceedingJoinPoint; -import org.aspectj.lang.annotation.AfterThrowing; -import org.aspectj.lang.annotation.Around; -import org.aspectj.lang.annotation.Aspect; -import org.aspectj.lang.annotation.Pointcut; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.core.env.Environment; - -import java.util.Arrays; - -/** - * Aspect for logging execution of service and repository Spring components. - * - * By default, it only runs with the "dev" profile. - */ -@Aspect -public class LoggingAspect { - - private final Logger log = LoggerFactory.getLogger(this.getClass()); - - private final Environment env; - - public LoggingAspect(Environment env) { - this.env = env; - } - - /** - * Pointcut that matches all repositories, services and Web REST endpoints. - */ - @Pointcut("within(@org.springframework.stereotype.Repository *)" + - " || within(@org.springframework.stereotype.Service *)" + - " || within(@org.springframework.web.bind.annotation.RestController *)") - public void springBeanPointcut() { - // Method is empty as this is just a Pointcut, the implementations are in the advices. - } - - /** - * Pointcut that matches all Spring beans in the application's main packages. - */ - @Pointcut("within(com.baeldung.jhipster5.repository..*)"+ - " || within(com.baeldung.jhipster5.service..*)"+ - " || within(com.baeldung.jhipster5.web.rest..*)") - public void applicationPackagePointcut() { - // Method is empty as this is just a Pointcut, the implementations are in the advices. - } - - /** - * Advice that logs methods throwing exceptions. - * - * @param joinPoint join point for advice - * @param e exception - */ - @AfterThrowing(pointcut = "applicationPackagePointcut() && springBeanPointcut()", throwing = "e") - public void logAfterThrowing(JoinPoint joinPoint, Throwable e) { - if (env.acceptsProfiles(JHipsterConstants.SPRING_PROFILE_DEVELOPMENT)) { - log.error("Exception in {}.{}() with cause = \'{}\' and exception = \'{}\'", joinPoint.getSignature().getDeclaringTypeName(), - joinPoint.getSignature().getName(), e.getCause() != null? e.getCause() : "NULL", e.getMessage(), e); - - } else { - log.error("Exception in {}.{}() with cause = {}", joinPoint.getSignature().getDeclaringTypeName(), - joinPoint.getSignature().getName(), e.getCause() != null? e.getCause() : "NULL"); - } - } - - /** - * Advice that logs when a method is entered and exited. - * - * @param joinPoint join point for advice - * @return result - * @throws Throwable throws IllegalArgumentException - */ - @Around("applicationPackagePointcut() && springBeanPointcut()") - public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable { - if (log.isDebugEnabled()) { - log.debug("Enter: {}.{}() with argument[s] = {}", joinPoint.getSignature().getDeclaringTypeName(), - joinPoint.getSignature().getName(), Arrays.toString(joinPoint.getArgs())); - } - try { - Object result = joinPoint.proceed(); - if (log.isDebugEnabled()) { - log.debug("Exit: {}.{}() with result = {}", joinPoint.getSignature().getDeclaringTypeName(), - joinPoint.getSignature().getName(), result); - } - return result; - } catch (IllegalArgumentException e) { - log.error("Illegal argument: {} in {}.{}()", Arrays.toString(joinPoint.getArgs()), - joinPoint.getSignature().getDeclaringTypeName(), joinPoint.getSignature().getName()); - - throw e; - } - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/ApplicationProperties.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/ApplicationProperties.java deleted file mode 100644 index 4ca3e9bd85d7..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/ApplicationProperties.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.baeldung.jhipster5.config; - -import org.springframework.boot.context.properties.ConfigurationProperties; - -/** - * Properties specific to Bookstore. - *

- * Properties are configured in the application.yml file. - * See {@link io.github.jhipster.config.JHipsterProperties} for a good example. - */ -@ConfigurationProperties(prefix = "application", ignoreUnknownFields = false) -public class ApplicationProperties { - -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/AsyncConfiguration.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/AsyncConfiguration.java deleted file mode 100644 index 414fe152bf33..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/AsyncConfiguration.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.baeldung.jhipster5.config; - -import io.github.jhipster.async.ExceptionHandlingAsyncTaskExecutor; -import io.github.jhipster.config.JHipsterProperties; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler; -import org.springframework.aop.interceptor.SimpleAsyncUncaughtExceptionHandler; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.scheduling.annotation.*; -import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; -import org.springframework.scheduling.annotation.SchedulingConfigurer; -import org.springframework.scheduling.config.ScheduledTaskRegistrar; - -import java.util.concurrent.Executor; -import java.util.concurrent.Executors; - -@Configuration -@EnableAsync -@EnableScheduling -public class AsyncConfiguration implements AsyncConfigurer, SchedulingConfigurer { - - private final Logger log = LoggerFactory.getLogger(AsyncConfiguration.class); - - private final JHipsterProperties jHipsterProperties; - - public AsyncConfiguration(JHipsterProperties jHipsterProperties) { - this.jHipsterProperties = jHipsterProperties; - } - - @Override - @Bean(name = "taskExecutor") - public Executor getAsyncExecutor() { - log.debug("Creating Async Task Executor"); - ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); - executor.setCorePoolSize(jHipsterProperties.getAsync().getCorePoolSize()); - executor.setMaxPoolSize(jHipsterProperties.getAsync().getMaxPoolSize()); - executor.setQueueCapacity(jHipsterProperties.getAsync().getQueueCapacity()); - executor.setThreadNamePrefix("bookstore-Executor-"); - return new ExceptionHandlingAsyncTaskExecutor(executor); - } - - @Override - public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() { - return new SimpleAsyncUncaughtExceptionHandler(); - } - - @Override - public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { - taskRegistrar.setScheduler(scheduledTaskExecutor()); - } - - @Bean - public Executor scheduledTaskExecutor() { - return Executors.newScheduledThreadPool(jHipsterProperties.getAsync().getCorePoolSize()); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/CloudDatabaseConfiguration.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/CloudDatabaseConfiguration.java deleted file mode 100644 index 887a1bae8940..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/CloudDatabaseConfiguration.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.baeldung.jhipster5.config; - -import io.github.jhipster.config.JHipsterConstants; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.cloud.config.java.AbstractCloudConfig; -import org.springframework.context.annotation.*; - -import javax.sql.DataSource; -import org.springframework.boot.context.properties.ConfigurationProperties; - - -@Configuration -@Profile(JHipsterConstants.SPRING_PROFILE_CLOUD) -public class CloudDatabaseConfiguration extends AbstractCloudConfig { - - private final Logger log = LoggerFactory.getLogger(CloudDatabaseConfiguration.class); - - private static final String CLOUD_CONFIGURATION_HIKARI_PREFIX = "spring.datasource.hikari"; - - @Bean - @ConfigurationProperties(CLOUD_CONFIGURATION_HIKARI_PREFIX) - public DataSource dataSource() { - log.info("Configuring JDBC datasource from a cloud provider"); - return connectionFactory().dataSource(); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/Constants.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/Constants.java deleted file mode 100644 index dd8f717f98f2..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/Constants.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.baeldung.jhipster5.config; - -/** - * Application constants. - */ -public final class Constants { - - // Regex for acceptable logins - public static final String LOGIN_REGEX = "^[_.@A-Za-z0-9-]*$"; - - public static final String SYSTEM_ACCOUNT = "system"; - public static final String ANONYMOUS_USER = "anonymoususer"; - public static final String DEFAULT_LANGUAGE = "en"; - - private Constants() { - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/DatabaseConfiguration.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/DatabaseConfiguration.java deleted file mode 100644 index 007b1d6431f2..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/DatabaseConfiguration.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.baeldung.jhipster5.config; - -import io.github.jhipster.config.JHipsterConstants; -import io.github.jhipster.config.h2.H2ConfigurationHelper; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Profile; - -import org.springframework.core.env.Environment; -import org.springframework.data.jpa.repository.config.EnableJpaAuditing; -import org.springframework.data.jpa.repository.config.EnableJpaRepositories; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -import java.sql.SQLException; - -@Configuration -@EnableJpaRepositories("com.baeldung.jhipster5.repository") -@EnableJpaAuditing(auditorAwareRef = "springSecurityAuditorAware") -@EnableTransactionManagement -public class DatabaseConfiguration { - - private final Logger log = LoggerFactory.getLogger(DatabaseConfiguration.class); - - private final Environment env; - - public DatabaseConfiguration(Environment env) { - this.env = env; - } - - /** - * Open the TCP port for the H2 database, so it is available remotely. - * - * @return the H2 database TCP server - * @throws SQLException if the server failed to start - */ - @Bean(initMethod = "start", destroyMethod = "stop") - @Profile(JHipsterConstants.SPRING_PROFILE_DEVELOPMENT) - public Object h2TCPServer() throws SQLException { - String port = getValidPortForH2(); - log.debug("H2 database is available on port {}", port); - return H2ConfigurationHelper.createServer(port); - } - - private String getValidPortForH2() { - int port = Integer.parseInt(env.getProperty("server.port")); - if (port < 10000) { - port = 10000 + port; - } else { - if (port < 63536) { - port = port + 2000; - } else { - port = port - 2000; - } - } - return String.valueOf(port); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/DateTimeFormatConfiguration.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/DateTimeFormatConfiguration.java deleted file mode 100644 index 4415ce0b1ea6..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/DateTimeFormatConfiguration.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.baeldung.jhipster5.config; - -import org.springframework.context.annotation.Configuration; -import org.springframework.format.FormatterRegistry; -import org.springframework.format.datetime.standard.DateTimeFormatterRegistrar; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; - -/** - * Configure the converters to use the ISO format for dates by default. - */ -@Configuration -public class DateTimeFormatConfiguration implements WebMvcConfigurer { - - @Override - public void addFormatters(FormatterRegistry registry) { - DateTimeFormatterRegistrar registrar = new DateTimeFormatterRegistrar(); - registrar.setUseIsoFormat(true); - registrar.registerFormatters(registry); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/DefaultProfileUtil.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/DefaultProfileUtil.java deleted file mode 100644 index 2cfe16a1ae71..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/DefaultProfileUtil.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.baeldung.jhipster5.config; - -import io.github.jhipster.config.JHipsterConstants; - -import org.springframework.boot.SpringApplication; -import org.springframework.core.env.Environment; - -import java.util.*; - -/** - * Utility class to load a Spring profile to be used as default - * when there is no spring.profiles.active set in the environment or as command line argument. - * If the value is not available in application.yml then dev profile will be used as default. - */ -public final class DefaultProfileUtil { - - private static final String SPRING_PROFILE_DEFAULT = "spring.profiles.default"; - - private DefaultProfileUtil() { - } - - /** - * Set a default to use when no profile is configured. - * - * @param app the Spring application - */ - public static void addDefaultProfile(SpringApplication app) { - Map defProperties = new HashMap<>(); - /* - * The default profile to use when no other profiles are defined - * This cannot be set in the application.yml file. - * See https://github.com/spring-projects/spring-boot/issues/1219 - */ - defProperties.put(SPRING_PROFILE_DEFAULT, JHipsterConstants.SPRING_PROFILE_DEVELOPMENT); - app.setDefaultProperties(defProperties); - } - - /** - * Get the profiles that are applied else get default profiles. - * - * @param env spring environment - * @return profiles - */ - public static String[] getActiveProfiles(Environment env) { - String[] profiles = env.getActiveProfiles(); - if (profiles.length == 0) { - return env.getDefaultProfiles(); - } - return profiles; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/JacksonConfiguration.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/JacksonConfiguration.java deleted file mode 100644 index 119cd5f0c6b7..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/JacksonConfiguration.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.baeldung.jhipster5.config; - -import com.fasterxml.jackson.datatype.hibernate5.Hibernate5Module; -import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; -import com.fasterxml.jackson.module.afterburner.AfterburnerModule; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.zalando.problem.ProblemModule; -import org.zalando.problem.violations.ConstraintViolationProblemModule; - -@Configuration -public class JacksonConfiguration { - - /** - * Support for Java date and time API. - * @return the corresponding Jackson module. - */ - @Bean - public JavaTimeModule javaTimeModule() { - return new JavaTimeModule(); - } - - @Bean - public Jdk8Module jdk8TimeModule() { - return new Jdk8Module(); - } - - - /* - * Support for Hibernate types in Jackson. - */ - @Bean - public Hibernate5Module hibernate5Module() { - return new Hibernate5Module(); - } - - /* - * Jackson Afterburner module to speed up serialization/deserialization. - */ - @Bean - public AfterburnerModule afterburnerModule() { - return new AfterburnerModule(); - } - - /* - * Module for serialization/deserialization of RFC7807 Problem. - */ - @Bean - ProblemModule problemModule() { - return new ProblemModule(); - } - - /* - * Module for serialization/deserialization of ConstraintViolationProblem. - */ - @Bean - ConstraintViolationProblemModule constraintViolationProblemModule() { - return new ConstraintViolationProblemModule(); - } - -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/LiquibaseConfiguration.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/LiquibaseConfiguration.java deleted file mode 100644 index 4b2a7b1e66e2..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/LiquibaseConfiguration.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.baeldung.jhipster5.config; - -import javax.sql.DataSource; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.boot.autoconfigure.liquibase.LiquibaseProperties; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.core.env.Environment; -import org.springframework.core.task.TaskExecutor; - -import io.github.jhipster.config.JHipsterConstants; -import io.github.jhipster.config.liquibase.AsyncSpringLiquibase; -import liquibase.integration.spring.SpringLiquibase; - -@Configuration -public class LiquibaseConfiguration { - - private final Logger log = LoggerFactory.getLogger(LiquibaseConfiguration.class); - - private final Environment env; - - - public LiquibaseConfiguration(Environment env) { - this.env = env; - } - - @Bean - public SpringLiquibase liquibase(@Qualifier("taskExecutor") TaskExecutor taskExecutor, - DataSource dataSource, LiquibaseProperties liquibaseProperties) { - - // Use liquibase.integration.spring.SpringLiquibase if you don't want Liquibase to start asynchronously - SpringLiquibase liquibase = new AsyncSpringLiquibase(taskExecutor, env); - liquibase.setDataSource(dataSource); - liquibase.setChangeLog("classpath:config/liquibase/master.xml"); - liquibase.setContexts(liquibaseProperties.getContexts()); - liquibase.setDefaultSchema(liquibaseProperties.getDefaultSchema()); - liquibase.setDropFirst(liquibaseProperties.isDropFirst()); - liquibase.setChangeLogParameters(liquibaseProperties.getParameters()); - if (env.acceptsProfiles(JHipsterConstants.SPRING_PROFILE_NO_LIQUIBASE)) { - liquibase.setShouldRun(false); - } else { - liquibase.setShouldRun(liquibaseProperties.isEnabled()); - log.debug("Configuring Liquibase"); - } - return liquibase; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/LocaleConfiguration.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/LocaleConfiguration.java deleted file mode 100644 index 256c6b77b962..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/LocaleConfiguration.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.baeldung.jhipster5.config; - -import io.github.jhipster.config.locale.AngularCookieLocaleResolver; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.web.servlet.LocaleResolver; -import org.springframework.web.servlet.config.annotation.*; -import org.springframework.web.servlet.i18n.LocaleChangeInterceptor; - -@Configuration -public class LocaleConfiguration implements WebMvcConfigurer { - - @Bean(name = "localeResolver") - public LocaleResolver localeResolver() { - AngularCookieLocaleResolver cookieLocaleResolver = new AngularCookieLocaleResolver(); - cookieLocaleResolver.setCookieName("NG_TRANSLATE_LANG_KEY"); - return cookieLocaleResolver; - } - - @Override - public void addInterceptors(InterceptorRegistry registry) { - LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor(); - localeChangeInterceptor.setParamName("language"); - registry.addInterceptor(localeChangeInterceptor); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/LoggingAspectConfiguration.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/LoggingAspectConfiguration.java deleted file mode 100644 index 25d7ba379267..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/LoggingAspectConfiguration.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.baeldung.jhipster5.config; - -import com.baeldung.jhipster5.aop.logging.LoggingAspect; - -import io.github.jhipster.config.JHipsterConstants; - -import org.springframework.context.annotation.*; -import org.springframework.core.env.Environment; - -@Configuration -@EnableAspectJAutoProxy -public class LoggingAspectConfiguration { - - @Bean - @Profile(JHipsterConstants.SPRING_PROFILE_DEVELOPMENT) - public LoggingAspect loggingAspect(Environment env) { - return new LoggingAspect(env); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/LoggingConfiguration.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/LoggingConfiguration.java deleted file mode 100644 index 9402a1bc36d0..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/LoggingConfiguration.java +++ /dev/null @@ -1,154 +0,0 @@ -package com.baeldung.jhipster5.config; - -import java.net.InetSocketAddress; -import java.util.Iterator; - -import io.github.jhipster.config.JHipsterProperties; - -import ch.qos.logback.classic.AsyncAppender; -import ch.qos.logback.classic.Level; -import ch.qos.logback.classic.LoggerContext; -import ch.qos.logback.classic.boolex.OnMarkerEvaluator; -import ch.qos.logback.classic.spi.ILoggingEvent; -import ch.qos.logback.classic.spi.LoggerContextListener; -import ch.qos.logback.core.Appender; -import ch.qos.logback.core.filter.EvaluatorFilter; -import ch.qos.logback.core.spi.ContextAwareBase; -import ch.qos.logback.core.spi.FilterReply; -import net.logstash.logback.appender.LogstashTcpSocketAppender; -import net.logstash.logback.encoder.LogstashEncoder; -import net.logstash.logback.stacktrace.ShortenedThrowableConverter; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; - -@Configuration -public class LoggingConfiguration { - - private static final String LOGSTASH_APPENDER_NAME = "LOGSTASH"; - - private static final String ASYNC_LOGSTASH_APPENDER_NAME = "ASYNC_LOGSTASH"; - - private final Logger log = LoggerFactory.getLogger(LoggingConfiguration.class); - - private LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); - - private final String appName; - - private final String serverPort; - - private final JHipsterProperties jHipsterProperties; - - public LoggingConfiguration(@Value("${spring.application.name}") String appName, @Value("${server.port}") String serverPort, - JHipsterProperties jHipsterProperties) { - this.appName = appName; - this.serverPort = serverPort; - this.jHipsterProperties = jHipsterProperties; - if (jHipsterProperties.getLogging().getLogstash().isEnabled()) { - addLogstashAppender(context); - addContextListener(context); - } - if (jHipsterProperties.getMetrics().getLogs().isEnabled()) { - setMetricsMarkerLogbackFilter(context); - } - } - - private void addContextListener(LoggerContext context) { - LogbackLoggerContextListener loggerContextListener = new LogbackLoggerContextListener(); - loggerContextListener.setContext(context); - context.addListener(loggerContextListener); - } - - private void addLogstashAppender(LoggerContext context) { - log.info("Initializing Logstash logging"); - - LogstashTcpSocketAppender logstashAppender = new LogstashTcpSocketAppender(); - logstashAppender.setName(LOGSTASH_APPENDER_NAME); - logstashAppender.setContext(context); - String customFields = "{\"app_name\":\"" + appName + "\",\"app_port\":\"" + serverPort + "\"}"; - - // More documentation is available at: https://github.com/logstash/logstash-logback-encoder - LogstashEncoder logstashEncoder = new LogstashEncoder(); - // Set the Logstash appender config from JHipster properties - logstashAppender.addDestinations(new InetSocketAddress(jHipsterProperties.getLogging().getLogstash().getHost(), jHipsterProperties.getLogging().getLogstash().getPort())); - - ShortenedThrowableConverter throwableConverter = new ShortenedThrowableConverter(); - throwableConverter.setRootCauseFirst(true); - logstashEncoder.setThrowableConverter(throwableConverter); - logstashEncoder.setCustomFields(customFields); - - logstashAppender.setEncoder(logstashEncoder); - logstashAppender.start(); - - // Wrap the appender in an Async appender for performance - AsyncAppender asyncLogstashAppender = new AsyncAppender(); - asyncLogstashAppender.setContext(context); - asyncLogstashAppender.setName(ASYNC_LOGSTASH_APPENDER_NAME); - asyncLogstashAppender.setQueueSize(jHipsterProperties.getLogging().getLogstash().getQueueSize()); - asyncLogstashAppender.addAppender(logstashAppender); - asyncLogstashAppender.start(); - - context.getLogger("ROOT").addAppender(asyncLogstashAppender); - } - - // Configure a log filter to remove "metrics" logs from all appenders except the "LOGSTASH" appender - private void setMetricsMarkerLogbackFilter(LoggerContext context) { - log.info("Filtering metrics logs from all appenders except the {} appender", LOGSTASH_APPENDER_NAME); - OnMarkerEvaluator onMarkerMetricsEvaluator = new OnMarkerEvaluator(); - onMarkerMetricsEvaluator.setContext(context); - onMarkerMetricsEvaluator.addMarker("metrics"); - onMarkerMetricsEvaluator.start(); - EvaluatorFilter metricsFilter = new EvaluatorFilter<>(); - metricsFilter.setContext(context); - metricsFilter.setEvaluator(onMarkerMetricsEvaluator); - metricsFilter.setOnMatch(FilterReply.DENY); - metricsFilter.start(); - - for (ch.qos.logback.classic.Logger logger : context.getLoggerList()) { - for (Iterator> it = logger.iteratorForAppenders(); it.hasNext();) { - Appender appender = it.next(); - if (!appender.getName().equals(ASYNC_LOGSTASH_APPENDER_NAME)) { - log.debug("Filter metrics logs from the {} appender", appender.getName()); - appender.setContext(context); - appender.addFilter(metricsFilter); - appender.start(); - } - } - } - } - - /** - * Logback configuration is achieved by configuration file and API. - * When configuration file change is detected, the configuration is reset. - * This listener ensures that the programmatic configuration is also re-applied after reset. - */ - class LogbackLoggerContextListener extends ContextAwareBase implements LoggerContextListener { - - @Override - public boolean isResetResistant() { - return true; - } - - @Override - public void onStart(LoggerContext context) { - addLogstashAppender(context); - } - - @Override - public void onReset(LoggerContext context) { - addLogstashAppender(context); - } - - @Override - public void onStop(LoggerContext context) { - // Nothing to do. - } - - @Override - public void onLevelChange(ch.qos.logback.classic.Logger logger, Level level) { - // Nothing to do. - } - } - -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/SecurityConfiguration.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/SecurityConfiguration.java deleted file mode 100644 index f07944271e88..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/SecurityConfiguration.java +++ /dev/null @@ -1,122 +0,0 @@ -package com.baeldung.jhipster5.config; - -import com.baeldung.jhipster5.security.*; -import com.baeldung.jhipster5.security.jwt.*; - -import org.springframework.beans.factory.BeanInitializationException; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Import; -import org.springframework.http.HttpMethod; -import org.springframework.security.authentication.AuthenticationManager; -import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; -import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; -import org.springframework.security.config.annotation.web.builders.HttpSecurity; -import org.springframework.security.config.annotation.web.builders.WebSecurity; -import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; -import org.springframework.security.config.http.SessionCreationPolicy; -import org.springframework.security.core.userdetails.UserDetailsService; -import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; -import org.springframework.security.crypto.password.PasswordEncoder; -import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; -import org.springframework.web.filter.CorsFilter; -import org.zalando.problem.spring.web.advice.security.SecurityProblemSupport; - -import javax.annotation.PostConstruct; - -@Configuration -@EnableWebSecurity -@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true) -@Import(SecurityProblemSupport.class) -public class SecurityConfiguration extends WebSecurityConfigurerAdapter { - - private final AuthenticationManagerBuilder authenticationManagerBuilder; - - private final UserDetailsService userDetailsService; - - private final TokenProvider tokenProvider; - - private final CorsFilter corsFilter; - - private final SecurityProblemSupport problemSupport; - - public SecurityConfiguration(AuthenticationManagerBuilder authenticationManagerBuilder, UserDetailsService userDetailsService, TokenProvider tokenProvider, CorsFilter corsFilter, SecurityProblemSupport problemSupport) { - this.authenticationManagerBuilder = authenticationManagerBuilder; - this.userDetailsService = userDetailsService; - this.tokenProvider = tokenProvider; - this.corsFilter = corsFilter; - this.problemSupport = problemSupport; - } - - @PostConstruct - public void init() { - try { - authenticationManagerBuilder - .userDetailsService(userDetailsService) - .passwordEncoder(passwordEncoder()); - } catch (Exception e) { - throw new BeanInitializationException("Security configuration failed", e); - } - } - - @Override - @Bean - public AuthenticationManager authenticationManagerBean() throws Exception { - return super.authenticationManagerBean(); - } - - @Bean - public PasswordEncoder passwordEncoder() { - return new BCryptPasswordEncoder(); - } - - @Override - public void configure(WebSecurity web) throws Exception { - web.ignoring() - .antMatchers(HttpMethod.OPTIONS, "/**") - .antMatchers("/app/**/*.{js,html}") - .antMatchers("/i18n/**") - .antMatchers("/content/**") - .antMatchers("/h2-console/**") - .antMatchers("/swagger-ui/index.html") - .antMatchers("/test/**"); - } - - @Override - public void configure(HttpSecurity http) throws Exception { - http - .csrf() - .disable() - .addFilterBefore(corsFilter, UsernamePasswordAuthenticationFilter.class) - .exceptionHandling() - .authenticationEntryPoint(problemSupport) - .accessDeniedHandler(problemSupport) - .and() - .headers() - .frameOptions() - .disable() - .and() - .sessionManagement() - .sessionCreationPolicy(SessionCreationPolicy.STATELESS) - .and() - .authorizeRequests() - .antMatchers("/api/books/purchase/**").authenticated() - .antMatchers("/api/register").permitAll() - .antMatchers("/api/activate").permitAll() - .antMatchers("/api/authenticate").permitAll() - .antMatchers("/api/account/reset-password/init").permitAll() - .antMatchers("/api/account/reset-password/finish").permitAll() - .antMatchers("/api/**").authenticated() - .antMatchers("/management/health").permitAll() - .antMatchers("/management/info").permitAll() - .antMatchers("/management/**").hasAuthority(AuthoritiesConstants.ADMIN) - .and() - .apply(securityConfigurerAdapter()); - - } - - private JWTConfigurer securityConfigurerAdapter() { - return new JWTConfigurer(tokenProvider); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/WebConfigurer.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/WebConfigurer.java deleted file mode 100644 index 26cfc9248784..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/WebConfigurer.java +++ /dev/null @@ -1,170 +0,0 @@ -package com.baeldung.jhipster5.config; - -import io.github.jhipster.config.JHipsterConstants; -import io.github.jhipster.config.JHipsterProperties; -import io.github.jhipster.config.h2.H2ConfigurationHelper; -import io.github.jhipster.web.filter.CachingHttpHeadersFilter; -import io.undertow.UndertowOptions; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.web.embedded.undertow.UndertowServletWebServerFactory; -import org.springframework.boot.web.server.*; -import org.springframework.boot.web.servlet.ServletContextInitializer; -import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.core.env.Environment; -import org.springframework.http.MediaType; -import org.springframework.web.cors.CorsConfiguration; -import org.springframework.web.cors.UrlBasedCorsConfigurationSource; -import org.springframework.web.filter.CorsFilter; - -import javax.servlet.*; -import java.io.File; -import java.io.UnsupportedEncodingException; -import java.nio.charset.StandardCharsets; -import java.nio.file.Paths; -import java.util.*; - -import static java.net.URLDecoder.decode; - -/** - * Configuration of web application with Servlet 3.0 APIs. - */ -@Configuration -public class WebConfigurer implements ServletContextInitializer, WebServerFactoryCustomizer { - - private final Logger log = LoggerFactory.getLogger(WebConfigurer.class); - - private final Environment env; - - private final JHipsterProperties jHipsterProperties; - - public WebConfigurer(Environment env, JHipsterProperties jHipsterProperties) { - - this.env = env; - this.jHipsterProperties = jHipsterProperties; - } - - @Override - public void onStartup(ServletContext servletContext) throws ServletException { - if (env.getActiveProfiles().length != 0) { - log.info("Web application configuration, using profiles: {}", (Object[]) env.getActiveProfiles()); - } - EnumSet disps = EnumSet.of(DispatcherType.REQUEST, DispatcherType.FORWARD, DispatcherType.ASYNC); - if (env.acceptsProfiles(JHipsterConstants.SPRING_PROFILE_PRODUCTION)) { - initCachingHttpHeadersFilter(servletContext, disps); - } - if (env.acceptsProfiles(JHipsterConstants.SPRING_PROFILE_DEVELOPMENT)) { - initH2Console(servletContext); - } - log.info("Web application fully configured"); - } - - /** - * Customize the Servlet engine: Mime types, the document root, the cache. - */ - @Override - public void customize(WebServerFactory server) { - setMimeMappings(server); - // When running in an IDE or with ./mvnw spring-boot:run, set location of the static web assets. - setLocationForStaticAssets(server); - - /* - * Enable HTTP/2 for Undertow - https://twitter.com/ankinson/status/829256167700492288 - * HTTP/2 requires HTTPS, so HTTP requests will fallback to HTTP/1.1. - * See the JHipsterProperties class and your application-*.yml configuration files - * for more information. - */ - if (jHipsterProperties.getHttp().getVersion().equals(JHipsterProperties.Http.Version.V_2_0) && - server instanceof UndertowServletWebServerFactory) { - - ((UndertowServletWebServerFactory) server) - .addBuilderCustomizers(builder -> - builder.setServerOption(UndertowOptions.ENABLE_HTTP2, true)); - } - } - - private void setMimeMappings(WebServerFactory server) { - if (server instanceof ConfigurableServletWebServerFactory) { - MimeMappings mappings = new MimeMappings(MimeMappings.DEFAULT); - // IE issue, see https://github.com/jhipster/generator-jhipster/pull/711 - mappings.add("html", MediaType.TEXT_HTML_VALUE + ";charset=" + StandardCharsets.UTF_8.name().toLowerCase()); - // CloudFoundry issue, see https://github.com/cloudfoundry/gorouter/issues/64 - mappings.add("json", MediaType.TEXT_HTML_VALUE + ";charset=" + StandardCharsets.UTF_8.name().toLowerCase()); - ConfigurableServletWebServerFactory servletWebServer = (ConfigurableServletWebServerFactory) server; - servletWebServer.setMimeMappings(mappings); - } - } - - private void setLocationForStaticAssets(WebServerFactory server) { - if (server instanceof ConfigurableServletWebServerFactory) { - ConfigurableServletWebServerFactory servletWebServer = (ConfigurableServletWebServerFactory) server; - File root; - String prefixPath = resolvePathPrefix(); - root = new File(prefixPath + "target/www/"); - if (root.exists() && root.isDirectory()) { - servletWebServer.setDocumentRoot(root); - } - } - } - - /** - * Resolve path prefix to static resources. - */ - private String resolvePathPrefix() { - String fullExecutablePath; - try { - fullExecutablePath = decode(this.getClass().getResource("").getPath(), StandardCharsets.UTF_8.name()); - } catch (UnsupportedEncodingException e) { - /* try without decoding if this ever happens */ - fullExecutablePath = this.getClass().getResource("").getPath(); - } - String rootPath = Paths.get(".").toUri().normalize().getPath(); - String extractedPath = fullExecutablePath.replace(rootPath, ""); - int extractionEndIndex = extractedPath.indexOf("target/"); - if (extractionEndIndex <= 0) { - return ""; - } - return extractedPath.substring(0, extractionEndIndex); - } - - /** - * Initializes the caching HTTP Headers Filter. - */ - private void initCachingHttpHeadersFilter(ServletContext servletContext, - EnumSet disps) { - log.debug("Registering Caching HTTP Headers Filter"); - FilterRegistration.Dynamic cachingHttpHeadersFilter = - servletContext.addFilter("cachingHttpHeadersFilter", - new CachingHttpHeadersFilter(jHipsterProperties)); - - cachingHttpHeadersFilter.addMappingForUrlPatterns(disps, true, "/i18n/*"); - cachingHttpHeadersFilter.addMappingForUrlPatterns(disps, true, "/content/*"); - cachingHttpHeadersFilter.addMappingForUrlPatterns(disps, true, "/app/*"); - cachingHttpHeadersFilter.setAsyncSupported(true); - } - - @Bean - public CorsFilter corsFilter() { - UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); - CorsConfiguration config = jHipsterProperties.getCors(); - if (config.getAllowedOrigins() != null && !config.getAllowedOrigins().isEmpty()) { - log.debug("Registering CORS filter"); - source.registerCorsConfiguration("/api/**", config); - source.registerCorsConfiguration("/management/**", config); - source.registerCorsConfiguration("/v2/api-docs", config); - } - return new CorsFilter(source); - } - - /** - * Initializes H2 console. - */ - private void initH2Console(ServletContext servletContext) { - log.debug("Initialize H2 console"); - H2ConfigurationHelper.initH2Console(servletContext); - } - -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/audit/AuditEventConverter.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/audit/AuditEventConverter.java deleted file mode 100644 index 6dd87bb82da9..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/audit/AuditEventConverter.java +++ /dev/null @@ -1,86 +0,0 @@ -package com.baeldung.jhipster5.config.audit; - -import com.baeldung.jhipster5.domain.PersistentAuditEvent; - -import org.springframework.boot.actuate.audit.AuditEvent; -import org.springframework.security.web.authentication.WebAuthenticationDetails; -import org.springframework.stereotype.Component; - -import java.util.*; - -@Component -public class AuditEventConverter { - - /** - * Convert a list of PersistentAuditEvent to a list of AuditEvent - * - * @param persistentAuditEvents the list to convert - * @return the converted list. - */ - public List convertToAuditEvent(Iterable persistentAuditEvents) { - if (persistentAuditEvents == null) { - return Collections.emptyList(); - } - List auditEvents = new ArrayList<>(); - for (PersistentAuditEvent persistentAuditEvent : persistentAuditEvents) { - auditEvents.add(convertToAuditEvent(persistentAuditEvent)); - } - return auditEvents; - } - - /** - * Convert a PersistentAuditEvent to an AuditEvent - * - * @param persistentAuditEvent the event to convert - * @return the converted list. - */ - public AuditEvent convertToAuditEvent(PersistentAuditEvent persistentAuditEvent) { - if (persistentAuditEvent == null) { - return null; - } - return new AuditEvent(persistentAuditEvent.getAuditEventDate(), persistentAuditEvent.getPrincipal(), - persistentAuditEvent.getAuditEventType(), convertDataToObjects(persistentAuditEvent.getData())); - } - - /** - * Internal conversion. This is needed to support the current SpringBoot actuator AuditEventRepository interface - * - * @param data the data to convert - * @return a map of String, Object - */ - public Map convertDataToObjects(Map data) { - Map results = new HashMap<>(); - - if (data != null) { - for (Map.Entry entry : data.entrySet()) { - results.put(entry.getKey(), entry.getValue()); - } - } - return results; - } - - /** - * Internal conversion. This method will allow to save additional data. - * By default, it will save the object as string - * - * @param data the data to convert - * @return a map of String, String - */ - public Map convertDataToStrings(Map data) { - Map results = new HashMap<>(); - - if (data != null) { - for (Map.Entry entry : data.entrySet()) { - // Extract the data that will be saved. - if (entry.getValue() instanceof WebAuthenticationDetails) { - WebAuthenticationDetails authenticationDetails = (WebAuthenticationDetails) entry.getValue(); - results.put("remoteAddress", authenticationDetails.getRemoteAddress()); - results.put("sessionId", authenticationDetails.getSessionId()); - } else { - results.put(entry.getKey(), Objects.toString(entry.getValue())); - } - } - } - return results; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/audit/package-info.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/audit/package-info.java deleted file mode 100644 index 49a2a73a6163..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/audit/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * Audit specific code. - */ -package com.baeldung.jhipster5.config.audit; diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/package-info.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/package-info.java deleted file mode 100644 index 868155ce9fcc..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/config/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * Spring Framework configuration files. - */ -package com.baeldung.jhipster5.config; diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/domain/AbstractAuditingEntity.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/domain/AbstractAuditingEntity.java deleted file mode 100644 index 861674ccc9fc..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/domain/AbstractAuditingEntity.java +++ /dev/null @@ -1,79 +0,0 @@ -package com.baeldung.jhipster5.domain; - -import com.fasterxml.jackson.annotation.JsonIgnore; -import org.hibernate.envers.Audited; -import org.springframework.data.annotation.CreatedBy; -import org.springframework.data.annotation.CreatedDate; -import org.springframework.data.annotation.LastModifiedBy; -import org.springframework.data.annotation.LastModifiedDate; -import org.springframework.data.jpa.domain.support.AuditingEntityListener; - -import java.io.Serializable; -import java.time.Instant; -import javax.persistence.Column; -import javax.persistence.EntityListeners; -import javax.persistence.MappedSuperclass; - -/** - * Base abstract class for entities which will hold definitions for created, last modified by and created, - * last modified by date. - */ -@MappedSuperclass -@Audited -@EntityListeners(AuditingEntityListener.class) -public abstract class AbstractAuditingEntity implements Serializable { - - private static final long serialVersionUID = 1L; - - @CreatedBy - @Column(name = "created_by", nullable = false, length = 50, updatable = false) - @JsonIgnore - private String createdBy; - - @CreatedDate - @Column(name = "created_date", updatable = false) - @JsonIgnore - private Instant createdDate = Instant.now(); - - @LastModifiedBy - @Column(name = "last_modified_by", length = 50) - @JsonIgnore - private String lastModifiedBy; - - @LastModifiedDate - @Column(name = "last_modified_date") - @JsonIgnore - private Instant lastModifiedDate = Instant.now(); - - public String getCreatedBy() { - return createdBy; - } - - public void setCreatedBy(String createdBy) { - this.createdBy = createdBy; - } - - public Instant getCreatedDate() { - return createdDate; - } - - public void setCreatedDate(Instant createdDate) { - this.createdDate = createdDate; - } - - public String getLastModifiedBy() { - return lastModifiedBy; - } - - public void setLastModifiedBy(String lastModifiedBy) { - this.lastModifiedBy = lastModifiedBy; - } - - public Instant getLastModifiedDate() { - return lastModifiedDate; - } - - public void setLastModifiedDate(Instant lastModifiedDate) { - this.lastModifiedDate = lastModifiedDate; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/domain/Authority.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/domain/Authority.java deleted file mode 100644 index fbd4596fc77e..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/domain/Authority.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.baeldung.jhipster5.domain; - -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.Table; -import javax.persistence.Column; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; -import java.io.Serializable; - -/** - * An authority (a security role) used by Spring Security. - */ -@Entity -@Table(name = "jhi_authority") -public class Authority implements Serializable { - - private static final long serialVersionUID = 1L; - - @NotNull - @Size(max = 50) - @Id - @Column(length = 50) - private String name; - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - - Authority authority = (Authority) o; - - return !(name != null ? !name.equals(authority.name) : authority.name != null); - } - - @Override - public int hashCode() { - return name != null ? name.hashCode() : 0; - } - - @Override - public String toString() { - return "Authority{" + - "name='" + name + '\'' + - "}"; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/domain/Book.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/domain/Book.java deleted file mode 100644 index 16771d9e0926..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/domain/Book.java +++ /dev/null @@ -1,153 +0,0 @@ -package com.baeldung.jhipster5.domain; - - - -import javax.persistence.*; -import javax.validation.constraints.*; - -import java.io.Serializable; -import java.time.LocalDate; -import java.util.Objects; - -/** - * A Book. - */ -@Entity -@Table(name = "book") -public class Book implements Serializable { - - private static final long serialVersionUID = 1L; - - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; - - @NotNull - @Column(name = "title", nullable = false) - private String title; - - @NotNull - @Column(name = "author", nullable = false) - private String author; - - @NotNull - @Column(name = "published", nullable = false) - private LocalDate published; - - @NotNull - @Min(value = 0) - @Column(name = "quantity", nullable = false) - private Integer quantity; - - @NotNull - @DecimalMin(value = "0") - @Column(name = "price", nullable = false) - private Double price; - - // jhipster-needle-entity-add-field - JHipster will add fields here, do not remove - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getTitle() { - return title; - } - - public Book title(String title) { - this.title = title; - return this; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getAuthor() { - return author; - } - - public Book author(String author) { - this.author = author; - return this; - } - - public void setAuthor(String author) { - this.author = author; - } - - public LocalDate getPublished() { - return published; - } - - public Book published(LocalDate published) { - this.published = published; - return this; - } - - public void setPublished(LocalDate published) { - this.published = published; - } - - public Integer getQuantity() { - return quantity; - } - - public Book quantity(Integer quantity) { - this.quantity = quantity; - return this; - } - - public void setQuantity(Integer quantity) { - this.quantity = quantity; - } - - public Double getPrice() { - return price; - } - - public Book price(Double price) { - this.price = price; - return this; - } - - public void setPrice(Double price) { - this.price = price; - } - // jhipster-needle-entity-add-getters-setters - JHipster will add getters and setters here, do not remove - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - Book book = (Book) o; - if (book.getId() == null || getId() == null) { - return false; - } - return Objects.equals(getId(), book.getId()); - } - - @Override - public int hashCode() { - return Objects.hashCode(getId()); - } - - @Override - public String toString() { - return "Book{" + - "id=" + getId() + - ", title='" + getTitle() + "'" + - ", author='" + getAuthor() + "'" + - ", published='" + getPublished() + "'" + - ", quantity=" + getQuantity() + - ", price=" + getPrice() + - "}"; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/domain/PersistentAuditEvent.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/domain/PersistentAuditEvent.java deleted file mode 100644 index 15e2eeda5a37..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/domain/PersistentAuditEvent.java +++ /dev/null @@ -1,109 +0,0 @@ -package com.baeldung.jhipster5.domain; - -import javax.persistence.*; -import javax.validation.constraints.NotNull; -import java.io.Serializable; -import java.time.Instant; -import java.util.HashMap; -import java.util.Objects; -import java.util.Map; - -/** - * Persist AuditEvent managed by the Spring Boot actuator. - * - * @see org.springframework.boot.actuate.audit.AuditEvent - */ -@Entity -@Table(name = "jhi_persistent_audit_event") -public class PersistentAuditEvent implements Serializable { - - private static final long serialVersionUID = 1L; - - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "event_id") - private Long id; - - @NotNull - @Column(nullable = false) - private String principal; - - @Column(name = "event_date") - private Instant auditEventDate; - - @Column(name = "event_type") - private String auditEventType; - - @ElementCollection - @MapKeyColumn(name = "name") - @Column(name = "value") - @CollectionTable(name = "jhi_persistent_audit_evt_data", joinColumns=@JoinColumn(name="event_id")) - private Map data = new HashMap<>(); - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getPrincipal() { - return principal; - } - - public void setPrincipal(String principal) { - this.principal = principal; - } - - public Instant getAuditEventDate() { - return auditEventDate; - } - - public void setAuditEventDate(Instant auditEventDate) { - this.auditEventDate = auditEventDate; - } - - public String getAuditEventType() { - return auditEventType; - } - - public void setAuditEventType(String auditEventType) { - this.auditEventType = auditEventType; - } - - public Map getData() { - return data; - } - - public void setData(Map data) { - this.data = data; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - - PersistentAuditEvent persistentAuditEvent = (PersistentAuditEvent) o; - return !(persistentAuditEvent.getId() == null || getId() == null) && Objects.equals(getId(), persistentAuditEvent.getId()); - } - - @Override - public int hashCode() { - return Objects.hashCode(getId()); - } - - @Override - public String toString() { - return "PersistentAuditEvent{" + - "principal='" + principal + '\'' + - ", auditEventDate=" + auditEventDate + - ", auditEventType='" + auditEventType + '\'' + - '}'; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/domain/User.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/domain/User.java deleted file mode 100644 index ff12d1ca9ced..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/domain/User.java +++ /dev/null @@ -1,231 +0,0 @@ -package com.baeldung.jhipster5.domain; - -import com.baeldung.jhipster5.config.Constants; - -import com.fasterxml.jackson.annotation.JsonIgnore; -import org.apache.commons.lang3.StringUtils; -import org.hibernate.annotations.BatchSize; -import javax.validation.constraints.Email; - -import javax.persistence.*; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Pattern; -import javax.validation.constraints.Size; -import java.io.Serializable; -import java.util.HashSet; -import java.util.Locale; -import java.util.Objects; -import java.util.Set; -import java.time.Instant; - -/** - * A user. - */ -@Entity -@Table(name = "jhi_user") - -public class User extends AbstractAuditingEntity implements Serializable { - - private static final long serialVersionUID = 1L; - - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; - - @NotNull - @Pattern(regexp = Constants.LOGIN_REGEX) - @Size(min = 1, max = 50) - @Column(length = 50, unique = true, nullable = false) - private String login; - - @JsonIgnore - @NotNull - @Size(min = 60, max = 60) - @Column(name = "password_hash", length = 60, nullable = false) - private String password; - - @Size(max = 50) - @Column(name = "first_name", length = 50) - private String firstName; - - @Size(max = 50) - @Column(name = "last_name", length = 50) - private String lastName; - - @Email - @Size(min = 5, max = 254) - @Column(length = 254, unique = true) - private String email; - - @NotNull - @Column(nullable = false) - private boolean activated = false; - - @Size(min = 2, max = 6) - @Column(name = "lang_key", length = 6) - private String langKey; - - @Size(max = 256) - @Column(name = "image_url", length = 256) - private String imageUrl; - - @Size(max = 20) - @Column(name = "activation_key", length = 20) - @JsonIgnore - private String activationKey; - - @Size(max = 20) - @Column(name = "reset_key", length = 20) - @JsonIgnore - private String resetKey; - - @Column(name = "reset_date") - private Instant resetDate = null; - - @JsonIgnore - @ManyToMany - @JoinTable( - name = "jhi_user_authority", - joinColumns = {@JoinColumn(name = "user_id", referencedColumnName = "id")}, - inverseJoinColumns = {@JoinColumn(name = "authority_name", referencedColumnName = "name")}) - - @BatchSize(size = 20) - private Set authorities = new HashSet<>(); - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getLogin() { - return login; - } - - // Lowercase the login before saving it in database - public void setLogin(String login) { - this.login = StringUtils.lowerCase(login, Locale.ENGLISH); - } - - public String getPassword() { - return password; - } - - public void setPassword(String password) { - this.password = password; - } - - 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; - } - - public String getImageUrl() { - return imageUrl; - } - - public void setImageUrl(String imageUrl) { - this.imageUrl = imageUrl; - } - - public boolean getActivated() { - return activated; - } - - public void setActivated(boolean activated) { - this.activated = activated; - } - - public String getActivationKey() { - return activationKey; - } - - public void setActivationKey(String activationKey) { - this.activationKey = activationKey; - } - - public String getResetKey() { - return resetKey; - } - - public void setResetKey(String resetKey) { - this.resetKey = resetKey; - } - - public Instant getResetDate() { - return resetDate; - } - - public void setResetDate(Instant resetDate) { - this.resetDate = resetDate; - } - - public String getLangKey() { - return langKey; - } - - public void setLangKey(String langKey) { - this.langKey = langKey; - } - - public Set getAuthorities() { - return authorities; - } - - public void setAuthorities(Set authorities) { - this.authorities = authorities; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - - User user = (User) o; - return !(user.getId() == null || getId() == null) && Objects.equals(getId(), user.getId()); - } - - @Override - public int hashCode() { - return Objects.hashCode(getId()); - } - - @Override - public String toString() { - return "User{" + - "login='" + login + '\'' + - ", firstName='" + firstName + '\'' + - ", lastName='" + lastName + '\'' + - ", email='" + email + '\'' + - ", imageUrl='" + imageUrl + '\'' + - ", activated='" + activated + '\'' + - ", langKey='" + langKey + '\'' + - ", activationKey='" + activationKey + '\'' + - "}"; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/domain/package-info.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/domain/package-info.java deleted file mode 100644 index eba92a598e67..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/domain/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * JPA domain objects. - */ -package com.baeldung.jhipster5.domain; diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/repository/AuthorityRepository.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/repository/AuthorityRepository.java deleted file mode 100644 index 310735eb5754..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/repository/AuthorityRepository.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.baeldung.jhipster5.repository; - -import com.baeldung.jhipster5.domain.Authority; - -import org.springframework.data.jpa.repository.JpaRepository; - -/** - * Spring Data JPA repository for the Authority entity. - */ -public interface AuthorityRepository extends JpaRepository { -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/repository/BookRepository.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/repository/BookRepository.java deleted file mode 100644 index ebd3117e655d..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/repository/BookRepository.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.baeldung.jhipster5.repository; - -import com.baeldung.jhipster5.domain.Book; -import org.springframework.data.jpa.repository.*; -import org.springframework.stereotype.Repository; - - -/** - * Spring Data repository for the Book entity. - */ -@SuppressWarnings("unused") -@Repository -public interface BookRepository extends JpaRepository { - -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/repository/CustomAuditEventRepository.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/repository/CustomAuditEventRepository.java deleted file mode 100644 index faa788ff5f35..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/repository/CustomAuditEventRepository.java +++ /dev/null @@ -1,89 +0,0 @@ -package com.baeldung.jhipster5.repository; - -import com.baeldung.jhipster5.config.Constants; -import com.baeldung.jhipster5.config.audit.AuditEventConverter; -import com.baeldung.jhipster5.domain.PersistentAuditEvent; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.boot.actuate.audit.AuditEvent; -import org.springframework.boot.actuate.audit.AuditEventRepository; -import org.springframework.stereotype.Repository; -import org.springframework.transaction.annotation.Propagation; -import org.springframework.transaction.annotation.Transactional; - -import java.time.Instant; -import java.util.*; - -/** - * An implementation of Spring Boot's AuditEventRepository. - */ -@Repository -public class CustomAuditEventRepository implements AuditEventRepository { - - private static final String AUTHORIZATION_FAILURE = "AUTHORIZATION_FAILURE"; - - /** - * Should be the same as in Liquibase migration. - */ - protected static final int EVENT_DATA_COLUMN_MAX_LENGTH = 255; - - private final PersistenceAuditEventRepository persistenceAuditEventRepository; - - private final AuditEventConverter auditEventConverter; - - private final Logger log = LoggerFactory.getLogger(getClass()); - - public CustomAuditEventRepository(PersistenceAuditEventRepository persistenceAuditEventRepository, - AuditEventConverter auditEventConverter) { - - this.persistenceAuditEventRepository = persistenceAuditEventRepository; - this.auditEventConverter = auditEventConverter; - } - - @Override - public List find(String principal, Instant after, String type) { - Iterable persistentAuditEvents = - persistenceAuditEventRepository.findByPrincipalAndAuditEventDateAfterAndAuditEventType(principal, after, type); - return auditEventConverter.convertToAuditEvent(persistentAuditEvents); - } - - @Override - @Transactional(propagation = Propagation.REQUIRES_NEW) - public void add(AuditEvent event) { - if (!AUTHORIZATION_FAILURE.equals(event.getType()) && - !Constants.ANONYMOUS_USER.equals(event.getPrincipal())) { - - PersistentAuditEvent persistentAuditEvent = new PersistentAuditEvent(); - persistentAuditEvent.setPrincipal(event.getPrincipal()); - persistentAuditEvent.setAuditEventType(event.getType()); - persistentAuditEvent.setAuditEventDate(event.getTimestamp()); - Map eventData = auditEventConverter.convertDataToStrings(event.getData()); - persistentAuditEvent.setData(truncate(eventData)); - persistenceAuditEventRepository.save(persistentAuditEvent); - } - } - - /** - * Truncate event data that might exceed column length. - */ - private Map truncate(Map data) { - Map results = new HashMap<>(); - - if (data != null) { - for (Map.Entry entry : data.entrySet()) { - String value = entry.getValue(); - if (value != null) { - int length = value.length(); - if (length > EVENT_DATA_COLUMN_MAX_LENGTH) { - value = value.substring(0, EVENT_DATA_COLUMN_MAX_LENGTH); - log.warn("Event data for {} too long ({}) has been truncated to {}. Consider increasing column width.", - entry.getKey(), length, EVENT_DATA_COLUMN_MAX_LENGTH); - } - } - results.put(entry.getKey(), value); - } - } - return results; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/repository/PersistenceAuditEventRepository.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/repository/PersistenceAuditEventRepository.java deleted file mode 100644 index 2eb6f3b84780..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/repository/PersistenceAuditEventRepository.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.baeldung.jhipster5.repository; - -import com.baeldung.jhipster5.domain.PersistentAuditEvent; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.Pageable; -import org.springframework.data.jpa.repository.JpaRepository; - -import java.time.Instant; -import java.util.List; - -/** - * Spring Data JPA repository for the PersistentAuditEvent entity. - */ -public interface PersistenceAuditEventRepository extends JpaRepository { - - List findByPrincipal(String principal); - - List findByAuditEventDateAfter(Instant after); - - List findByPrincipalAndAuditEventDateAfter(String principal, Instant after); - - List findByPrincipalAndAuditEventDateAfterAndAuditEventType(String principal, Instant after, String type); - - Page findAllByAuditEventDateBetween(Instant fromDate, Instant toDate, Pageable pageable); -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/repository/UserRepository.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/repository/UserRepository.java deleted file mode 100644 index 42a5588b223c..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/repository/UserRepository.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.baeldung.jhipster5.repository; - -import com.baeldung.jhipster5.domain.User; - -import org.springframework.data.domain.Page; -import org.springframework.data.domain.Pageable; -import org.springframework.data.jpa.repository.EntityGraph; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; -import java.util.List; -import java.util.Optional; -import java.time.Instant; - -/** - * Spring Data JPA repository for the User entity. - */ -@Repository -public interface UserRepository extends JpaRepository { - - Optional findOneByActivationKey(String activationKey); - - List findAllByActivatedIsFalseAndCreatedDateBefore(Instant dateTime); - - Optional findOneByResetKey(String resetKey); - - Optional findOneByEmailIgnoreCase(String email); - - Optional findOneByLogin(String login); - - @EntityGraph(attributePaths = "authorities") - Optional findOneWithAuthoritiesById(Long id); - - @EntityGraph(attributePaths = "authorities") - Optional findOneWithAuthoritiesByLogin(String login); - - @EntityGraph(attributePaths = "authorities") - Optional findOneWithAuthoritiesByEmail(String email); - - Page findAllByLoginNot(Pageable pageable, String login); -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/repository/package-info.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/repository/package-info.java deleted file mode 100644 index a5002eb2015d..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/repository/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * Spring Data JPA repositories. - */ -package com.baeldung.jhipster5.repository; diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/AuthoritiesConstants.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/AuthoritiesConstants.java deleted file mode 100644 index 6ecf44394f80..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/AuthoritiesConstants.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.baeldung.jhipster5.security; - -/** - * Constants for Spring Security authorities. - */ -public final class AuthoritiesConstants { - - public static final String ADMIN = "ROLE_ADMIN"; - - public static final String USER = "ROLE_USER"; - - public static final String ANONYMOUS = "ROLE_ANONYMOUS"; - - private AuthoritiesConstants() { - } -} 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 deleted file mode 100644 index 0a7dd66b2422..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/CustomAuthenticationManager.java +++ /dev/null @@ -1,126 +0,0 @@ -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 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/DomainUserDetailsService.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/DomainUserDetailsService.java deleted file mode 100644 index d0014096df29..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/DomainUserDetailsService.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.baeldung.jhipster5.security; - -import com.baeldung.jhipster5.domain.User; -import com.baeldung.jhipster5.repository.UserRepository; -import org.hibernate.validator.internal.constraintvalidators.hv.EmailValidator; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.core.authority.SimpleGrantedAuthority; -import org.springframework.security.core.userdetails.UserDetails; -import org.springframework.security.core.userdetails.UserDetailsService; -import org.springframework.security.core.userdetails.UsernameNotFoundException; -import org.springframework.stereotype.Component; -import org.springframework.transaction.annotation.Transactional; - -import java.util.*; -import java.util.stream.Collectors; - -/** - * Authenticate a user from the database. - */ -@Component("userDetailsService") -public class DomainUserDetailsService implements UserDetailsService { - - private final Logger log = LoggerFactory.getLogger(DomainUserDetailsService.class); - - private final UserRepository userRepository; - - public DomainUserDetailsService(UserRepository userRepository) { - this.userRepository = userRepository; - } - - @Override - @Transactional - public UserDetails loadUserByUsername(final String login) { - log.debug("Authenticating {}", login); - - if (new EmailValidator().isValid(login, null)) { - return userRepository.findOneWithAuthoritiesByEmail(login) - .map(user -> createSpringSecurityUser(login, user)) - .orElseThrow(() -> new UsernameNotFoundException("User with email " + login + " was not found in the database")); - } - - String lowercaseLogin = login.toLowerCase(Locale.ENGLISH); - return userRepository.findOneWithAuthoritiesByLogin(lowercaseLogin) - .map(user -> createSpringSecurityUser(lowercaseLogin, user)) - .orElseThrow(() -> new UsernameNotFoundException("User " + lowercaseLogin + " was not found in the database")); - - } - - private org.springframework.security.core.userdetails.User createSpringSecurityUser(String lowercaseLogin, User user) { - if (!user.getActivated()) { - throw new UserNotActivatedException("User " + lowercaseLogin + " was not activated"); - } - List grantedAuthorities = user.getAuthorities().stream() - .map(authority -> new SimpleGrantedAuthority(authority.getName())) - .collect(Collectors.toList()); - return new org.springframework.security.core.userdetails.User(user.getLogin(), - user.getPassword(), - grantedAuthorities); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/SecurityUtils.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/SecurityUtils.java deleted file mode 100644 index 462bb8abc90e..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/SecurityUtils.java +++ /dev/null @@ -1,76 +0,0 @@ -package com.baeldung.jhipster5.security; - -import org.springframework.security.core.context.SecurityContext; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.core.userdetails.UserDetails; - -import java.util.Optional; - -/** - * Utility class for Spring Security. - */ -public final class SecurityUtils { - - private SecurityUtils() { - } - - /** - * Get the login of the current user. - * - * @return the login of the current user - */ - public static Optional getCurrentUserLogin() { - SecurityContext securityContext = SecurityContextHolder.getContext(); - return Optional.ofNullable(securityContext.getAuthentication()) - .map(authentication -> { - if (authentication.getPrincipal() instanceof UserDetails) { - UserDetails springSecurityUser = (UserDetails) authentication.getPrincipal(); - return springSecurityUser.getUsername(); - } else if (authentication.getPrincipal() instanceof String) { - return (String) authentication.getPrincipal(); - } - return null; - }); - } - - /** - * Get the JWT of the current user. - * - * @return the JWT of the current user - */ - public static Optional getCurrentUserJWT() { - SecurityContext securityContext = SecurityContextHolder.getContext(); - return Optional.ofNullable(securityContext.getAuthentication()) - .filter(authentication -> authentication.getCredentials() instanceof String) - .map(authentication -> (String) authentication.getCredentials()); - } - - /** - * Check if a user is authenticated. - * - * @return true if the user is authenticated, false otherwise - */ - public static boolean isAuthenticated() { - SecurityContext securityContext = SecurityContextHolder.getContext(); - return Optional.ofNullable(securityContext.getAuthentication()) - .map(authentication -> authentication.getAuthorities().stream() - .noneMatch(grantedAuthority -> grantedAuthority.getAuthority().equals(AuthoritiesConstants.ANONYMOUS))) - .orElse(false); - } - - /** - * If the current user has a specific authority (security role). - *

- * The name of this method comes from the isUserInRole() method in the Servlet API - * - * @param authority the authority to check - * @return true if the current user has the authority, false otherwise - */ - public static boolean isCurrentUserInRole(String authority) { - SecurityContext securityContext = SecurityContextHolder.getContext(); - return Optional.ofNullable(securityContext.getAuthentication()) - .map(authentication -> authentication.getAuthorities().stream() - .anyMatch(grantedAuthority -> grantedAuthority.getAuthority().equals(authority))) - .orElse(false); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/SpringSecurityAuditorAware.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/SpringSecurityAuditorAware.java deleted file mode 100644 index c1d6405ae391..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/SpringSecurityAuditorAware.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.baeldung.jhipster5.security; - -import com.baeldung.jhipster5.config.Constants; - -import java.util.Optional; - -import org.springframework.data.domain.AuditorAware; -import org.springframework.stereotype.Component; - -/** - * Implementation of AuditorAware based on Spring Security. - */ -@Component -public class SpringSecurityAuditorAware implements AuditorAware { - - @Override - public Optional getCurrentAuditor() { - return Optional.of(SecurityUtils.getCurrentUserLogin().orElse(Constants.SYSTEM_ACCOUNT)); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/UserNotActivatedException.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/UserNotActivatedException.java deleted file mode 100644 index 4b2d91983c1f..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/UserNotActivatedException.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.baeldung.jhipster5.security; - -import org.springframework.security.core.AuthenticationException; - -/** - * This exception is thrown in case of a not activated user trying to authenticate. - */ -public class UserNotActivatedException extends AuthenticationException { - - private static final long serialVersionUID = 1L; - - public UserNotActivatedException(String message) { - super(message); - } - - public UserNotActivatedException(String message, Throwable t) { - super(message, t); - } -} 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 deleted file mode 100644 index f45c23fa39b9..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/dto/LoginRequest.java +++ /dev/null @@ -1,30 +0,0 @@ -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 deleted file mode 100644 index ad1fe37a2f18..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/dto/LoginResponse.java +++ /dev/null @@ -1,50 +0,0 @@ -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/java/com/baeldung/jhipster5/security/jwt/JWTConfigurer.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/jwt/JWTConfigurer.java deleted file mode 100644 index 944255e37dd4..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/jwt/JWTConfigurer.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.baeldung.jhipster5.security.jwt; - -import org.springframework.security.config.annotation.SecurityConfigurerAdapter; -import org.springframework.security.config.annotation.web.builders.HttpSecurity; -import org.springframework.security.web.DefaultSecurityFilterChain; -import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; - -public class JWTConfigurer extends SecurityConfigurerAdapter { - - private TokenProvider tokenProvider; - - public JWTConfigurer(TokenProvider tokenProvider) { - this.tokenProvider = tokenProvider; - } - - @Override - public void configure(HttpSecurity http) throws Exception { - JWTFilter customFilter = new JWTFilter(tokenProvider); - http.addFilterBefore(customFilter, UsernamePasswordAuthenticationFilter.class); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/jwt/JWTFilter.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/jwt/JWTFilter.java deleted file mode 100644 index cf1060282c3a..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/jwt/JWTFilter.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.baeldung.jhipster5.security.jwt; - -import org.springframework.security.core.Authentication; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.util.StringUtils; -import org.springframework.web.filter.GenericFilterBean; - -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import java.io.IOException; - -/** - * Filters incoming requests and installs a Spring Security principal if a header corresponding to a valid user is - * found. - */ -public class JWTFilter extends GenericFilterBean { - - public static final String AUTHORIZATION_HEADER = "Authorization"; - - private TokenProvider tokenProvider; - - public JWTFilter(TokenProvider tokenProvider) { - this.tokenProvider = tokenProvider; - } - - @Override - public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) - throws IOException, ServletException { - HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest; - String jwt = resolveToken(httpServletRequest); - if (StringUtils.hasText(jwt) && this.tokenProvider.validateToken(jwt)) { - Authentication authentication = this.tokenProvider.getAuthentication(jwt); - SecurityContextHolder.getContext().setAuthentication(authentication); - } - filterChain.doFilter(servletRequest, servletResponse); - } - - private String resolveToken(HttpServletRequest request){ - String bearerToken = request.getHeader(AUTHORIZATION_HEADER); - if (StringUtils.hasText(bearerToken) && bearerToken.startsWith("Bearer ")) { - return bearerToken.substring(7); - } - return null; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/jwt/TokenProvider.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/jwt/TokenProvider.java deleted file mode 100644 index 248d45e05088..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/jwt/TokenProvider.java +++ /dev/null @@ -1,119 +0,0 @@ -package com.baeldung.jhipster5.security.jwt; - -import java.nio.charset.StandardCharsets; -import java.security.Key; -import java.util.*; -import java.util.stream.Collectors; -import javax.annotation.PostConstruct; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.core.authority.SimpleGrantedAuthority; -import org.springframework.security.core.userdetails.User; -import org.springframework.stereotype.Component; -import org.springframework.util.StringUtils; - -import io.github.jhipster.config.JHipsterProperties; -import io.jsonwebtoken.*; -import io.jsonwebtoken.io.Decoders; -import io.jsonwebtoken.security.Keys; - -@Component -public class TokenProvider { - - private final Logger log = LoggerFactory.getLogger(TokenProvider.class); - - private static final String AUTHORITIES_KEY = "auth"; - - private Key key; - - private long tokenValidityInMilliseconds; - - private long tokenValidityInMillisecondsForRememberMe; - - private final JHipsterProperties jHipsterProperties; - - public TokenProvider(JHipsterProperties jHipsterProperties) { - this.jHipsterProperties = jHipsterProperties; - } - - @PostConstruct - public void init() { - byte[] keyBytes; - String secret = jHipsterProperties.getSecurity().getAuthentication().getJwt().getSecret(); - if (!StringUtils.isEmpty(secret)) { - log.warn("Warning: the JWT key used is not Base64-encoded. " + - "We recommend using the `jhipster.security.authentication.jwt.base64-secret` key for optimum security."); - keyBytes = secret.getBytes(StandardCharsets.UTF_8); - } else { - log.debug("Using a Base64-encoded JWT secret key"); - keyBytes = Decoders.BASE64.decode(jHipsterProperties.getSecurity().getAuthentication().getJwt().getBase64Secret()); - } - this.key = Keys.hmacShaKeyFor(keyBytes); - this.tokenValidityInMilliseconds = - 1000 * jHipsterProperties.getSecurity().getAuthentication().getJwt().getTokenValidityInSeconds(); - this.tokenValidityInMillisecondsForRememberMe = - 1000 * jHipsterProperties.getSecurity().getAuthentication().getJwt() - .getTokenValidityInSecondsForRememberMe(); - } - - public String createToken(Authentication authentication, boolean rememberMe) { - String authorities = authentication.getAuthorities().stream() - .map(GrantedAuthority::getAuthority) - .collect(Collectors.joining(",")); - - long now = (new Date()).getTime(); - Date validity; - if (rememberMe) { - validity = new Date(now + this.tokenValidityInMillisecondsForRememberMe); - } else { - validity = new Date(now + this.tokenValidityInMilliseconds); - } - - return Jwts.builder() - .setSubject(authentication.getName()) - .claim(AUTHORITIES_KEY, authorities) - .signWith(key, SignatureAlgorithm.HS512) - .setExpiration(validity) - .compact(); - } - - public Authentication getAuthentication(String token) { - Claims claims = Jwts.parser() - .setSigningKey(key) - .parseClaimsJws(token) - .getBody(); - - Collection authorities = - Arrays.stream(claims.get(AUTHORITIES_KEY).toString().split(",")) - .map(SimpleGrantedAuthority::new) - .collect(Collectors.toList()); - - User principal = new User(claims.getSubject(), "", authorities); - - return new UsernamePasswordAuthenticationToken(principal, token, authorities); - } - - public boolean validateToken(String authToken) { - try { - Jwts.parser().setSigningKey(key).parseClaimsJws(authToken); - return true; - } catch (io.jsonwebtoken.security.SecurityException | MalformedJwtException e) { - log.info("Invalid JWT signature."); - log.trace("Invalid JWT signature trace: {}", e); - } catch (ExpiredJwtException e) { - log.info("Expired JWT token."); - log.trace("Expired JWT token trace: {}", e); - } catch (UnsupportedJwtException e) { - log.info("Unsupported JWT token."); - log.trace("Unsupported JWT token trace: {}", e); - } catch (IllegalArgumentException e) { - log.info("JWT token compact of handler are invalid."); - log.trace("JWT token compact of handler are invalid trace: {}", e); - } - return false; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/package-info.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/package-info.java deleted file mode 100644 index 4759050c564f..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * Spring Security configuration. - */ -package com.baeldung.jhipster5.security; diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/AuditEventService.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/AuditEventService.java deleted file mode 100644 index 852eb951c91b..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/AuditEventService.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.baeldung.jhipster5.service; - -import com.baeldung.jhipster5.config.audit.AuditEventConverter; -import com.baeldung.jhipster5.repository.PersistenceAuditEventRepository; -import org.springframework.boot.actuate.audit.AuditEvent; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.Pageable; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.time.Instant; -import java.util.Optional; - -/** - * Service for managing audit events. - *

- * This is the default implementation to support SpringBoot Actuator AuditEventRepository - */ -@Service -@Transactional -public class AuditEventService { - - private final PersistenceAuditEventRepository persistenceAuditEventRepository; - - private final AuditEventConverter auditEventConverter; - - public AuditEventService( - PersistenceAuditEventRepository persistenceAuditEventRepository, - AuditEventConverter auditEventConverter) { - - this.persistenceAuditEventRepository = persistenceAuditEventRepository; - this.auditEventConverter = auditEventConverter; - } - - public Page findAll(Pageable pageable) { - return persistenceAuditEventRepository.findAll(pageable) - .map(auditEventConverter::convertToAuditEvent); - } - - public Page findByDates(Instant fromDate, Instant toDate, Pageable pageable) { - return persistenceAuditEventRepository.findAllByAuditEventDateBetween(fromDate, toDate, pageable) - .map(auditEventConverter::convertToAuditEvent); - } - - public Optional find(Long id) { - return Optional.ofNullable(persistenceAuditEventRepository.findById(id)) - .filter(Optional::isPresent) - .map(Optional::get) - .map(auditEventConverter::convertToAuditEvent); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/BookService.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/BookService.java deleted file mode 100644 index 6422d1a4249f..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/BookService.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.baeldung.jhipster5.service; - -import com.baeldung.jhipster5.service.dto.BookDTO; - -import java.util.List; -import java.util.Optional; - -/** - * Service Interface for managing Book. - */ -public interface BookService { - - /** - * Save a book. - * - * @param bookDTO the entity to save - * @return the persisted entity - */ - BookDTO save(BookDTO bookDTO); - - /** - * Get all the books. - * - * @return the list of entities - */ - List findAll(); - - - /** - * Get the "id" book. - * - * @param id the id of the entity - * @return the entity - */ - Optional findOne(Long id); - - /** - * Delete the "id" book. - * - * @param id the id of the entity - */ - void delete(Long id); - - /** - * Simulates purchasing a book by reducing the stock of a book by 1. - * @param id the id of the book - * @return Updated BookDTO, empty if not found, or throws exception if an error occurs. - */ - Optional purchase(Long id); -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/MailService.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/MailService.java deleted file mode 100644 index b15a7faff29f..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/MailService.java +++ /dev/null @@ -1,105 +0,0 @@ -package com.baeldung.jhipster5.service; - -import com.baeldung.jhipster5.domain.User; - -import io.github.jhipster.config.JHipsterProperties; - -import java.nio.charset.StandardCharsets; -import java.util.Locale; -import javax.mail.internet.MimeMessage; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.context.MessageSource; -import org.springframework.mail.javamail.JavaMailSender; -import org.springframework.mail.javamail.MimeMessageHelper; -import org.springframework.scheduling.annotation.Async; -import org.springframework.stereotype.Service; -import org.thymeleaf.context.Context; -import org.thymeleaf.spring5.SpringTemplateEngine; - -/** - * Service for sending emails. - *

- * We use the @Async annotation to send emails asynchronously. - */ -@Service -public class MailService { - - private final Logger log = LoggerFactory.getLogger(MailService.class); - - private static final String USER = "user"; - - private static final String BASE_URL = "baseUrl"; - - private final JHipsterProperties jHipsterProperties; - - private final JavaMailSender javaMailSender; - - private final MessageSource messageSource; - - private final SpringTemplateEngine templateEngine; - - public MailService(JHipsterProperties jHipsterProperties, JavaMailSender javaMailSender, - MessageSource messageSource, SpringTemplateEngine templateEngine) { - - this.jHipsterProperties = jHipsterProperties; - this.javaMailSender = javaMailSender; - this.messageSource = messageSource; - this.templateEngine = templateEngine; - } - - @Async - public void sendEmail(String to, String subject, String content, boolean isMultipart, boolean isHtml) { - log.debug("Send email[multipart '{}' and html '{}'] to '{}' with subject '{}' and content={}", - isMultipart, isHtml, to, subject, content); - - // Prepare message using a Spring helper - MimeMessage mimeMessage = javaMailSender.createMimeMessage(); - try { - MimeMessageHelper message = new MimeMessageHelper(mimeMessage, isMultipart, StandardCharsets.UTF_8.name()); - message.setTo(to); - message.setFrom(jHipsterProperties.getMail().getFrom()); - message.setSubject(subject); - message.setText(content, isHtml); - javaMailSender.send(mimeMessage); - log.debug("Sent email to User '{}'", to); - } catch (Exception e) { - if (log.isDebugEnabled()) { - log.warn("Email could not be sent to user '{}'", to, e); - } else { - log.warn("Email could not be sent to user '{}': {}", to, e.getMessage()); - } - } - } - - @Async - public void sendEmailFromTemplate(User user, String templateName, String titleKey) { - Locale locale = Locale.forLanguageTag(user.getLangKey()); - Context context = new Context(locale); - context.setVariable(USER, user); - context.setVariable(BASE_URL, jHipsterProperties.getMail().getBaseUrl()); - String content = templateEngine.process(templateName, context); - String subject = messageSource.getMessage(titleKey, null, locale); - sendEmail(user.getEmail(), subject, content, false, true); - - } - - @Async - public void sendActivationEmail(User user) { - log.debug("Sending activation email to '{}'", user.getEmail()); - sendEmailFromTemplate(user, "mail/activationEmail", "email.activation.title"); - } - - @Async - public void sendCreationEmail(User user) { - log.debug("Sending creation email to '{}'", user.getEmail()); - sendEmailFromTemplate(user, "mail/creationEmail", "email.activation.title"); - } - - @Async - public void sendPasswordResetMail(User user) { - log.debug("Sending password reset email to '{}'", user.getEmail()); - sendEmailFromTemplate(user, "mail/passwordResetEmail", "email.reset.title"); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/UserService.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/UserService.java deleted file mode 100644 index 82d028f3ca80..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/UserService.java +++ /dev/null @@ -1,273 +0,0 @@ -package com.baeldung.jhipster5.service; - -import com.baeldung.jhipster5.config.Constants; -import com.baeldung.jhipster5.domain.Authority; -import com.baeldung.jhipster5.domain.User; -import com.baeldung.jhipster5.repository.AuthorityRepository; -import com.baeldung.jhipster5.repository.UserRepository; -import com.baeldung.jhipster5.security.AuthoritiesConstants; -import com.baeldung.jhipster5.security.SecurityUtils; -import com.baeldung.jhipster5.service.dto.UserDTO; -import com.baeldung.jhipster5.service.util.RandomUtil; -import com.baeldung.jhipster5.web.rest.errors.*; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.Pageable; -import org.springframework.scheduling.annotation.Scheduled; -import org.springframework.security.crypto.password.PasswordEncoder; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.time.Instant; -import java.time.temporal.ChronoUnit; -import java.util.*; -import java.util.stream.Collectors; - -/** - * Service class for managing users. - */ -@Service -@Transactional -public class UserService { - - private final Logger log = LoggerFactory.getLogger(UserService.class); - - private final UserRepository userRepository; - - private final PasswordEncoder passwordEncoder; - - private final AuthorityRepository authorityRepository; - - public UserService(UserRepository userRepository, PasswordEncoder passwordEncoder, AuthorityRepository authorityRepository) { - this.userRepository = userRepository; - this.passwordEncoder = passwordEncoder; - this.authorityRepository = authorityRepository; - } - - public Optional activateRegistration(String key) { - log.debug("Activating user for activation key {}", key); - return userRepository.findOneByActivationKey(key) - .map(user -> { - // activate given user for the registration key. - user.setActivated(true); - user.setActivationKey(null); - log.debug("Activated user: {}", user); - return user; - }); - } - - public Optional completePasswordReset(String newPassword, String key) { - log.debug("Reset user password for reset key {}", key); - return userRepository.findOneByResetKey(key) - .filter(user -> user.getResetDate().isAfter(Instant.now().minusSeconds(86400))) - .map(user -> { - user.setPassword(passwordEncoder.encode(newPassword)); - user.setResetKey(null); - user.setResetDate(null); - return user; - }); - } - - public Optional requestPasswordReset(String mail) { - return userRepository.findOneByEmailIgnoreCase(mail) - .filter(User::getActivated) - .map(user -> { - user.setResetKey(RandomUtil.generateResetKey()); - user.setResetDate(Instant.now()); - return user; - }); - } - - public User registerUser(UserDTO userDTO, String password) { - userRepository.findOneByLogin(userDTO.getLogin().toLowerCase()).ifPresent(existingUser -> { - boolean removed = removeNonActivatedUser(existingUser); - if (!removed) { - throw new LoginAlreadyUsedException(); - } - }); - userRepository.findOneByEmailIgnoreCase(userDTO.getEmail()).ifPresent(existingUser -> { - boolean removed = removeNonActivatedUser(existingUser); - if (!removed) { - throw new EmailAlreadyUsedException(); - } - }); - User newUser = new User(); - String encryptedPassword = passwordEncoder.encode(password); - newUser.setLogin(userDTO.getLogin().toLowerCase()); - // new user gets initially a generated password - newUser.setPassword(encryptedPassword); - newUser.setFirstName(userDTO.getFirstName()); - newUser.setLastName(userDTO.getLastName()); - newUser.setEmail(userDTO.getEmail().toLowerCase()); - newUser.setImageUrl(userDTO.getImageUrl()); - newUser.setLangKey(userDTO.getLangKey()); - // new user is not active - newUser.setActivated(false); - // new user gets registration key - newUser.setActivationKey(RandomUtil.generateActivationKey()); - Set authorities = new HashSet<>(); - authorityRepository.findById(AuthoritiesConstants.USER).ifPresent(authorities::add); - newUser.setAuthorities(authorities); - userRepository.save(newUser); - log.debug("Created Information for User: {}", newUser); - return newUser; - } - - private boolean removeNonActivatedUser(User existingUser){ - if (existingUser.getActivated()) { - return false; - } - userRepository.delete(existingUser); - userRepository.flush(); - return true; - } - - public User createUser(UserDTO userDTO) { - User user = new User(); - user.setLogin(userDTO.getLogin().toLowerCase()); - user.setFirstName(userDTO.getFirstName()); - user.setLastName(userDTO.getLastName()); - user.setEmail(userDTO.getEmail().toLowerCase()); - user.setImageUrl(userDTO.getImageUrl()); - if (userDTO.getLangKey() == null) { - user.setLangKey(Constants.DEFAULT_LANGUAGE); // default language - } else { - user.setLangKey(userDTO.getLangKey()); - } - String encryptedPassword = passwordEncoder.encode(RandomUtil.generatePassword()); - user.setPassword(encryptedPassword); - user.setResetKey(RandomUtil.generateResetKey()); - user.setResetDate(Instant.now()); - user.setActivated(true); - if (userDTO.getAuthorities() != null) { - Set authorities = userDTO.getAuthorities().stream() - .map(authorityRepository::findById) - .filter(Optional::isPresent) - .map(Optional::get) - .collect(Collectors.toSet()); - user.setAuthorities(authorities); - } - userRepository.save(user); - log.debug("Created Information for User: {}", user); - return user; - } - - /** - * Update basic information (first name, last name, email, language) for the current user. - * - * @param firstName first name of user - * @param lastName last name of user - * @param email email id of user - * @param langKey language key - * @param imageUrl image URL of user - */ - public void updateUser(String firstName, String lastName, String email, String langKey, String imageUrl) { - SecurityUtils.getCurrentUserLogin() - .flatMap(userRepository::findOneByLogin) - .ifPresent(user -> { - user.setFirstName(firstName); - user.setLastName(lastName); - user.setEmail(email.toLowerCase()); - user.setLangKey(langKey); - user.setImageUrl(imageUrl); - log.debug("Changed Information for User: {}", user); - }); - } - - /** - * Update all information for a specific user, and return the modified user. - * - * @param userDTO user to update - * @return updated user - */ - public Optional updateUser(UserDTO userDTO) { - return Optional.of(userRepository - .findById(userDTO.getId())) - .filter(Optional::isPresent) - .map(Optional::get) - .map(user -> { - user.setLogin(userDTO.getLogin().toLowerCase()); - user.setFirstName(userDTO.getFirstName()); - user.setLastName(userDTO.getLastName()); - user.setEmail(userDTO.getEmail().toLowerCase()); - user.setImageUrl(userDTO.getImageUrl()); - user.setActivated(userDTO.isActivated()); - user.setLangKey(userDTO.getLangKey()); - Set managedAuthorities = user.getAuthorities(); - managedAuthorities.clear(); - userDTO.getAuthorities().stream() - .map(authorityRepository::findById) - .filter(Optional::isPresent) - .map(Optional::get) - .forEach(managedAuthorities::add); - log.debug("Changed Information for User: {}", user); - return user; - }) - .map(UserDTO::new); - } - - public void deleteUser(String login) { - userRepository.findOneByLogin(login).ifPresent(user -> { - userRepository.delete(user); - log.debug("Deleted User: {}", user); - }); - } - - public void changePassword(String currentClearTextPassword, String newPassword) { - SecurityUtils.getCurrentUserLogin() - .flatMap(userRepository::findOneByLogin) - .ifPresent(user -> { - String currentEncryptedPassword = user.getPassword(); - if (!passwordEncoder.matches(currentClearTextPassword, currentEncryptedPassword)) { - throw new InvalidPasswordException(); - } - String encryptedPassword = passwordEncoder.encode(newPassword); - user.setPassword(encryptedPassword); - log.debug("Changed password for User: {}", user); - }); - } - - @Transactional(readOnly = true) - public Page getAllManagedUsers(Pageable pageable) { - return userRepository.findAllByLoginNot(pageable, Constants.ANONYMOUS_USER).map(UserDTO::new); - } - - @Transactional(readOnly = true) - public Optional getUserWithAuthoritiesByLogin(String login) { - return userRepository.findOneWithAuthoritiesByLogin(login); - } - - @Transactional(readOnly = true) - public Optional getUserWithAuthorities(Long id) { - return userRepository.findOneWithAuthoritiesById(id); - } - - @Transactional(readOnly = true) - public Optional getUserWithAuthorities() { - return SecurityUtils.getCurrentUserLogin().flatMap(userRepository::findOneWithAuthoritiesByLogin); - } - - /** - * Not activated users should be automatically deleted after 3 days. - *

- * This is scheduled to get fired everyday, at 01:00 (am). - */ - @Scheduled(cron = "0 0 1 * * ?") - public void removeNotActivatedUsers() { - userRepository - .findAllByActivatedIsFalseAndCreatedDateBefore(Instant.now().minus(3, ChronoUnit.DAYS)) - .forEach(user -> { - log.debug("Deleting not activated user {}", user.getLogin()); - userRepository.delete(user); - }); - } - - /** - * @return a list of all the authorities - */ - public List getAuthorities() { - return authorityRepository.findAll().stream().map(Authority::getName).collect(Collectors.toList()); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/dto/BookDTO.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/dto/BookDTO.java deleted file mode 100644 index 5aa550e9893c..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/dto/BookDTO.java +++ /dev/null @@ -1,112 +0,0 @@ -package com.baeldung.jhipster5.service.dto; -import java.time.LocalDate; -import javax.validation.constraints.*; -import java.io.Serializable; -import java.util.Objects; - -/** - * A DTO for the Book entity. - */ -public class BookDTO implements Serializable { - - private Long id; - - @NotNull - private String title; - - @NotNull - private String author; - - @NotNull - private LocalDate published; - - @NotNull - @Min(value = 0) - private Integer quantity; - - @NotNull - @DecimalMin(value = "0") - private Double price; - - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getTitle() { - return title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getAuthor() { - return author; - } - - public void setAuthor(String author) { - this.author = author; - } - - public LocalDate getPublished() { - return published; - } - - public void setPublished(LocalDate published) { - this.published = published; - } - - public Integer getQuantity() { - return quantity; - } - - public void setQuantity(Integer quantity) { - this.quantity = quantity; - } - - public Double getPrice() { - return price; - } - - public void setPrice(Double price) { - this.price = price; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - - BookDTO bookDTO = (BookDTO) o; - if (bookDTO.getId() == null || getId() == null) { - return false; - } - return Objects.equals(getId(), bookDTO.getId()); - } - - @Override - public int hashCode() { - return Objects.hashCode(getId()); - } - - @Override - public String toString() { - return "BookDTO{" + - "id=" + getId() + - ", title='" + getTitle() + "'" + - ", author='" + getAuthor() + "'" + - ", published='" + getPublished() + "'" + - ", quantity=" + getQuantity() + - ", price=" + getPrice() + - "}"; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/dto/PasswordChangeDTO.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/dto/PasswordChangeDTO.java deleted file mode 100644 index 0711c97f446e..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/dto/PasswordChangeDTO.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.baeldung.jhipster5.service.dto; - -/** - * A DTO representing a password change required data - current and new password. - */ -public class PasswordChangeDTO { - private String currentPassword; - private String newPassword; - - public PasswordChangeDTO() { - // Empty constructor needed for Jackson. - } - - public PasswordChangeDTO(String currentPassword, String newPassword) { - this.currentPassword = currentPassword; - this.newPassword = newPassword; - } - - public String getCurrentPassword() { - - return currentPassword; - } - - public void setCurrentPassword(String currentPassword) { - this.currentPassword = currentPassword; - } - - public String getNewPassword() { - return newPassword; - } - - public void setNewPassword(String newPassword) { - this.newPassword = newPassword; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/dto/UserDTO.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/dto/UserDTO.java deleted file mode 100644 index 9142b3825ed8..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/dto/UserDTO.java +++ /dev/null @@ -1,199 +0,0 @@ -package com.baeldung.jhipster5.service.dto; - -import com.baeldung.jhipster5.config.Constants; - -import com.baeldung.jhipster5.domain.Authority; -import com.baeldung.jhipster5.domain.User; - -import javax.validation.constraints.Email; -import javax.validation.constraints.NotBlank; - -import javax.validation.constraints.*; -import java.time.Instant; -import java.util.Set; -import java.util.stream.Collectors; - -/** - * A DTO representing a user, with his authorities. - */ -public class UserDTO { - - private Long id; - - @NotBlank - @Pattern(regexp = Constants.LOGIN_REGEX) - @Size(min = 1, max = 50) - private String login; - - @Size(max = 50) - private String firstName; - - @Size(max = 50) - private String lastName; - - @Email - @Size(min = 5, max = 254) - private String email; - - @Size(max = 256) - private String imageUrl; - - private boolean activated = false; - - @Size(min = 2, max = 6) - private String langKey; - - private String createdBy; - - private Instant createdDate; - - private String lastModifiedBy; - - private Instant lastModifiedDate; - - private Set authorities; - - public UserDTO() { - // Empty constructor needed for Jackson. - } - - public UserDTO(User user) { - this.id = user.getId(); - this.login = user.getLogin(); - this.firstName = user.getFirstName(); - this.lastName = user.getLastName(); - this.email = user.getEmail(); - this.activated = user.getActivated(); - this.imageUrl = user.getImageUrl(); - this.langKey = user.getLangKey(); - this.createdBy = user.getCreatedBy(); - this.createdDate = user.getCreatedDate(); - this.lastModifiedBy = user.getLastModifiedBy(); - this.lastModifiedDate = user.getLastModifiedDate(); - this.authorities = user.getAuthorities().stream() - .map(Authority::getName) - .collect(Collectors.toSet()); - } - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getLogin() { - return login; - } - - public void setLogin(String login) { - this.login = login; - } - - 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; - } - - public String getImageUrl() { - return imageUrl; - } - - public void setImageUrl(String imageUrl) { - this.imageUrl = imageUrl; - } - - public boolean isActivated() { - return activated; - } - - public void setActivated(boolean activated) { - this.activated = activated; - } - - public String getLangKey() { - return langKey; - } - - public void setLangKey(String langKey) { - this.langKey = langKey; - } - - public String getCreatedBy() { - return createdBy; - } - - public void setCreatedBy(String createdBy) { - this.createdBy = createdBy; - } - - public Instant getCreatedDate() { - return createdDate; - } - - public void setCreatedDate(Instant createdDate) { - this.createdDate = createdDate; - } - - public String getLastModifiedBy() { - return lastModifiedBy; - } - - public void setLastModifiedBy(String lastModifiedBy) { - this.lastModifiedBy = lastModifiedBy; - } - - public Instant getLastModifiedDate() { - return lastModifiedDate; - } - - public void setLastModifiedDate(Instant lastModifiedDate) { - this.lastModifiedDate = lastModifiedDate; - } - - public Set getAuthorities() { - return authorities; - } - - public void setAuthorities(Set authorities) { - this.authorities = authorities; - } - - @Override - public String toString() { - return "UserDTO{" + - "login='" + login + '\'' + - ", firstName='" + firstName + '\'' + - ", lastName='" + lastName + '\'' + - ", email='" + email + '\'' + - ", imageUrl='" + imageUrl + '\'' + - ", activated=" + activated + - ", langKey='" + langKey + '\'' + - ", createdBy=" + createdBy + - ", createdDate=" + createdDate + - ", lastModifiedBy='" + lastModifiedBy + '\'' + - ", lastModifiedDate=" + lastModifiedDate + - ", authorities=" + authorities + - "}"; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/dto/package-info.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/dto/package-info.java deleted file mode 100644 index 87951796ead0..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/dto/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * Data Transfer Objects. - */ -package com.baeldung.jhipster5.service.dto; diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/impl/BookServiceImpl.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/impl/BookServiceImpl.java deleted file mode 100644 index 23cd59584c00..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/impl/BookServiceImpl.java +++ /dev/null @@ -1,109 +0,0 @@ -package com.baeldung.jhipster5.service.impl; - -import com.baeldung.jhipster5.service.BookService; -import com.baeldung.jhipster5.domain.Book; -import com.baeldung.jhipster5.repository.BookRepository; -import com.baeldung.jhipster5.service.dto.BookDTO; -import com.baeldung.jhipster5.service.mapper.BookMapper; -import com.baeldung.jhipster5.web.rest.errors.BadRequestAlertException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.LinkedList; -import java.util.List; -import java.util.Optional; -import java.util.stream.Collectors; - -/** - * Service Implementation for managing Book. - */ -@Service -@Transactional -public class BookServiceImpl implements BookService { - - private final Logger log = LoggerFactory.getLogger(BookServiceImpl.class); - - private final BookRepository bookRepository; - - private final BookMapper bookMapper; - - public BookServiceImpl(BookRepository bookRepository, BookMapper bookMapper) { - this.bookRepository = bookRepository; - this.bookMapper = bookMapper; - } - - /** - * Save a book. - * - * @param bookDTO the entity to save - * @return the persisted entity - */ - @Override - public BookDTO save(BookDTO bookDTO) { - log.debug("Request to save Book : {}", bookDTO); - Book book = bookMapper.toEntity(bookDTO); - book = bookRepository.save(book); - return bookMapper.toDto(book); - } - - /** - * Get all the books. - * - * @return the list of entities - */ - @Override - @Transactional(readOnly = true) - public List findAll() { - log.debug("Request to get all Books"); - return bookRepository.findAll().stream() - .map(bookMapper::toDto) - .collect(Collectors.toCollection(LinkedList::new)); - } - - - /** - * Get one book by id. - * - * @param id the id of the entity - * @return the entity - */ - @Override - @Transactional(readOnly = true) - public Optional findOne(Long id) { - log.debug("Request to get Book : {}", id); - return bookRepository.findById(id) - .map(bookMapper::toDto); - } - - /** - * Delete the book by id. - * - * @param id the id of the entity - */ - @Override - public void delete(Long id) { - log.debug("Request to delete Book : {}", id); - bookRepository.deleteById(id); - } - - @Override - public Optional purchase(Long id) { - Optional bookDTO = findOne(id); - if(bookDTO.isPresent()) { - int quantity = bookDTO.get().getQuantity(); - if(quantity > 0) { - bookDTO.get().setQuantity(quantity - 1); - Book book = bookMapper.toEntity(bookDTO.get()); - book = bookRepository.save(book); - return bookDTO; - } - else { - throw new BadRequestAlertException("Book is not in stock", "book", "notinstock"); - } - } - return Optional.empty(); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/mapper/BookMapper.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/mapper/BookMapper.java deleted file mode 100644 index cd24c7088e9f..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/mapper/BookMapper.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.baeldung.jhipster5.service.mapper; - -import com.baeldung.jhipster5.domain.*; -import com.baeldung.jhipster5.service.dto.BookDTO; - -import org.mapstruct.*; - -/** - * Mapper for the entity Book and its DTO BookDTO. - */ -@Mapper(componentModel = "spring", uses = {}) -public interface BookMapper extends EntityMapper { - - - - default Book fromId(Long id) { - if (id == null) { - return null; - } - Book book = new Book(); - book.setId(id); - return book; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/mapper/EntityMapper.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/mapper/EntityMapper.java deleted file mode 100644 index 68af78179dc4..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/mapper/EntityMapper.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.baeldung.jhipster5.service.mapper; - -import java.util.List; - -/** - * Contract for a generic dto to entity mapper. - * - * @param - DTO type parameter. - * @param - Entity type parameter. - */ - -public interface EntityMapper { - - E toEntity(D dto); - - D toDto(E entity); - - List toEntity(List dtoList); - - List toDto(List entityList); -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/mapper/UserMapper.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/mapper/UserMapper.java deleted file mode 100644 index 485c03813e85..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/mapper/UserMapper.java +++ /dev/null @@ -1,81 +0,0 @@ -package com.baeldung.jhipster5.service.mapper; - -import com.baeldung.jhipster5.domain.Authority; -import com.baeldung.jhipster5.domain.User; -import com.baeldung.jhipster5.service.dto.UserDTO; - -import org.springframework.stereotype.Service; - -import java.util.*; -import java.util.stream.Collectors; - -/** - * Mapper for the entity User and its DTO called UserDTO. - * - * Normal mappers are generated using MapStruct, this one is hand-coded as MapStruct - * support is still in beta, and requires a manual step with an IDE. - */ -@Service -public class UserMapper { - - public List usersToUserDTOs(List users) { - return users.stream() - .filter(Objects::nonNull) - .map(this::userToUserDTO) - .collect(Collectors.toList()); - } - - public UserDTO userToUserDTO(User user) { - return new UserDTO(user); - } - - public List userDTOsToUsers(List userDTOs) { - return userDTOs.stream() - .filter(Objects::nonNull) - .map(this::userDTOToUser) - .collect(Collectors.toList()); - } - - public User userDTOToUser(UserDTO userDTO) { - if (userDTO == null) { - return null; - } else { - User user = new User(); - user.setId(userDTO.getId()); - user.setLogin(userDTO.getLogin()); - user.setFirstName(userDTO.getFirstName()); - user.setLastName(userDTO.getLastName()); - user.setEmail(userDTO.getEmail()); - user.setImageUrl(userDTO.getImageUrl()); - user.setActivated(userDTO.isActivated()); - user.setLangKey(userDTO.getLangKey()); - Set authorities = this.authoritiesFromStrings(userDTO.getAuthorities()); - user.setAuthorities(authorities); - return user; - } - } - - - private Set authoritiesFromStrings(Set authoritiesAsString) { - Set authorities = new HashSet<>(); - - if(authoritiesAsString != null){ - authorities = authoritiesAsString.stream().map(string -> { - Authority auth = new Authority(); - auth.setName(string); - return auth; - }).collect(Collectors.toSet()); - } - - return authorities; - } - - public User userFromId(Long id) { - if (id == null) { - return null; - } - User user = new User(); - user.setId(id); - return user; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/mapper/package-info.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/mapper/package-info.java deleted file mode 100644 index 7d402321e7d5..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/mapper/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * MapStruct mappers for mapping domain objects and Data Transfer Objects. - */ -package com.baeldung.jhipster5.service.mapper; diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/package-info.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/package-info.java deleted file mode 100644 index a54ed5cca0fd..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * Service layer beans. - */ -package com.baeldung.jhipster5.service; diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/util/RandomUtil.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/util/RandomUtil.java deleted file mode 100644 index 97e4d9c6728c..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/service/util/RandomUtil.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.baeldung.jhipster5.service.util; - -import org.apache.commons.lang3.RandomStringUtils; - -/** - * Utility class for generating random Strings. - */ -public final class RandomUtil { - - private static final int DEF_COUNT = 20; - - private RandomUtil() { - } - - /** - * Generate a password. - * - * @return the generated password - */ - public static String generatePassword() { - return RandomStringUtils.randomAlphanumeric(DEF_COUNT); - } - - /** - * Generate an activation key. - * - * @return the generated activation key - */ - public static String generateActivationKey() { - return RandomStringUtils.randomNumeric(DEF_COUNT); - } - - /** - * Generate a reset key. - * - * @return the generated reset key - */ - public static String generateResetKey() { - return RandomStringUtils.randomNumeric(DEF_COUNT); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/AccountResource.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/AccountResource.java deleted file mode 100644 index 2109e93999db..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/AccountResource.java +++ /dev/null @@ -1,179 +0,0 @@ -package com.baeldung.jhipster5.web.rest; - - -import com.baeldung.jhipster5.domain.User; -import com.baeldung.jhipster5.repository.UserRepository; -import com.baeldung.jhipster5.security.SecurityUtils; -import com.baeldung.jhipster5.service.MailService; -import com.baeldung.jhipster5.service.UserService; -import com.baeldung.jhipster5.service.dto.PasswordChangeDTO; -import com.baeldung.jhipster5.service.dto.UserDTO; -import com.baeldung.jhipster5.web.rest.errors.*; -import com.baeldung.jhipster5.web.rest.vm.KeyAndPasswordVM; -import com.baeldung.jhipster5.web.rest.vm.ManagedUserVM; - -import org.apache.commons.lang3.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.*; - -import javax.servlet.http.HttpServletRequest; -import javax.validation.Valid; -import java.util.*; - -/** - * REST controller for managing the current user's account. - */ -@RestController -@RequestMapping("/api") -public class AccountResource { - - private final Logger log = LoggerFactory.getLogger(AccountResource.class); - - private final UserRepository userRepository; - - private final UserService userService; - - private final MailService mailService; - - public AccountResource(UserRepository userRepository, UserService userService, MailService mailService) { - - this.userRepository = userRepository; - this.userService = userService; - this.mailService = mailService; - } - - /** - * POST /register : register the user. - * - * @param managedUserVM the managed user View Model - * @throws InvalidPasswordException 400 (Bad Request) if the password is incorrect - * @throws EmailAlreadyUsedException 400 (Bad Request) if the email is already used - * @throws LoginAlreadyUsedException 400 (Bad Request) if the login is already used - */ - @PostMapping("/register") - @ResponseStatus(HttpStatus.CREATED) - public void registerAccount(@Valid @RequestBody ManagedUserVM managedUserVM) { - if (!checkPasswordLength(managedUserVM.getPassword())) { - throw new InvalidPasswordException(); - } - User user = userService.registerUser(managedUserVM, managedUserVM.getPassword()); - mailService.sendActivationEmail(user); - } - - /** - * GET /activate : activate the registered user. - * - * @param key the activation key - * @throws RuntimeException 500 (Internal Server Error) if the user couldn't be activated - */ - @GetMapping("/activate") - public void activateAccount(@RequestParam(value = "key") String key) { - Optional user = userService.activateRegistration(key); - if (!user.isPresent()) { - throw new InternalServerErrorException("No user was found for this activation key"); - } - } - - /** - * GET /authenticate : check if the user is authenticated, and return its login. - * - * @param request the HTTP request - * @return the login if the user is authenticated - */ - @GetMapping("/authenticate") - public String isAuthenticated(HttpServletRequest request) { - log.debug("REST request to check if the current user is authenticated"); - return request.getRemoteUser(); - } - - /** - * GET /account : get the current user. - * - * @return the current user - * @throws RuntimeException 500 (Internal Server Error) if the user couldn't be returned - */ - @GetMapping("/account") - public UserDTO getAccount() { - return userService.getUserWithAuthorities() - .map(UserDTO::new) - .orElseThrow(() -> new InternalServerErrorException("User could not be found")); - } - - /** - * POST /account : update the current user information. - * - * @param userDTO the current user information - * @throws EmailAlreadyUsedException 400 (Bad Request) if the email is already used - * @throws RuntimeException 500 (Internal Server Error) if the user login wasn't found - */ - @PostMapping("/account") - public void saveAccount(@Valid @RequestBody UserDTO userDTO) { - String userLogin = SecurityUtils.getCurrentUserLogin().orElseThrow(() -> new InternalServerErrorException("Current user login not found")); - Optional existingUser = userRepository.findOneByEmailIgnoreCase(userDTO.getEmail()); - if (existingUser.isPresent() && (!existingUser.get().getLogin().equalsIgnoreCase(userLogin))) { - throw new EmailAlreadyUsedException(); - } - Optional user = userRepository.findOneByLogin(userLogin); - if (!user.isPresent()) { - throw new InternalServerErrorException("User could not be found"); - } - userService.updateUser(userDTO.getFirstName(), userDTO.getLastName(), userDTO.getEmail(), - userDTO.getLangKey(), userDTO.getImageUrl()); - } - - /** - * POST /account/change-password : changes the current user's password - * - * @param passwordChangeDto current and new password - * @throws InvalidPasswordException 400 (Bad Request) if the new password is incorrect - */ - @PostMapping(path = "/account/change-password") - public void changePassword(@RequestBody PasswordChangeDTO passwordChangeDto) { - if (!checkPasswordLength(passwordChangeDto.getNewPassword())) { - throw new InvalidPasswordException(); - } - userService.changePassword(passwordChangeDto.getCurrentPassword(), passwordChangeDto.getNewPassword()); - } - - /** - * POST /account/reset-password/init : Send an email to reset the password of the user - * - * @param mail the mail of the user - * @throws EmailNotFoundException 400 (Bad Request) if the email address is not registered - */ - @PostMapping(path = "/account/reset-password/init") - public void requestPasswordReset(@RequestBody String mail) { - mailService.sendPasswordResetMail( - userService.requestPasswordReset(mail) - .orElseThrow(EmailNotFoundException::new) - ); - } - - /** - * POST /account/reset-password/finish : Finish to reset the password of the user - * - * @param keyAndPassword the generated key and the new password - * @throws InvalidPasswordException 400 (Bad Request) if the password is incorrect - * @throws RuntimeException 500 (Internal Server Error) if the password could not be reset - */ - @PostMapping(path = "/account/reset-password/finish") - public void finishPasswordReset(@RequestBody KeyAndPasswordVM keyAndPassword) { - if (!checkPasswordLength(keyAndPassword.getNewPassword())) { - throw new InvalidPasswordException(); - } - Optional user = - userService.completePasswordReset(keyAndPassword.getNewPassword(), keyAndPassword.getKey()); - - if (!user.isPresent()) { - throw new InternalServerErrorException("No user was found for this reset key"); - } - } - - private static boolean checkPasswordLength(String password) { - return !StringUtils.isEmpty(password) && - password.length() >= ManagedUserVM.PASSWORD_MIN_LENGTH && - password.length() <= ManagedUserVM.PASSWORD_MAX_LENGTH; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/AuditResource.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/AuditResource.java deleted file mode 100644 index d0182d5d9da5..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/AuditResource.java +++ /dev/null @@ -1,77 +0,0 @@ -package com.baeldung.jhipster5.web.rest; - -import com.baeldung.jhipster5.service.AuditEventService; -import com.baeldung.jhipster5.web.rest.util.PaginationUtil; - -import io.github.jhipster.web.util.ResponseUtil; -import org.springframework.boot.actuate.audit.AuditEvent; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.Pageable; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.*; - -import java.time.LocalDate; -import java.time.ZoneId; -import java.util.List; - -/** - * REST controller for getting the audit events. - */ -@RestController -@RequestMapping("/management/audits") -public class AuditResource { - - private final AuditEventService auditEventService; - - public AuditResource(AuditEventService auditEventService) { - this.auditEventService = auditEventService; - } - - /** - * GET /audits : get a page of AuditEvents. - * - * @param pageable the pagination information - * @return the ResponseEntity with status 200 (OK) and the list of AuditEvents in body - */ - @GetMapping - public ResponseEntity> getAll(Pageable pageable) { - Page page = auditEventService.findAll(pageable); - HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(page, "/management/audits"); - return new ResponseEntity<>(page.getContent(), headers, HttpStatus.OK); - } - - /** - * GET /audits : get a page of AuditEvents between the fromDate and toDate. - * - * @param fromDate the start of the time period of AuditEvents to get - * @param toDate the end of the time period of AuditEvents to get - * @param pageable the pagination information - * @return the ResponseEntity with status 200 (OK) and the list of AuditEvents in body - */ - @GetMapping(params = {"fromDate", "toDate"}) - public ResponseEntity> getByDates( - @RequestParam(value = "fromDate") LocalDate fromDate, - @RequestParam(value = "toDate") LocalDate toDate, - Pageable pageable) { - - Page page = auditEventService.findByDates( - fromDate.atStartOfDay(ZoneId.systemDefault()).toInstant(), - toDate.atStartOfDay(ZoneId.systemDefault()).plusDays(1).toInstant(), - pageable); - HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(page, "/management/audits"); - return new ResponseEntity<>(page.getContent(), headers, HttpStatus.OK); - } - - /** - * GET /audits/:id : get an AuditEvent by id. - * - * @param id the id of the entity to get - * @return the ResponseEntity with status 200 (OK) and the AuditEvent in body, or status 404 (Not Found) - */ - @GetMapping("/{id:.+}") - public ResponseEntity get(@PathVariable Long id) { - return ResponseUtil.wrapOrNotFound(auditEventService.find(id)); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/BookResource.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/BookResource.java deleted file mode 100644 index 0360ea05ed6b..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/BookResource.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.baeldung.jhipster5.web.rest; -import com.baeldung.jhipster5.service.BookService; -import com.baeldung.jhipster5.web.rest.errors.BadRequestAlertException; -import com.baeldung.jhipster5.web.rest.util.HeaderUtil; -import com.baeldung.jhipster5.service.dto.BookDTO; -import io.github.jhipster.web.util.ResponseUtil; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.*; - -import javax.validation.Valid; -import java.net.URI; -import java.net.URISyntaxException; - -import java.util.List; -import java.util.Optional; - -/** - * REST controller for managing Book. - */ -@RestController -@RequestMapping("/api") -public class BookResource { - - private final Logger log = LoggerFactory.getLogger(BookResource.class); - - private static final String ENTITY_NAME = "book"; - - private final BookService bookService; - - public BookResource(BookService bookService) { - this.bookService = bookService; - } - - /** - * POST /books : Create a new book. - * - * @param bookDTO the bookDTO to create - * @return the ResponseEntity with status 201 (Created) and with body the new bookDTO, or with status 400 (Bad Request) if the book has already an ID - * @throws URISyntaxException if the Location URI syntax is incorrect - */ - @PostMapping("/books") - public ResponseEntity createBook(@Valid @RequestBody BookDTO bookDTO) throws URISyntaxException { - log.debug("REST request to save Book : {}", bookDTO); - if (bookDTO.getId() != null) { - throw new BadRequestAlertException("A new book cannot already have an ID", ENTITY_NAME, "idexists"); - } - BookDTO result = bookService.save(bookDTO); - return ResponseEntity.created(new URI("/api/books/" + result.getId())) - .headers(HeaderUtil.createEntityCreationAlert(ENTITY_NAME, result.getId().toString())) - .body(result); - } - - /** - * PUT /books : Updates an existing book. - * - * @param bookDTO the bookDTO to update - * @return the ResponseEntity with status 200 (OK) and with body the updated bookDTO, - * or with status 400 (Bad Request) if the bookDTO is not valid, - * or with status 500 (Internal Server Error) if the bookDTO couldn't be updated - * @throws URISyntaxException if the Location URI syntax is incorrect - */ - @PutMapping("/books") - public ResponseEntity updateBook(@Valid @RequestBody BookDTO bookDTO) throws URISyntaxException { - log.debug("REST request to update Book : {}", bookDTO); - if (bookDTO.getId() == null) { - throw new BadRequestAlertException("Invalid id", ENTITY_NAME, "idnull"); - } - BookDTO result = bookService.save(bookDTO); - return ResponseEntity.ok() - .headers(HeaderUtil.createEntityUpdateAlert(ENTITY_NAME, bookDTO.getId().toString())) - .body(result); - } - - /** - * GET /books : get all the books. - * - * @return the ResponseEntity with status 200 (OK) and the list of books in body - */ - @GetMapping("/books") - public List getAllBooks() { - log.debug("REST request to get all Books"); - return bookService.findAll(); - } - - /** - * GET /books/:id : get the "id" book. - * - * @param id the id of the bookDTO to retrieve - * @return the ResponseEntity with status 200 (OK) and with body the bookDTO, or with status 404 (Not Found) - */ - @GetMapping("/books/{id}") - public ResponseEntity getBook(@PathVariable Long id) { - log.debug("REST request to get Book : {}", id); - Optional bookDTO = bookService.findOne(id); - return ResponseUtil.wrapOrNotFound(bookDTO); - } - - /** - * DELETE /books/:id : delete the "id" book. - * - * @param id the id of the bookDTO to delete - * @return the ResponseEntity with status 200 (OK) - */ - @DeleteMapping("/books/{id}") - public ResponseEntity deleteBook(@PathVariable Long id) { - log.debug("REST request to delete Book : {}", id); - bookService.delete(id); - return ResponseEntity.ok().headers(HeaderUtil.createEntityDeletionAlert(ENTITY_NAME, id.toString())).build(); - } - - @GetMapping("/books/purchase/{id}") - public ResponseEntity purchase(@PathVariable Long id) { - Optional bookDTO = bookService.purchase(id); - return ResponseUtil.wrapOrNotFound(bookDTO); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/LogsResource.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/LogsResource.java deleted file mode 100644 index f35b5f2d5c25..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/LogsResource.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.baeldung.jhipster5.web.rest; - -import com.baeldung.jhipster5.web.rest.vm.LoggerVM; - -import ch.qos.logback.classic.Level; -import ch.qos.logback.classic.LoggerContext; -import org.slf4j.LoggerFactory; -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.*; - -import java.util.List; -import java.util.stream.Collectors; - -/** - * Controller for view and managing Log Level at runtime. - */ -@RestController -@RequestMapping("/management") -public class LogsResource { - - @GetMapping("/logs") - public List getList() { - LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); - return context.getLoggerList() - .stream() - .map(LoggerVM::new) - .collect(Collectors.toList()); - } - - @PutMapping("/logs") - @ResponseStatus(HttpStatus.NO_CONTENT) - public void changeLevel(@RequestBody LoggerVM jsonLogger) { - LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); - context.getLogger(jsonLogger.getName()).setLevel(Level.valueOf(jsonLogger.getLevel())); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/UserJWTController.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/UserJWTController.java deleted file mode 100644 index aeea5870892a..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/UserJWTController.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.baeldung.jhipster5.web.rest; - -import com.baeldung.jhipster5.security.jwt.JWTFilter; -import com.baeldung.jhipster5.security.jwt.TokenProvider; -import com.baeldung.jhipster5.web.rest.vm.LoginVM; - -import com.fasterxml.jackson.annotation.JsonProperty; - -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.security.authentication.AuthenticationManager; -import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.web.bind.annotation.*; - -import javax.validation.Valid; - -/** - * Controller to authenticate users. - */ -@RestController -@RequestMapping("/api") -public class UserJWTController { - - private final TokenProvider tokenProvider; - - private final AuthenticationManager authenticationManager; - - public UserJWTController(TokenProvider tokenProvider, AuthenticationManager authenticationManager) { - this.tokenProvider = tokenProvider; - this.authenticationManager = authenticationManager; - } - - @PostMapping("/authenticate") - public ResponseEntity authorize(@Valid @RequestBody LoginVM loginVM) { - - UsernamePasswordAuthenticationToken authenticationToken = - new UsernamePasswordAuthenticationToken(loginVM.getUsername(), loginVM.getPassword()); - - Authentication authentication = this.authenticationManager.authenticate(authenticationToken); - SecurityContextHolder.getContext().setAuthentication(authentication); - boolean rememberMe = (loginVM.isRememberMe() == null) ? false : loginVM.isRememberMe(); - String jwt = tokenProvider.createToken(authentication, rememberMe); - HttpHeaders httpHeaders = new HttpHeaders(); - httpHeaders.add(JWTFilter.AUTHORIZATION_HEADER, "Bearer " + jwt); - return new ResponseEntity<>(new JWTToken(jwt), httpHeaders, HttpStatus.OK); - } - - /** - * Object to return as body in JWT Authentication. - */ - static class JWTToken { - - private String idToken; - - JWTToken(String idToken) { - this.idToken = idToken; - } - - @JsonProperty("id_token") - String getIdToken() { - return idToken; - } - - void setIdToken(String idToken) { - this.idToken = idToken; - } - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/UserResource.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/UserResource.java deleted file mode 100644 index a95acf6759a6..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/UserResource.java +++ /dev/null @@ -1,183 +0,0 @@ -package com.baeldung.jhipster5.web.rest; - -import com.baeldung.jhipster5.config.Constants; -import com.baeldung.jhipster5.domain.User; -import com.baeldung.jhipster5.repository.UserRepository; -import com.baeldung.jhipster5.security.AuthoritiesConstants; -import com.baeldung.jhipster5.service.MailService; -import com.baeldung.jhipster5.service.UserService; -import com.baeldung.jhipster5.service.dto.UserDTO; -import com.baeldung.jhipster5.web.rest.errors.BadRequestAlertException; -import com.baeldung.jhipster5.web.rest.errors.EmailAlreadyUsedException; -import com.baeldung.jhipster5.web.rest.errors.LoginAlreadyUsedException; -import com.baeldung.jhipster5.web.rest.util.HeaderUtil; -import com.baeldung.jhipster5.web.rest.util.PaginationUtil; -import io.github.jhipster.web.util.ResponseUtil; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.Pageable; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.web.bind.annotation.*; - -import javax.validation.Valid; -import java.net.URI; -import java.net.URISyntaxException; -import java.util.*; - -/** - * REST controller for managing users. - *

- * This class accesses the User entity, and needs to fetch its collection of authorities. - *

- * For a normal use-case, it would be better to have an eager relationship between User and Authority, - * and send everything to the client side: there would be no View Model and DTO, a lot less code, and an outer-join - * which would be good for performance. - *

- * We use a View Model and a DTO for 3 reasons: - *

    - *
  • We want to keep a lazy association between the user and the authorities, because people will - * quite often do relationships with the user, and we don't want them to get the authorities all - * the time for nothing (for performance reasons). This is the #1 goal: we should not impact our users' - * application because of this use-case.
  • - *
  • Not having an outer join causes n+1 requests to the database. This is not a real issue as - * we have by default a second-level cache. This means on the first HTTP call we do the n+1 requests, - * but then all authorities come from the cache, so in fact it's much better than doing an outer join - * (which will get lots of data from the database, for each HTTP call).
  • - *
  • As this manages users, for security reasons, we'd rather have a DTO layer.
  • - *
- *

- * Another option would be to have a specific JPA entity graph to handle this case. - */ -@RestController -@RequestMapping("/api") -public class UserResource { - - private final Logger log = LoggerFactory.getLogger(UserResource.class); - - private final UserService userService; - - private final UserRepository userRepository; - - private final MailService mailService; - - public UserResource(UserService userService, UserRepository userRepository, MailService mailService) { - - this.userService = userService; - this.userRepository = userRepository; - this.mailService = mailService; - } - - /** - * POST /users : Creates a new user. - *

- * Creates a new user if the login and email are not already used, and sends an - * mail with an activation link. - * The user needs to be activated on creation. - * - * @param userDTO the user to create - * @return the ResponseEntity with status 201 (Created) and with body the new user, or with status 400 (Bad Request) if the login or email is already in use - * @throws URISyntaxException if the Location URI syntax is incorrect - * @throws BadRequestAlertException 400 (Bad Request) if the login or email is already in use - */ - @PostMapping("/users") - @PreAuthorize("hasRole(\"" + AuthoritiesConstants.ADMIN + "\")") - public ResponseEntity createUser(@Valid @RequestBody UserDTO userDTO) throws URISyntaxException { - log.debug("REST request to save User : {}", userDTO); - - if (userDTO.getId() != null) { - throw new BadRequestAlertException("A new user cannot already have an ID", "userManagement", "idexists"); - // Lowercase the user login before comparing with database - } else if (userRepository.findOneByLogin(userDTO.getLogin().toLowerCase()).isPresent()) { - throw new LoginAlreadyUsedException(); - } else if (userRepository.findOneByEmailIgnoreCase(userDTO.getEmail()).isPresent()) { - throw new EmailAlreadyUsedException(); - } else { - User newUser = userService.createUser(userDTO); - mailService.sendCreationEmail(newUser); - return ResponseEntity.created(new URI("/api/users/" + newUser.getLogin())) - .headers(HeaderUtil.createAlert( "A user is created with identifier " + newUser.getLogin(), newUser.getLogin())) - .body(newUser); - } - } - - /** - * PUT /users : Updates an existing User. - * - * @param userDTO the user to update - * @return the ResponseEntity with status 200 (OK) and with body the updated user - * @throws EmailAlreadyUsedException 400 (Bad Request) if the email is already in use - * @throws LoginAlreadyUsedException 400 (Bad Request) if the login is already in use - */ - @PutMapping("/users") - @PreAuthorize("hasRole(\"" + AuthoritiesConstants.ADMIN + "\")") - public ResponseEntity updateUser(@Valid @RequestBody UserDTO userDTO) { - log.debug("REST request to update User : {}", userDTO); - Optional existingUser = userRepository.findOneByEmailIgnoreCase(userDTO.getEmail()); - if (existingUser.isPresent() && (!existingUser.get().getId().equals(userDTO.getId()))) { - throw new EmailAlreadyUsedException(); - } - existingUser = userRepository.findOneByLogin(userDTO.getLogin().toLowerCase()); - if (existingUser.isPresent() && (!existingUser.get().getId().equals(userDTO.getId()))) { - throw new LoginAlreadyUsedException(); - } - Optional updatedUser = userService.updateUser(userDTO); - - return ResponseUtil.wrapOrNotFound(updatedUser, - HeaderUtil.createAlert("A user is updated with identifier " + userDTO.getLogin(), userDTO.getLogin())); - } - - /** - * GET /users : get all users. - * - * @param pageable the pagination information - * @return the ResponseEntity with status 200 (OK) and with body all users - */ - @GetMapping("/users") - public ResponseEntity> getAllUsers(Pageable pageable) { - final Page page = userService.getAllManagedUsers(pageable); - HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(page, "/api/users"); - return new ResponseEntity<>(page.getContent(), headers, HttpStatus.OK); - } - - /** - * @return a string list of the all of the roles - */ - @GetMapping("/users/authorities") - @PreAuthorize("hasRole(\"" + AuthoritiesConstants.ADMIN + "\")") - public List getAuthorities() { - return userService.getAuthorities(); - } - - /** - * GET /users/:login : get the "login" user. - * - * @param login the login of the user to find - * @return the ResponseEntity with status 200 (OK) and with body the "login" user, or with status 404 (Not Found) - */ - @GetMapping("/users/{login:" + Constants.LOGIN_REGEX + "}") - public ResponseEntity getUser(@PathVariable String login) { - log.debug("REST request to get User : {}", login); - return ResponseUtil.wrapOrNotFound( - userService.getUserWithAuthoritiesByLogin(login) - .map(UserDTO::new)); - } - - /** - * DELETE /users/:login : delete the "login" User. - * - * @param login the login of the user to delete - * @return the ResponseEntity with status 200 (OK) - */ - @DeleteMapping("/users/{login:" + Constants.LOGIN_REGEX + "}") - @PreAuthorize("hasRole(\"" + AuthoritiesConstants.ADMIN + "\")") - public ResponseEntity deleteUser(@PathVariable String login) { - log.debug("REST request to delete User: {}", login); - userService.deleteUser(login); - return ResponseEntity.ok().headers(HeaderUtil.createAlert( "A user is deleted with identifier " + login, login)).build(); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/BadRequestAlertException.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/BadRequestAlertException.java deleted file mode 100644 index c4c403351a6c..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/BadRequestAlertException.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.baeldung.jhipster5.web.rest.errors; - -import org.zalando.problem.AbstractThrowableProblem; -import org.zalando.problem.Status; - -import java.net.URI; -import java.util.HashMap; -import java.util.Map; - -public class BadRequestAlertException extends AbstractThrowableProblem { - - private static final long serialVersionUID = 1L; - - private final String entityName; - - private final String errorKey; - - public BadRequestAlertException(String defaultMessage, String entityName, String errorKey) { - this(ErrorConstants.DEFAULT_TYPE, defaultMessage, entityName, errorKey); - } - - public BadRequestAlertException(URI type, String defaultMessage, String entityName, String errorKey) { - super(type, defaultMessage, Status.BAD_REQUEST, null, null, null, getAlertParameters(entityName, errorKey)); - this.entityName = entityName; - this.errorKey = errorKey; - } - - public String getEntityName() { - return entityName; - } - - public String getErrorKey() { - return errorKey; - } - - private static Map getAlertParameters(String entityName, String errorKey) { - Map parameters = new HashMap<>(); - parameters.put("message", "error." + errorKey); - parameters.put("params", entityName); - return parameters; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/CustomParameterizedException.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/CustomParameterizedException.java deleted file mode 100644 index 8c3df82b8348..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/CustomParameterizedException.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.baeldung.jhipster5.web.rest.errors; - -import org.zalando.problem.AbstractThrowableProblem; - -import java.util.HashMap; -import java.util.Map; - -import static org.zalando.problem.Status.BAD_REQUEST; - -/** - * Custom, parameterized exception, which can be translated on the client side. - * For example: - * - *

- * throw new CustomParameterizedException("myCustomError", "hello", "world");
- * 
- * - * Can be translated with: - * - *
- * "error.myCustomError" :  "The server says {{param0}} to {{param1}}"
- * 
- */ -public class CustomParameterizedException extends AbstractThrowableProblem { - - private static final long serialVersionUID = 1L; - - private static final String PARAM = "param"; - - public CustomParameterizedException(String message, String... params) { - this(message, toParamMap(params)); - } - - public CustomParameterizedException(String message, Map paramMap) { - super(ErrorConstants.PARAMETERIZED_TYPE, "Parameterized Exception", BAD_REQUEST, null, null, null, toProblemParameters(message, paramMap)); - } - - public static Map toParamMap(String... params) { - Map paramMap = new HashMap<>(); - if (params != null && params.length > 0) { - for (int i = 0; i < params.length; i++) { - paramMap.put(PARAM + i, params[i]); - } - } - return paramMap; - } - - public static Map toProblemParameters(String message, Map paramMap) { - Map parameters = new HashMap<>(); - parameters.put("message", message); - parameters.put("params", paramMap); - return parameters; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/EmailAlreadyUsedException.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/EmailAlreadyUsedException.java deleted file mode 100644 index b3dcc0279ebd..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/EmailAlreadyUsedException.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.baeldung.jhipster5.web.rest.errors; - -public class EmailAlreadyUsedException extends BadRequestAlertException { - - private static final long serialVersionUID = 1L; - - public EmailAlreadyUsedException() { - super(ErrorConstants.EMAIL_ALREADY_USED_TYPE, "Email is already in use!", "userManagement", "emailexists"); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/EmailNotFoundException.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/EmailNotFoundException.java deleted file mode 100644 index b93081cacb13..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/EmailNotFoundException.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.baeldung.jhipster5.web.rest.errors; - -import org.zalando.problem.AbstractThrowableProblem; -import org.zalando.problem.Status; - -public class EmailNotFoundException extends AbstractThrowableProblem { - - private static final long serialVersionUID = 1L; - - public EmailNotFoundException() { - super(ErrorConstants.EMAIL_NOT_FOUND_TYPE, "Email address not registered", Status.BAD_REQUEST); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/ErrorConstants.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/ErrorConstants.java deleted file mode 100644 index 06be9254a922..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/ErrorConstants.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.baeldung.jhipster5.web.rest.errors; - -import java.net.URI; - -public final class ErrorConstants { - - public static final String ERR_CONCURRENCY_FAILURE = "error.concurrencyFailure"; - public static final String ERR_VALIDATION = "error.validation"; - public static final String PROBLEM_BASE_URL = "https://www.jhipster.tech/problem"; - public static final URI DEFAULT_TYPE = URI.create(PROBLEM_BASE_URL + "/problem-with-message"); - public static final URI CONSTRAINT_VIOLATION_TYPE = URI.create(PROBLEM_BASE_URL + "/constraint-violation"); - public static final URI PARAMETERIZED_TYPE = URI.create(PROBLEM_BASE_URL + "/parameterized"); - public static final URI ENTITY_NOT_FOUND_TYPE = URI.create(PROBLEM_BASE_URL + "/entity-not-found"); - public static final URI INVALID_PASSWORD_TYPE = URI.create(PROBLEM_BASE_URL + "/invalid-password"); - public static final URI EMAIL_ALREADY_USED_TYPE = URI.create(PROBLEM_BASE_URL + "/email-already-used"); - public static final URI LOGIN_ALREADY_USED_TYPE = URI.create(PROBLEM_BASE_URL + "/login-already-used"); - public static final URI EMAIL_NOT_FOUND_TYPE = URI.create(PROBLEM_BASE_URL + "/email-not-found"); - - private ErrorConstants() { - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/ExceptionTranslator.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/ExceptionTranslator.java deleted file mode 100644 index 3f7cc6b56520..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/ExceptionTranslator.java +++ /dev/null @@ -1,112 +0,0 @@ -package com.baeldung.jhipster5.web.rest.errors; - -import com.baeldung.jhipster5.web.rest.util.HeaderUtil; - -import org.springframework.dao.ConcurrencyFailureException; -import org.springframework.http.ResponseEntity; -import org.springframework.validation.BindingResult; -import org.springframework.web.bind.MethodArgumentNotValidException; -import org.springframework.web.bind.annotation.ControllerAdvice; -import org.springframework.web.bind.annotation.ExceptionHandler; -import org.springframework.web.context.request.NativeWebRequest; -import org.zalando.problem.DefaultProblem; -import org.zalando.problem.Problem; -import org.zalando.problem.ProblemBuilder; -import org.zalando.problem.Status; -import org.zalando.problem.spring.web.advice.ProblemHandling; -import org.zalando.problem.violations.ConstraintViolationProblem; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; -import javax.servlet.http.HttpServletRequest; -import java.util.List; -import java.util.NoSuchElementException; -import java.util.stream.Collectors; - -/** - * Controller advice to translate the server side exceptions to client-friendly json structures. - * The error response follows RFC7807 - Problem Details for HTTP APIs (https://tools.ietf.org/html/rfc7807) - */ -@ControllerAdvice -public class ExceptionTranslator implements ProblemHandling { - - private static final String FIELD_ERRORS_KEY = "fieldErrors"; - private static final String MESSAGE_KEY = "message"; - private static final String PATH_KEY = "path"; - private static final String VIOLATIONS_KEY = "violations"; - - /** - * Post-process the Problem payload to add the message key for the front-end if needed - */ - @Override - public ResponseEntity process(@Nullable ResponseEntity entity, NativeWebRequest request) { - if (entity == null) { - return entity; - } - Problem problem = entity.getBody(); - if (!(problem instanceof ConstraintViolationProblem || problem instanceof DefaultProblem)) { - return entity; - } - ProblemBuilder builder = Problem.builder() - .withType(Problem.DEFAULT_TYPE.equals(problem.getType()) ? ErrorConstants.DEFAULT_TYPE : problem.getType()) - .withStatus(problem.getStatus()) - .withTitle(problem.getTitle()) - .with(PATH_KEY, request.getNativeRequest(HttpServletRequest.class).getRequestURI()); - - if (problem instanceof ConstraintViolationProblem) { - builder - .with(VIOLATIONS_KEY, ((ConstraintViolationProblem) problem).getViolations()) - .with(MESSAGE_KEY, ErrorConstants.ERR_VALIDATION); - } else { - builder - .withCause(((DefaultProblem) problem).getCause()) - .withDetail(problem.getDetail()) - .withInstance(problem.getInstance()); - problem.getParameters().forEach(builder::with); - if (!problem.getParameters().containsKey(MESSAGE_KEY) && problem.getStatus() != null) { - builder.with(MESSAGE_KEY, "error.http." + problem.getStatus().getStatusCode()); - } - } - return new ResponseEntity<>(builder.build(), entity.getHeaders(), entity.getStatusCode()); - } - - @Override - public ResponseEntity handleMethodArgumentNotValid(MethodArgumentNotValidException ex, @Nonnull NativeWebRequest request) { - BindingResult result = ex.getBindingResult(); - List fieldErrors = result.getFieldErrors().stream() - .map(f -> new FieldErrorVM(f.getObjectName(), f.getField(), f.getCode())) - .collect(Collectors.toList()); - - Problem problem = Problem.builder() - .withType(ErrorConstants.CONSTRAINT_VIOLATION_TYPE) - .withTitle("Method argument not valid") - .withStatus(defaultConstraintViolationStatus()) - .with(MESSAGE_KEY, ErrorConstants.ERR_VALIDATION) - .with(FIELD_ERRORS_KEY, fieldErrors) - .build(); - return create(ex, problem, request); - } - - @ExceptionHandler - public ResponseEntity handleNoSuchElementException(NoSuchElementException ex, NativeWebRequest request) { - Problem problem = Problem.builder() - .withStatus(Status.NOT_FOUND) - .with(MESSAGE_KEY, ErrorConstants.ENTITY_NOT_FOUND_TYPE) - .build(); - return create(ex, problem, request); - } - - @ExceptionHandler - public ResponseEntity handleBadRequestAlertException(BadRequestAlertException ex, NativeWebRequest request) { - return create(ex, request, HeaderUtil.createFailureAlert(ex.getEntityName(), ex.getErrorKey(), ex.getMessage())); - } - - @ExceptionHandler - public ResponseEntity handleConcurrencyFailure(ConcurrencyFailureException ex, NativeWebRequest request) { - Problem problem = Problem.builder() - .withStatus(Status.CONFLICT) - .with(MESSAGE_KEY, ErrorConstants.ERR_CONCURRENCY_FAILURE) - .build(); - return create(ex, problem, request); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/FieldErrorVM.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/FieldErrorVM.java deleted file mode 100644 index 349f548850ca..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/FieldErrorVM.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.baeldung.jhipster5.web.rest.errors; - -import java.io.Serializable; - -public class FieldErrorVM implements Serializable { - - private static final long serialVersionUID = 1L; - - private final String objectName; - - private final String field; - - private final String message; - - public FieldErrorVM(String dto, String field, String message) { - this.objectName = dto; - this.field = field; - this.message = message; - } - - public String getObjectName() { - return objectName; - } - - public String getField() { - return field; - } - - public String getMessage() { - return message; - } - -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/InternalServerErrorException.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/InternalServerErrorException.java deleted file mode 100644 index 13e128237b07..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/InternalServerErrorException.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.baeldung.jhipster5.web.rest.errors; - -import org.zalando.problem.AbstractThrowableProblem; -import org.zalando.problem.Status; - -/** - * Simple exception with a message, that returns an Internal Server Error code. - */ -public class InternalServerErrorException extends AbstractThrowableProblem { - - private static final long serialVersionUID = 1L; - - public InternalServerErrorException(String message) { - super(ErrorConstants.DEFAULT_TYPE, message, Status.INTERNAL_SERVER_ERROR); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/InvalidPasswordException.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/InvalidPasswordException.java deleted file mode 100644 index 6bb91247ff59..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/InvalidPasswordException.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.baeldung.jhipster5.web.rest.errors; - -import org.zalando.problem.AbstractThrowableProblem; -import org.zalando.problem.Status; - -public class InvalidPasswordException extends AbstractThrowableProblem { - - private static final long serialVersionUID = 1L; - - public InvalidPasswordException() { - super(ErrorConstants.INVALID_PASSWORD_TYPE, "Incorrect password", Status.BAD_REQUEST); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/LoginAlreadyUsedException.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/LoginAlreadyUsedException.java deleted file mode 100644 index 987a94193d26..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/LoginAlreadyUsedException.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.baeldung.jhipster5.web.rest.errors; - -public class LoginAlreadyUsedException extends BadRequestAlertException { - - private static final long serialVersionUID = 1L; - - public LoginAlreadyUsedException() { - super(ErrorConstants.LOGIN_ALREADY_USED_TYPE, "Login name already used!", "userManagement", "userexists"); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/package-info.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/package-info.java deleted file mode 100644 index 7f57af4429c5..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/errors/package-info.java +++ /dev/null @@ -1,6 +0,0 @@ -/** - * Specific errors used with Zalando's "problem-spring-web" library. - * - * More information on https://github.com/zalando/problem-spring-web - */ -package com.baeldung.jhipster5.web.rest.errors; diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/package-info.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/package-info.java deleted file mode 100644 index 75bf6840f622..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * Spring MVC REST controllers. - */ -package com.baeldung.jhipster5.web.rest; diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/util/HeaderUtil.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/util/HeaderUtil.java deleted file mode 100644 index 91fdd68261da..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/util/HeaderUtil.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.baeldung.jhipster5.web.rest.util; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.http.HttpHeaders; - -/** - * Utility class for HTTP headers creation. - */ -public final class HeaderUtil { - - private static final Logger log = LoggerFactory.getLogger(HeaderUtil.class); - - private static final String APPLICATION_NAME = "bookstoreApp"; - - private HeaderUtil() { - } - - public static HttpHeaders createAlert(String message, String param) { - HttpHeaders headers = new HttpHeaders(); - headers.add("X-" + APPLICATION_NAME + "-alert", message); - headers.add("X-" + APPLICATION_NAME + "-params", param); - return headers; - } - - public static HttpHeaders createEntityCreationAlert(String entityName, String param) { - return createAlert("A new " + entityName + " is created with identifier " + param, param); - } - - public static HttpHeaders createEntityUpdateAlert(String entityName, String param) { - return createAlert("A " + entityName + " is updated with identifier " + param, param); - } - - public static HttpHeaders createEntityDeletionAlert(String entityName, String param) { - return createAlert("A " + entityName + " is deleted with identifier " + param, param); - } - - public static HttpHeaders createFailureAlert(String entityName, String errorKey, String defaultMessage) { - log.error("Entity processing failed, {}", defaultMessage); - HttpHeaders headers = new HttpHeaders(); - headers.add("X-" + APPLICATION_NAME + "-error", defaultMessage); - headers.add("X-" + APPLICATION_NAME + "-params", entityName); - return headers; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/util/PaginationUtil.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/util/PaginationUtil.java deleted file mode 100644 index 9928dbe17175..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/util/PaginationUtil.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.baeldung.jhipster5.web.rest.util; - -import org.springframework.data.domain.Page; -import org.springframework.http.HttpHeaders; -import org.springframework.web.util.UriComponentsBuilder; - -/** - * Utility class for handling pagination. - * - *

- * Pagination uses the same principles as the GitHub API, - * and follow RFC 5988 (Link header). - */ -public final class PaginationUtil { - - private PaginationUtil() { - } - - public static HttpHeaders generatePaginationHttpHeaders(Page page, String baseUrl) { - - HttpHeaders headers = new HttpHeaders(); - headers.add("X-Total-Count", Long.toString(page.getTotalElements())); - String link = ""; - if ((page.getNumber() + 1) < page.getTotalPages()) { - link = "<" + generateUri(baseUrl, page.getNumber() + 1, page.getSize()) + ">; rel=\"next\","; - } - // prev link - if ((page.getNumber()) > 0) { - link += "<" + generateUri(baseUrl, page.getNumber() - 1, page.getSize()) + ">; rel=\"prev\","; - } - // last and first link - int lastPage = 0; - if (page.getTotalPages() > 0) { - lastPage = page.getTotalPages() - 1; - } - link += "<" + generateUri(baseUrl, lastPage, page.getSize()) + ">; rel=\"last\","; - link += "<" + generateUri(baseUrl, 0, page.getSize()) + ">; rel=\"first\""; - headers.add(HttpHeaders.LINK, link); - return headers; - } - - private static String generateUri(String baseUrl, int page, int size) { - return UriComponentsBuilder.fromUriString(baseUrl).queryParam("page", page).queryParam("size", size).toUriString(); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/vm/KeyAndPasswordVM.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/vm/KeyAndPasswordVM.java deleted file mode 100644 index 840fa02cfcc6..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/vm/KeyAndPasswordVM.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.baeldung.jhipster5.web.rest.vm; - -/** - * View Model object for storing the user's key and password. - */ -public class KeyAndPasswordVM { - - private String key; - - private String newPassword; - - public String getKey() { - return key; - } - - public void setKey(String key) { - this.key = key; - } - - public String getNewPassword() { - return newPassword; - } - - public void setNewPassword(String newPassword) { - this.newPassword = newPassword; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/vm/LoggerVM.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/vm/LoggerVM.java deleted file mode 100644 index 952e7df2985b..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/vm/LoggerVM.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.baeldung.jhipster5.web.rest.vm; - -import ch.qos.logback.classic.Logger; - -/** - * View Model object for storing a Logback logger. - */ -public class LoggerVM { - - private String name; - - private String level; - - public LoggerVM(Logger logger) { - this.name = logger.getName(); - this.level = logger.getEffectiveLevel().toString(); - } - - public LoggerVM() { - // Empty public constructor used by Jackson. - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getLevel() { - return level; - } - - public void setLevel(String level) { - this.level = level; - } - - @Override - public String toString() { - return "LoggerVM{" + - "name='" + name + '\'' + - ", level='" + level + '\'' + - '}'; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/vm/LoginVM.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/vm/LoginVM.java deleted file mode 100644 index 8fc119ab6935..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/vm/LoginVM.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.baeldung.jhipster5.web.rest.vm; - -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; - -/** - * View Model object for storing a user's credentials. - */ -public class LoginVM { - - @NotNull - @Size(min = 1, max = 50) - private String username; - - @NotNull - @Size(min = ManagedUserVM.PASSWORD_MIN_LENGTH, max = ManagedUserVM.PASSWORD_MAX_LENGTH) - private String password; - - private Boolean rememberMe; - - 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; - } - - public Boolean isRememberMe() { - return rememberMe; - } - - public void setRememberMe(Boolean rememberMe) { - this.rememberMe = rememberMe; - } - - @Override - public String toString() { - return "LoginVM{" + - "username='" + username + '\'' + - ", rememberMe=" + rememberMe + - '}'; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/vm/ManagedUserVM.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/vm/ManagedUserVM.java deleted file mode 100644 index 314577c45610..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/vm/ManagedUserVM.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.baeldung.jhipster5.web.rest.vm; - -import com.baeldung.jhipster5.service.dto.UserDTO; -import javax.validation.constraints.Size; - -/** - * View Model extending the UserDTO, which is meant to be used in the user management UI. - */ -public class ManagedUserVM extends UserDTO { - - public static final int PASSWORD_MIN_LENGTH = 4; - - public static final int PASSWORD_MAX_LENGTH = 100; - - @Size(min = PASSWORD_MIN_LENGTH, max = PASSWORD_MAX_LENGTH) - private String password; - - public ManagedUserVM() { - // Empty constructor needed for Jackson. - } - - public String getPassword() { - return password; - } - - public void setPassword(String password) { - this.password = password; - } - - @Override - public String toString() { - return "ManagedUserVM{" + - "} " + super.toString(); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/vm/package-info.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/vm/package-info.java deleted file mode 100644 index ff587990376b..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/web/rest/vm/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * View Models used by Spring MVC REST controllers. - */ -package com.baeldung.jhipster5.web.rest.vm; diff --git a/jhipster-5/bookstore-monolith/src/main/jib/entrypoint.sh b/jhipster-5/bookstore-monolith/src/main/jib/entrypoint.sh deleted file mode 100644 index b3c454101172..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/jib/entrypoint.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh - -echo "The application will start in ${JHIPSTER_SLEEP}s..." && sleep ${JHIPSTER_SLEEP} -exec java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -cp /app/resources/:/app/classes/:/app/libs/* "com.baeldung.jhipster5.BookstoreApp" "$@" diff --git a/jhipster-5/bookstore-monolith/src/main/resources/.h2.server.properties b/jhipster-5/bookstore-monolith/src/main/resources/.h2.server.properties deleted file mode 100644 index 99767b3a8a6b..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/resources/.h2.server.properties +++ /dev/null @@ -1,5 +0,0 @@ -#H2 Server Properties -0=JHipster H2 (Memory)|org.h2.Driver|jdbc\:h2\:mem\:bookstore|Bookstore -webAllowOthers=true -webPort=8082 -webSSL=false diff --git a/jhipster-5/bookstore-monolith/src/main/resources/banner.txt b/jhipster-5/bookstore-monolith/src/main/resources/banner.txt deleted file mode 100644 index e0bc55aaffa9..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/resources/banner.txt +++ /dev/null @@ -1,10 +0,0 @@ - - ${AnsiColor.GREEN} ██╗${AnsiColor.RED} ██╗ ██╗ ████████╗ ███████╗ ██████╗ ████████╗ ████████╗ ███████╗ - ${AnsiColor.GREEN} ██║${AnsiColor.RED} ██║ ██║ ╚══██╔══╝ ██╔═══██╗ ██╔════╝ ╚══██╔══╝ ██╔═════╝ ██╔═══██╗ - ${AnsiColor.GREEN} ██║${AnsiColor.RED} ████████║ ██║ ███████╔╝ ╚█████╗ ██║ ██████╗ ███████╔╝ - ${AnsiColor.GREEN}██╗ ██║${AnsiColor.RED} ██╔═══██║ ██║ ██╔════╝ ╚═══██╗ ██║ ██╔═══╝ ██╔══██║ - ${AnsiColor.GREEN}╚██████╔╝${AnsiColor.RED} ██║ ██║ ████████╗ ██║ ██████╔╝ ██║ ████████╗ ██║ ╚██╗ - ${AnsiColor.GREEN} ╚═════╝ ${AnsiColor.RED} ╚═╝ ╚═╝ ╚═══════╝ ╚═╝ ╚═════╝ ╚═╝ ╚═══════╝ ╚═╝ ╚═╝ - -${AnsiColor.BRIGHT_BLUE}:: JHipster 🤓 :: Running Spring Boot ${spring-boot.version} :: -:: https://www.jhipster.tech ::${AnsiColor.DEFAULT} diff --git a/jhipster-5/bookstore-monolith/src/main/resources/config/application-dev.yml b/jhipster-5/bookstore-monolith/src/main/resources/config/application-dev.yml deleted file mode 100644 index 64742feb450c..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/resources/config/application-dev.yml +++ /dev/null @@ -1,122 +0,0 @@ -# =================================================================== -# Spring Boot configuration for the "dev" profile. -# -# This configuration overrides the application.yml file. -# -# More information on profiles: https://www.jhipster.tech/profiles/ -# More information on configuration properties: https://www.jhipster.tech/common-application-properties/ -# =================================================================== - -# =================================================================== -# Standard Spring Boot properties. -# Full reference is available at: -# http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html -# =================================================================== - -logging: - level: - ROOT: DEBUG - io.github.jhipster: DEBUG - com.baeldung.jhipster5: DEBUG - -spring: - profiles: - active: dev - include: - - swagger - # Uncomment to activate TLS for the dev profile - #- tls - devtools: - restart: - enabled: true - additional-exclude: .h2.server.properties - livereload: - enabled: false # we use Webpack dev server + BrowserSync for livereload - jackson: - serialization: - indent-output: true - datasource: - type: com.zaxxer.hikari.HikariDataSource - url: jdbc:h2:mem:bookstore;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE - username: Bookstore - password: - hikari: - poolName: Hikari - auto-commit: false - h2: - console: - enabled: false - jpa: - database-platform: io.github.jhipster.domain.util.FixedH2Dialect - database: H2 - show-sql: true - properties: - hibernate.id.new_generator_mappings: true - hibernate.connection.provider_disables_autocommit: true - hibernate.cache.use_second_level_cache: false - hibernate.cache.use_query_cache: false - hibernate.generate_statistics: true - liquibase: - contexts: dev - mail: - host: localhost - port: 25 - username: - password: - messages: - cache-duration: PT1S # 1 second, see the ISO 8601 standard - thymeleaf: - cache: false - -server: - port: 8080 - -# =================================================================== -# JHipster specific properties -# -# Full reference is available at: https://www.jhipster.tech/common-application-properties/ -# =================================================================== - -jhipster: - http: - version: V_1_1 # To use HTTP/2 you will need to activate TLS (see application-tls.yml) - # CORS is only enabled by default with the "dev" profile, so BrowserSync can access the API - cors: - allowed-origins: "*" - allowed-methods: "*" - allowed-headers: "*" - exposed-headers: "Authorization,Link,X-Total-Count" - allow-credentials: true - max-age: 1800 - security: - authentication: - jwt: - # This token must be encoded using Base64 and be at least 256 bits long (you can type `openssl rand -base64 64` on your command line to generate a 512 bits one) - base64-secret: NDJmOTVlZjI2NzhlZDRjNmVkNTM1NDE2NjkyNDljZDJiNzBlMjI5YmZjMjY3MzdjZmZlMjI3NjE4OTRkNzc5MWYzNDNlYWMzYmJjOWRmMjc5ZWQyZTZmOWZkOTMxZWZhNWE1MTVmM2U2NjFmYjhlNDc2Y2Q3NzliMGY0YzFkNmI= - # Token is valid 24 hours - token-validity-in-seconds: 86400 - token-validity-in-seconds-for-remember-me: 2592000 - mail: # specific JHipster mail property, for standard properties see MailProperties - from: Bookstore@localhost - base-url: http://127.0.0.1:8080 - metrics: - logs: # Reports metrics in the logs - enabled: false - report-frequency: 60 # in seconds - logging: - logstash: # Forward logs to logstash over a socket, used by LoggingConfiguration - enabled: false - host: localhost - port: 5000 - queue-size: 512 - -# =================================================================== -# Application specific properties -# Add your own application properties here, see the ApplicationProperties class -# to have type-safe configuration, like in the JHipsterProperties above -# -# More documentation is available at: -# https://www.jhipster.tech/common-application-properties/ -# =================================================================== - -# application: diff --git a/jhipster-5/bookstore-monolith/src/main/resources/config/application-prod.yml b/jhipster-5/bookstore-monolith/src/main/resources/config/application-prod.yml deleted file mode 100644 index d698099fac11..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,133 +0,0 @@ -# =================================================================== -# Spring Boot configuration for the "prod" profile. -# -# This configuration overrides the application.yml file. -# -# More information on profiles: https://www.jhipster.tech/profiles/ -# More information on configuration properties: https://www.jhipster.tech/common-application-properties/ -# =================================================================== - -# =================================================================== -# Standard Spring Boot properties. -# Full reference is available at: -# http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html -# =================================================================== - -logging: - level: - ROOT: INFO - com.baeldung.jhipster5: INFO - io.github.jhipster: INFO - -spring: - devtools: - restart: - enabled: false - livereload: - enabled: false - datasource: - type: com.zaxxer.hikari.HikariDataSource - url: jdbc:mysql://localhost:3306/Bookstore?useUnicode=true&characterEncoding=utf8&useSSL=false&useLegacyDatetimeCode=false&serverTimezone=UTC - username: root - password: - hikari: - poolName: Hikari - auto-commit: false - data-source-properties: - cachePrepStmts: true - prepStmtCacheSize: 250 - prepStmtCacheSqlLimit: 2048 - useServerPrepStmts: true - jpa: - database-platform: org.hibernate.dialect.MySQL5InnoDBDialect - database: MYSQL - show-sql: false - properties: - hibernate.id.new_generator_mappings: true - hibernate.connection.provider_disables_autocommit: true - hibernate.cache.use_second_level_cache: false - hibernate.cache.use_query_cache: false - hibernate.generate_statistics: true - liquibase: - contexts: prod - mail: - host: localhost - port: 25 - username: - password: - thymeleaf: - cache: true - -# =================================================================== -# To enable TLS in production, generate a certificate using: -# keytool -genkey -alias bookstore -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 3650 -# -# You can also use Let's Encrypt: -# https://maximilian-boehm.com/hp2121/Create-a-Java-Keystore-JKS-from-Let-s-Encrypt-Certificates.htm -# -# Then, modify the server.ssl properties so your "server" configuration looks like: -# -# server: -# port: 443 -# ssl: -# key-store: classpath:config/tls/keystore.p12 -# key-store-password: password -# key-store-type: PKCS12 -# key-alias: bookstore -# # The ciphers suite enforce the security by deactivating some old and deprecated SSL cipher, this list was tested against SSL Labs (https://www.ssllabs.com/ssltest/) -# ciphers: TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 ,TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 ,TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 ,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_DHE_RSA_WITH_AES_128_CBC_SHA256,TLS_DHE_RSA_WITH_AES_128_CBC_SHA,TLS_DHE_RSA_WITH_AES_256_CBC_SHA256,TLS_DHE_RSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_AES_128_GCM_SHA256,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA,TLS_RSA_WITH_CAMELLIA_256_CBC_SHA,TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA,TLS_RSA_WITH_CAMELLIA_128_CBC_SHA -# =================================================================== -server: - port: 8080 - compression: - enabled: true - mime-types: text/html,text/xml,text/plain,text/css, application/javascript, application/json - min-response-size: 1024 - -# =================================================================== -# JHipster specific properties -# -# Full reference is available at: https://www.jhipster.tech/common-application-properties/ -# =================================================================== - -jhipster: - http: - version: V_1_1 # To use HTTP/2 you will need SSL support (see above the "server.ssl" configuration) - cache: # Used by the CachingHttpHeadersFilter - timeToLiveInDays: 1461 - security: - authentication: - jwt: - # This token must be encoded using Base64 and be at least 256 bits long (you can type `openssl rand -base64 64` on your command line to generate a 512 bits one) - # As this is the PRODUCTION configuration, you MUST change the default key, and store it securely: - # - In the JHipster Registry (which includes a Spring Cloud Config server) - # - In a separate `application-prod.yml` file, in the same folder as your executable WAR file - # - In the `JHIPSTER_SECURITY_AUTHENTICATION_JWT_BASE64_SECRET` environment variable - base64-secret: NDJmOTVlZjI2NzhlZDRjNmVkNTM1NDE2NjkyNDljZDJiNzBlMjI5YmZjMjY3MzdjZmZlMjI3NjE4OTRkNzc5MWYzNDNlYWMzYmJjOWRmMjc5ZWQyZTZmOWZkOTMxZWZhNWE1MTVmM2U2NjFmYjhlNDc2Y2Q3NzliMGY0YzFkNmI= - # Token is valid 24 hours - token-validity-in-seconds: 86400 - token-validity-in-seconds-for-remember-me: 2592000 - mail: # specific JHipster mail property, for standard properties see MailProperties - from: Bookstore@localhost - base-url: http://my-server-url-to-change # Modify according to your server's URL - metrics: - logs: # Reports metrics in the logs - enabled: false - report-frequency: 60 # in seconds - logging: - logstash: # Forward logs to logstash over a socket, used by LoggingConfiguration - enabled: false - host: localhost - port: 5000 - queue-size: 512 - -# =================================================================== -# Application specific properties -# Add your own application properties here, see the ApplicationProperties class -# to have type-safe configuration, like in the JHipsterProperties above -# -# More documentation is available at: -# https://www.jhipster.tech/common-application-properties/ -# =================================================================== - -# application: diff --git a/jhipster-5/bookstore-monolith/src/main/resources/config/application-tls.yml b/jhipster-5/bookstore-monolith/src/main/resources/config/application-tls.yml deleted file mode 100644 index c4e0565cc770..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/resources/config/application-tls.yml +++ /dev/null @@ -1,20 +0,0 @@ -# =================================================================== -# Activate this profile to enable TLS and HTTP/2. -# -# JHipster has generated a self-signed certificate, which will be used to encrypt traffic. -# As your browser will not understand this certificate, you will need to import it. -# -# Another (easiest) solution with Chrome is to enable the "allow-insecure-localhost" flag -# at chrome://flags/#allow-insecure-localhost -# =================================================================== -server: - ssl: - key-store: classpath:config/tls/keystore.p12 - key-store-password: password - key-store-type: PKCS12 - key-alias: selfsigned - ciphers: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, TLS_DHE_RSA_WITH_AES_128_GCM_SHA256, TLS_DHE_RSA_WITH_AES_256_GCM_SHA384, TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_RSA_WITH_AES_256_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA256, TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 - enabled-protocols: TLSv1.2 -jhipster: - http: - version: V_2_0 diff --git a/jhipster-5/bookstore-monolith/src/main/resources/config/application.yml b/jhipster-5/bookstore-monolith/src/main/resources/config/application.yml deleted file mode 100644 index 5b28b7f00d25..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/resources/config/application.yml +++ /dev/null @@ -1,140 +0,0 @@ -# =================================================================== -# Spring Boot configuration. -# -# This configuration will be overridden by the Spring profile you use, -# for example application-dev.yml if you use the "dev" profile. -# -# More information on profiles: https://www.jhipster.tech/profiles/ -# More information on configuration properties: https://www.jhipster.tech/common-application-properties/ -# =================================================================== - -# =================================================================== -# Standard Spring Boot properties. -# Full reference is available at: -# http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html -# =================================================================== - -management: - endpoints: - web: - base-path: /management - exposure: - include: ["configprops", "env", "health", "info", "threaddump", "logfile", "jhi-metrics", "prometheus" ] - endpoint: - health: - show-details: when-authorized - jhi-metrics: - enabled: true - info: - git: - mode: full - health: - mail: - enabled: false # When using the MailService, configure an SMTP server and set this to true - metrics: - export: - # Prometheus is the default metrics backend - prometheus: - enabled: true - step: 60 - binders: - jvm: - enabled: true - processor: - enabled: true - uptime: - enabled: true - logback: - enabled: true - files: - enabled: true - integration: - enabled: true - distribution: - percentiles-histogram: - all: true - percentiles: - all: 0, 0.5, 0.75, 0.95, 0.99, 1.0 - web: - server: - auto-time-requests: true - -spring: - application: - name: Bookstore - profiles: - # The commented value for `active` can be replaced with valid Spring profiles to load. - # Otherwise, it will be filled in by maven when building the WAR file - # Either way, it can be overridden by `--spring.profiles.active` value passed in the commandline or `-Dspring.profiles.active` set in `JAVA_OPTS` - active: #spring.profiles.active# - jpa: - open-in-view: false - properties: - hibernate.jdbc.time_zone: UTC - hibernate: - ddl-auto: none - naming: - physical-strategy: org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy - implicit-strategy: org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy - messages: - basename: i18n/messages - mvc: - favicon: - enabled: false - thymeleaf: - mode: HTML - -server: - servlet: - session: - cookie: - http-only: true - -# Properties to be exposed on the /info management endpoint -info: - # Comma separated list of profiles that will trigger the ribbon to show - display-ribbon-on-profiles: "dev" - -# =================================================================== -# JHipster specific properties -# -# Full reference is available at: https://www.jhipster.tech/common-application-properties/ -# =================================================================== - -jhipster: - async: - core-pool-size: 2 - max-pool-size: 50 - queue-capacity: 10000 - # By default CORS is disabled. Uncomment to enable. - #cors: - #allowed-origins: "*" - #allowed-methods: "*" - #allowed-headers: "*" - #exposed-headers: "Authorization,Link,X-Total-Count" - #allow-credentials: true - #max-age: 1800 - mail: - from: Bookstore@localhost - swagger: - default-include-pattern: /api/.* - title: Bookstore API - description: Bookstore API documentation - version: 0.0.1 - terms-of-service-url: - contact-name: - contact-url: - contact-email: - license: - license-url: - -# =================================================================== -# Application specific properties -# Add your own application properties here, see the ApplicationProperties class -# to have type-safe configuration, like in the JHipsterProperties above -# -# More documentation is available at: -# https://www.jhipster.tech/common-application-properties/ -# =================================================================== - -# application: diff --git a/jhipster-5/bookstore-monolith/src/main/resources/config/liquibase/authorities.csv b/jhipster-5/bookstore-monolith/src/main/resources/config/liquibase/authorities.csv deleted file mode 100644 index af5c6dfa186d..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/resources/config/liquibase/authorities.csv +++ /dev/null @@ -1,3 +0,0 @@ -name -ROLE_ADMIN -ROLE_USER diff --git a/jhipster-5/bookstore-monolith/src/main/resources/config/liquibase/changelog/00000000000000_initial_schema.xml b/jhipster-5/bookstore-monolith/src/main/resources/config/liquibase/changelog/00000000000000_initial_schema.xml deleted file mode 100644 index dd4b01d48744..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/resources/config/liquibase/changelog/00000000000000_initial_schema.xml +++ /dev/null @@ -1,152 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jhipster-5/bookstore-monolith/src/main/resources/config/liquibase/changelog/20190319124041_added_entity_Book.xml b/jhipster-5/bookstore-monolith/src/main/resources/config/liquibase/changelog/20190319124041_added_entity_Book.xml deleted file mode 100644 index f040387cf155..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/resources/config/liquibase/changelog/20190319124041_added_entity_Book.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jhipster-5/bookstore-monolith/src/main/resources/config/liquibase/master.xml b/jhipster-5/bookstore-monolith/src/main/resources/config/liquibase/master.xml deleted file mode 100644 index e045ee01000b..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/resources/config/liquibase/master.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - diff --git a/jhipster-5/bookstore-monolith/src/main/resources/config/liquibase/users.csv b/jhipster-5/bookstore-monolith/src/main/resources/config/liquibase/users.csv deleted file mode 100644 index b25922b69906..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/resources/config/liquibase/users.csv +++ /dev/null @@ -1,5 +0,0 @@ -id;login;password_hash;first_name;last_name;email;image_url;activated;lang_key;created_by;last_modified_by -1;system;$2a$10$mE.qmcV0mFU5NcKh73TZx.z4ueI/.bDWbj0T1BYyqP481kGGarKLG;System;System;system@localhost;;true;en;system;system -2;anonymoususer;$2a$10$j8S5d7Sr7.8VTOYNviDPOeWX8KcYILUVJBsYV83Y5NtECayypx9lO;Anonymous;User;anonymous@localhost;;true;en;system;system -3;admin;$2a$10$gSAhZrxMllrbgj/kkK9UceBPpChGWJA7SYIb1Mqo.n5aNLq1/oRrC;Administrator;Administrator;admin@localhost;;true;en;system;system -4;user;$2a$10$VEjxo0jq2YG9Rbk2HmX9S.k1uZBGYUHdUcid3g/vfiEl7lwWgOH/K;User;User;user@localhost;;true;en;system;system diff --git a/jhipster-5/bookstore-monolith/src/main/resources/config/liquibase/users_authorities.csv b/jhipster-5/bookstore-monolith/src/main/resources/config/liquibase/users_authorities.csv deleted file mode 100644 index 06c5feeeeace..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/resources/config/liquibase/users_authorities.csv +++ /dev/null @@ -1,6 +0,0 @@ -user_id;authority_name -1;ROLE_ADMIN -1;ROLE_USER -3;ROLE_ADMIN -3;ROLE_USER -4;ROLE_USER diff --git a/jhipster-5/bookstore-monolith/src/main/resources/config/tls/keystore.p12 b/jhipster-5/bookstore-monolith/src/main/resources/config/tls/keystore.p12 deleted file mode 100644 index 364fad7435e01dddac14970a653b7a82c9e83089..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2607 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 C+svr| diff --git a/jhipster-5/bookstore-monolith/src/main/resources/i18n/messages.properties b/jhipster-5/bookstore-monolith/src/main/resources/i18n/messages.properties deleted file mode 100644 index 52a60093c5aa..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/resources/i18n/messages.properties +++ /dev/null @@ -1,21 +0,0 @@ -# Error page -error.title=Your request cannot be processed -error.subtitle=Sorry, an error has occurred. -error.status=Status: -error.message=Message: - -# Activation email -email.activation.title=Bookstore account activation -email.activation.greeting=Dear {0} -email.activation.text1=Your Bookstore account has been created, please click on the URL below to activate it: -email.activation.text2=Regards, -email.signature=Bookstore Team. - -# Creation email -email.creation.text1=Your Bookstore account has been created, please click on the URL below to access it: - -# Reset email -email.reset.title=Bookstore password reset -email.reset.greeting=Dear {0} -email.reset.text1=For your Bookstore account a password reset was requested, please click on the URL below to reset it: -email.reset.text2=Regards, diff --git a/jhipster-5/bookstore-monolith/src/main/resources/logback-spring.xml b/jhipster-5/bookstore-monolith/src/main/resources/logback-spring.xml deleted file mode 100644 index 4aa548af35d1..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - - - diff --git a/jhipster-5/bookstore-monolith/src/main/resources/templates/error.html b/jhipster-5/bookstore-monolith/src/main/resources/templates/error.html deleted file mode 100644 index 08616bcf1ed2..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/resources/templates/error.html +++ /dev/null @@ -1,163 +0,0 @@ - - - - - - Your request cannot be processed - - - -

-

Your request cannot be processed :(

- -

Sorry, an error has occurred.

- - Status:  ()
- - Message: 
-
- - - -
- - diff --git a/jhipster-5/bookstore-monolith/src/main/resources/templates/mail/activationEmail.html b/jhipster-5/bookstore-monolith/src/main/resources/templates/mail/activationEmail.html deleted file mode 100644 index cb021d8e6a13..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/resources/templates/mail/activationEmail.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - JHipster activation - - - - -

- Dear -

-

- Your JHipster account has been created, please click on the URL below to activate it: -

-

- Activation link -

-

- Regards, -
- JHipster. -

- - diff --git a/jhipster-5/bookstore-monolith/src/main/resources/templates/mail/creationEmail.html b/jhipster-5/bookstore-monolith/src/main/resources/templates/mail/creationEmail.html deleted file mode 100644 index dc0cff588380..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/resources/templates/mail/creationEmail.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - JHipster creation - - - - -

- Dear -

-

- Your JHipster account has been created, please click on the URL below to access it: -

-

- Login link -

-

- Regards, -
- JHipster. -

- - diff --git a/jhipster-5/bookstore-monolith/src/main/resources/templates/mail/passwordResetEmail.html b/jhipster-5/bookstore-monolith/src/main/resources/templates/mail/passwordResetEmail.html deleted file mode 100644 index f44511265b7f..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/resources/templates/mail/passwordResetEmail.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - JHipster password reset - - - - -

- Dear -

-

- For your JHipster account a password reset was requested, please click on the URL below to reset it: -

-

- Login link -

-

- Regards, -
- JHipster. -

- - diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/404.html b/jhipster-5/bookstore-monolith/src/main/webapp/404.html deleted file mode 100644 index 3fdc0bee1a87..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/404.html +++ /dev/null @@ -1,61 +0,0 @@ - - - - - Page Not Found - - - - - -

Page Not Found

-

Sorry, but the page you were trying to view does not exist.

- - - diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/account.module.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/account/account.module.ts deleted file mode 100644 index a167cab1c24f..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/account.module.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; -import { RouterModule } from '@angular/router'; - -import { BookstoreSharedModule } from 'app/shared'; - -import { - PasswordStrengthBarComponent, - RegisterComponent, - ActivateComponent, - PasswordComponent, - PasswordResetInitComponent, - PasswordResetFinishComponent, - SettingsComponent, - accountState -} from './'; - -@NgModule({ - imports: [BookstoreSharedModule, RouterModule.forChild(accountState)], - declarations: [ - ActivateComponent, - RegisterComponent, - PasswordComponent, - PasswordStrengthBarComponent, - PasswordResetInitComponent, - PasswordResetFinishComponent, - SettingsComponent - ], - schemas: [CUSTOM_ELEMENTS_SCHEMA] -}) -export class BookstoreAccountModule {} 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 deleted file mode 100644 index cba5d407160c..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/account.route.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Routes } from '@angular/router'; - -import { settingsRoute } from './'; - -const ACCOUNT_ROUTES = [settingsRoute]; - -export const accountState: Routes = [ - { - path: '', - children: ACCOUNT_ROUTES - } -]; diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/activate/activate.component.html b/jhipster-5/bookstore-monolith/src/main/webapp/app/account/activate/activate.component.html deleted file mode 100644 index c7078ede8682..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/activate/activate.component.html +++ /dev/null @@ -1,17 +0,0 @@ -
-
-
-

Activation

- -
- Your user account has been activated. Please - sign in. -
- -
- Your user could not be activated. Please use the registration form to sign up. -
- -
-
-
diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/activate/activate.component.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/account/activate/activate.component.ts deleted file mode 100644 index 5c398073c3a4..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/activate/activate.component.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { NgbModalRef } from '@ng-bootstrap/ng-bootstrap'; -import { ActivatedRoute } from '@angular/router'; - -import { LoginModalService } from 'app/core'; -import { ActivateService } from './activate.service'; - -@Component({ - selector: 'jhi-activate', - templateUrl: './activate.component.html' -}) -export class ActivateComponent implements OnInit { - error: string; - success: string; - modalRef: NgbModalRef; - - constructor(private activateService: ActivateService, private loginModalService: LoginModalService, private route: ActivatedRoute) {} - - ngOnInit() { - this.route.queryParams.subscribe(params => { - this.activateService.get(params['key']).subscribe( - () => { - this.error = null; - this.success = 'OK'; - }, - () => { - this.success = null; - this.error = 'ERROR'; - } - ); - }); - } - - login() { - this.modalRef = this.loginModalService.open(); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/activate/activate.route.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/account/activate/activate.route.ts deleted file mode 100644 index b415b17a1839..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/activate/activate.route.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Route } from '@angular/router'; - -import { ActivateComponent } from './activate.component'; - -export const activateRoute: Route = { - path: 'activate', - component: ActivateComponent, - data: { - authorities: [], - pageTitle: 'Activation' - } -}; diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/activate/activate.service.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/account/activate/activate.service.ts deleted file mode 100644 index adade9efada7..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/activate/activate.service.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Injectable } from '@angular/core'; -import { HttpClient, HttpParams } from '@angular/common/http'; -import { Observable } from 'rxjs'; - -import { SERVER_API_URL } from 'app/app.constants'; - -@Injectable({ providedIn: 'root' }) -export class ActivateService { - constructor(private http: HttpClient) {} - - get(key: string): Observable { - return this.http.get(SERVER_API_URL + 'api/activate', { - params: new HttpParams().set('key', key) - }); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/index.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/account/index.ts deleted file mode 100644 index aeada0551ce1..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/index.ts +++ /dev/null @@ -1,19 +0,0 @@ -export * from './activate/activate.component'; -export * from './activate/activate.service'; -export * from './activate/activate.route'; -export * from './password/password.component'; -export * from './password/password-strength-bar.component'; -export * from './password/password.service'; -export * from './password/password.route'; -export * from './password-reset/finish/password-reset-finish.component'; -export * from './password-reset/finish/password-reset-finish.service'; -export * from './password-reset/finish/password-reset-finish.route'; -export * from './password-reset/init/password-reset-init.component'; -export * from './password-reset/init/password-reset-init.service'; -export * from './password-reset/init/password-reset-init.route'; -export * from './register/register.component'; -export * from './register/register.service'; -export * from './register/register.route'; -export * from './settings/settings.component'; -export * from './settings/settings.route'; -export * from './account.route'; diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.html b/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.html deleted file mode 100644 index 6d6baea694a8..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.html +++ /dev/null @@ -1,77 +0,0 @@ -
-
-
-

Reset password

- -
- The password reset key is missing. -
- -
-

Choose a new password

-
- -
-

Your password couldn't be reset. Remember a password request is only valid for 24 hours.

-
- -

- Your password has been reset. Please - sign in. -

- -
- The password and its confirmation do not match! -
- -
-
-
- - -
- - Your password is required. - - - Your password is required to be at least 4 characters. - - - Your password cannot be longer than 50 characters. - -
- -
- -
- - -
- - Your password confirmation is required. - - - Your password confirmation is required to be at least 4 characters. - - - Your password confirmation cannot be longer than 50 characters. - -
-
- -
-
- -
-
-
diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.ts deleted file mode 100644 index 72aac25c962c..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { Component, OnInit, AfterViewInit, Renderer, ElementRef } from '@angular/core'; -import { NgbModalRef } from '@ng-bootstrap/ng-bootstrap'; -import { ActivatedRoute } from '@angular/router'; - -import { LoginModalService } from 'app/core'; -import { PasswordResetFinishService } from './password-reset-finish.service'; - -@Component({ - selector: 'jhi-password-reset-finish', - templateUrl: './password-reset-finish.component.html' -}) -export class PasswordResetFinishComponent implements OnInit, AfterViewInit { - confirmPassword: string; - doNotMatch: string; - error: string; - keyMissing: boolean; - resetAccount: any; - success: string; - modalRef: NgbModalRef; - key: string; - - constructor( - private passwordResetFinishService: PasswordResetFinishService, - private loginModalService: LoginModalService, - private route: ActivatedRoute, - private elementRef: ElementRef, - private renderer: Renderer - ) {} - - ngOnInit() { - this.route.queryParams.subscribe(params => { - this.key = params['key']; - }); - this.resetAccount = {}; - this.keyMissing = !this.key; - } - - ngAfterViewInit() { - if (this.elementRef.nativeElement.querySelector('#password') != null) { - this.renderer.invokeElementMethod(this.elementRef.nativeElement.querySelector('#password'), 'focus', []); - } - } - - finishReset() { - this.doNotMatch = null; - this.error = null; - if (this.resetAccount.password !== this.confirmPassword) { - this.doNotMatch = 'ERROR'; - } else { - this.passwordResetFinishService.save({ key: this.key, newPassword: this.resetAccount.password }).subscribe( - () => { - this.success = 'OK'; - }, - () => { - this.success = null; - this.error = 'ERROR'; - } - ); - } - } - - login() { - this.modalRef = this.loginModalService.open(); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password-reset/finish/password-reset-finish.route.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password-reset/finish/password-reset-finish.route.ts deleted file mode 100644 index a09cba937769..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password-reset/finish/password-reset-finish.route.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Route } from '@angular/router'; - -import { PasswordResetFinishComponent } from './password-reset-finish.component'; - -export const passwordResetFinishRoute: Route = { - path: 'reset/finish', - component: PasswordResetFinishComponent, - data: { - authorities: [], - pageTitle: 'Password' - } -}; diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password-reset/finish/password-reset-finish.service.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password-reset/finish/password-reset-finish.service.ts deleted file mode 100644 index 706bdaa5b146..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password-reset/finish/password-reset-finish.service.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { Injectable } from '@angular/core'; -import { HttpClient } from '@angular/common/http'; -import { Observable } from 'rxjs'; - -import { SERVER_API_URL } from 'app/app.constants'; - -@Injectable({ providedIn: 'root' }) -export class PasswordResetFinishService { - constructor(private http: HttpClient) {} - - save(keyAndPassword: any): Observable { - return this.http.post(SERVER_API_URL + 'api/account/reset-password/finish', keyAndPassword); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password-reset/init/password-reset-init.component.html b/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password-reset/init/password-reset-init.component.html deleted file mode 100644 index 7fe7b0bdecf9..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password-reset/init/password-reset-init.component.html +++ /dev/null @@ -1,46 +0,0 @@ -
-
-
-

Reset your password

- -
- Email address isn't registered! Please check and try again. -
- -
-

Enter the email address you used to register.

-
- -
-

Check your emails for details on how to reset your password.

-
- -
-
- - -
- - Your email is required. - - - Your email is invalid. - - - Your email is required to be at least 5 characters. - - - Your email cannot be longer than 100 characters. - -
-
- -
-
-
-
diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password-reset/init/password-reset-init.component.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password-reset/init/password-reset-init.component.ts deleted file mode 100644 index e32617341c7e..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password-reset/init/password-reset-init.component.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { Component, OnInit, AfterViewInit, Renderer, ElementRef } from '@angular/core'; -import { EMAIL_NOT_FOUND_TYPE } from 'app/shared'; -import { PasswordResetInitService } from './password-reset-init.service'; - -@Component({ - selector: 'jhi-password-reset-init', - templateUrl: './password-reset-init.component.html' -}) -export class PasswordResetInitComponent implements OnInit, AfterViewInit { - error: string; - errorEmailNotExists: string; - resetAccount: any; - success: string; - - constructor(private passwordResetInitService: PasswordResetInitService, private elementRef: ElementRef, private renderer: Renderer) {} - - ngOnInit() { - this.resetAccount = {}; - } - - ngAfterViewInit() { - this.renderer.invokeElementMethod(this.elementRef.nativeElement.querySelector('#email'), 'focus', []); - } - - requestReset() { - this.error = null; - this.errorEmailNotExists = null; - - this.passwordResetInitService.save(this.resetAccount.email).subscribe( - () => { - this.success = 'OK'; - }, - response => { - this.success = null; - if (response.status === 400 && response.error.type === EMAIL_NOT_FOUND_TYPE) { - this.errorEmailNotExists = 'ERROR'; - } else { - this.error = 'ERROR'; - } - } - ); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password-reset/init/password-reset-init.route.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password-reset/init/password-reset-init.route.ts deleted file mode 100644 index a1708c98b30b..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password-reset/init/password-reset-init.route.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Route } from '@angular/router'; - -import { PasswordResetInitComponent } from './password-reset-init.component'; - -export const passwordResetInitRoute: Route = { - path: 'reset/request', - component: PasswordResetInitComponent, - data: { - authorities: [], - pageTitle: 'Password' - } -}; diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password-reset/init/password-reset-init.service.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password-reset/init/password-reset-init.service.ts deleted file mode 100644 index c24ccf94d2d4..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password-reset/init/password-reset-init.service.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { Injectable } from '@angular/core'; -import { HttpClient } from '@angular/common/http'; -import { Observable } from 'rxjs'; - -import { SERVER_API_URL } from 'app/app.constants'; - -@Injectable({ providedIn: 'root' }) -export class PasswordResetInitService { - constructor(private http: HttpClient) {} - - save(mail: string): Observable { - return this.http.post(SERVER_API_URL + 'api/account/reset-password/init', mail); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password/password-strength-bar.component.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password/password-strength-bar.component.ts deleted file mode 100644 index 4159fde88239..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password/password-strength-bar.component.ts +++ /dev/null @@ -1,85 +0,0 @@ -import { Component, ElementRef, Input, Renderer } from '@angular/core'; - -@Component({ - selector: 'jhi-password-strength-bar', - template: ` -
- Password strength: -
    -
  • -
  • -
  • -
  • -
  • -
-
- `, - styleUrls: ['password-strength-bar.scss'] -}) -export class PasswordStrengthBarComponent { - colors = ['#F00', '#F90', '#FF0', '#9F0', '#0F0']; - - constructor(private renderer: Renderer, private elementRef: ElementRef) {} - - measureStrength(p: string): number { - let force = 0; - const regex = /[$-/:-?{-~!"^_`\[\]]/g; // " - const lowerLetters = /[a-z]+/.test(p); - const upperLetters = /[A-Z]+/.test(p); - const numbers = /[0-9]+/.test(p); - const symbols = regex.test(p); - - const flags = [lowerLetters, upperLetters, numbers, symbols]; - const passedMatches = flags.filter((isMatchedFlag: boolean) => { - return isMatchedFlag === true; - }).length; - - force += 2 * p.length + (p.length >= 10 ? 1 : 0); - force += passedMatches * 10; - - // penalty (short password) - force = p.length <= 6 ? Math.min(force, 10) : force; - - // penalty (poor variety of characters) - force = passedMatches === 1 ? Math.min(force, 10) : force; - force = passedMatches === 2 ? Math.min(force, 20) : force; - force = passedMatches === 3 ? Math.min(force, 40) : force; - - return force; - } - - getColor(s: number): any { - let idx = 0; - if (s <= 10) { - idx = 0; - } else if (s <= 20) { - idx = 1; - } else if (s <= 30) { - idx = 2; - } else if (s <= 40) { - idx = 3; - } else { - idx = 4; - } - return { idx: idx + 1, col: this.colors[idx] }; - } - - @Input() - set passwordToCheck(password: string) { - if (password) { - const c = this.getColor(this.measureStrength(password)); - const element = this.elementRef.nativeElement; - if (element.className) { - this.renderer.setElementClass(element, element.className, false); - } - const lis = element.getElementsByTagName('li'); - for (let i = 0; i < lis.length; i++) { - if (i < c.idx) { - this.renderer.setElementStyle(lis[i], 'backgroundColor', c.col); - } else { - this.renderer.setElementStyle(lis[i], 'backgroundColor', '#DDD'); - } - } - } - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password/password-strength-bar.scss b/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password/password-strength-bar.scss deleted file mode 100644 index 9744b9b78478..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password/password-strength-bar.scss +++ /dev/null @@ -1,23 +0,0 @@ -/* ========================================================================== -start Password strength bar style -========================================================================== */ -ul#strength { - display: inline; - list-style: none; - margin: 0; - margin-left: 15px; - padding: 0; - vertical-align: 2px; -} - -.point { - background: #ddd; - border-radius: 2px; - display: inline-block; - height: 5px; - margin-right: 1px; - width: 20px; - &:last-child { - margin: 0 !important; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password/password.component.html b/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password/password.component.html deleted file mode 100644 index 79fb60c3bc2e..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password/password.component.html +++ /dev/null @@ -1,77 +0,0 @@ -
-
-
-

Password for [{{account.login}}]

- -
- Password changed! -
-
- An error has occurred! The password could not be changed. -
- -
- The password and its confirmation do not match! -
- -
- -
- - -
- - Your password is required. - -
-
-
- - -
- - Your password is required. - - - Your password is required to be at least 4 characters. - - - Your password cannot be longer than 50 characters. - -
- -
-
- - -
- - Your confirmation password is required. - - - Your confirmation password is required to be at least 4 characters. - - - Your confirmation password cannot be longer than 50 characters. - -
-
- - -
-
-
-
diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password/password.component.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password/password.component.ts deleted file mode 100644 index 3004effa57b4..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password/password.component.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { Component, OnInit } from '@angular/core'; - -import { AccountService } from 'app/core'; -import { PasswordService } from './password.service'; - -@Component({ - selector: 'jhi-password', - templateUrl: './password.component.html' -}) -export class PasswordComponent implements OnInit { - doNotMatch: string; - error: string; - success: string; - account: any; - currentPassword: string; - newPassword: string; - confirmPassword: string; - - constructor(private passwordService: PasswordService, private accountService: AccountService) {} - - ngOnInit() { - this.accountService.identity().then(account => { - this.account = account; - }); - } - - changePassword() { - if (this.newPassword !== this.confirmPassword) { - this.error = null; - this.success = null; - this.doNotMatch = 'ERROR'; - } else { - this.doNotMatch = null; - this.passwordService.save(this.newPassword, this.currentPassword).subscribe( - () => { - this.error = null; - this.success = 'OK'; - }, - () => { - this.success = null; - this.error = 'ERROR'; - } - ); - } - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password/password.route.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password/password.route.ts deleted file mode 100644 index 4bb115fd4408..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password/password.route.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { Route } from '@angular/router'; - -import { UserRouteAccessService } from 'app/core'; -import { PasswordComponent } from './password.component'; - -export const passwordRoute: Route = { - path: 'password', - component: PasswordComponent, - data: { - authorities: ['ROLE_USER'], - pageTitle: 'Password' - }, - canActivate: [UserRouteAccessService] -}; diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password/password.service.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password/password.service.ts deleted file mode 100644 index 028df7b0e453..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/password/password.service.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { Injectable } from '@angular/core'; -import { HttpClient } from '@angular/common/http'; -import { Observable } from 'rxjs'; - -import { SERVER_API_URL } from 'app/app.constants'; - -@Injectable({ providedIn: 'root' }) -export class PasswordService { - constructor(private http: HttpClient) {} - - save(newPassword: string, currentPassword: string): Observable { - return this.http.post(SERVER_API_URL + 'api/account/change-password', { currentPassword, newPassword }); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/register/register.component.html b/jhipster-5/bookstore-monolith/src/main/webapp/app/account/register/register.component.html deleted file mode 100644 index 596f782828dd..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/register/register.component.html +++ /dev/null @@ -1,124 +0,0 @@ -
-
-
-

Registration

- -
- Registration saved! Please check your email for confirmation. -
- -
- Registration failed! Please try again later. -
- -
- Login name already registered! Please choose another one. -
- -
- Email is already in use! Please choose another one. -
- -
- The password and its confirmation do not match! -
-
-
-
-
-
-
- - -
- - Your username is required. - - - Your username is required to be at least 1 character. - - - Your username cannot be longer than 50 characters. - - - Your username can only contain letters and digits. - -
-
-
- - -
- - Your email is required. - - - Your email is invalid. - - - Your email is required to be at least 5 characters. - - - Your email cannot be longer than 100 characters. - -
-
-
- - -
- - Your password is required. - - - Your password is required to be at least 4 characters. - - - Your password cannot be longer than 50 characters. - -
- -
-
- - -
- - Your confirmation password is required. - - - Your confirmation password is required to be at least 4 characters. - - - Your confirmation password cannot be longer than 50 characters. - -
-
- - -
-

-
- If you want to - sign in, you can try the default accounts:
- Administrator (login="admin" and password="admin")
- User (login="user" and password="user").
-
-
-
-
diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/register/register.component.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/account/register/register.component.ts deleted file mode 100644 index 85244d2970b1..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/register/register.component.ts +++ /dev/null @@ -1,71 +0,0 @@ -import { Component, OnInit, AfterViewInit, Renderer, ElementRef } from '@angular/core'; -import { HttpErrorResponse } from '@angular/common/http'; -import { NgbModalRef } from '@ng-bootstrap/ng-bootstrap'; - -import { EMAIL_ALREADY_USED_TYPE, LOGIN_ALREADY_USED_TYPE } from 'app/shared'; -import { LoginModalService } from 'app/core'; -import { Register } from './register.service'; - -@Component({ - selector: 'jhi-register', - templateUrl: './register.component.html' -}) -export class RegisterComponent implements OnInit, AfterViewInit { - confirmPassword: string; - doNotMatch: string; - error: string; - errorEmailExists: string; - errorUserExists: string; - registerAccount: any; - success: boolean; - modalRef: NgbModalRef; - - constructor( - private loginModalService: LoginModalService, - private registerService: Register, - private elementRef: ElementRef, - private renderer: Renderer - ) {} - - ngOnInit() { - this.success = false; - this.registerAccount = {}; - } - - ngAfterViewInit() { - this.renderer.invokeElementMethod(this.elementRef.nativeElement.querySelector('#login'), 'focus', []); - } - - register() { - if (this.registerAccount.password !== this.confirmPassword) { - this.doNotMatch = 'ERROR'; - } else { - this.doNotMatch = null; - this.error = null; - this.errorUserExists = null; - this.errorEmailExists = null; - this.registerAccount.langKey = 'en'; - this.registerService.save(this.registerAccount).subscribe( - () => { - this.success = true; - }, - response => this.processError(response) - ); - } - } - - openLogin() { - this.modalRef = this.loginModalService.open(); - } - - private processError(response: HttpErrorResponse) { - this.success = null; - if (response.status === 400 && response.error.type === LOGIN_ALREADY_USED_TYPE) { - this.errorUserExists = 'ERROR'; - } else if (response.status === 400 && response.error.type === EMAIL_ALREADY_USED_TYPE) { - this.errorEmailExists = 'ERROR'; - } else { - this.error = 'ERROR'; - } - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/register/register.route.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/account/register/register.route.ts deleted file mode 100644 index 626cd32ff928..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/register/register.route.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Route } from '@angular/router'; - -import { RegisterComponent } from './register.component'; - -export const registerRoute: Route = { - path: 'register', - component: RegisterComponent, - data: { - authorities: [], - pageTitle: 'Registration' - } -}; diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/register/register.service.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/account/register/register.service.ts deleted file mode 100644 index dfe6f1da6a4a..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/register/register.service.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { Injectable } from '@angular/core'; -import { HttpClient } from '@angular/common/http'; -import { Observable } from 'rxjs'; - -import { SERVER_API_URL } from 'app/app.constants'; - -@Injectable({ providedIn: 'root' }) -export class Register { - constructor(private http: HttpClient) {} - - save(account: any): Observable { - return this.http.post(SERVER_API_URL + 'api/register', account); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/settings/settings.component.html b/jhipster-5/bookstore-monolith/src/main/webapp/app/account/settings/settings.component.html deleted file mode 100644 index bae1bb67e68d..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/settings/settings.component.html +++ /dev/null @@ -1,80 +0,0 @@ -
-
-
-

User settings for [{{settingsAccount.login}}]

- -
- Settings saved! -
- - - -
- -
- - -
- - Your first name is required. - - - Your first name is required to be at least 1 character. - - - Your first name cannot be longer than 50 characters. - -
-
-
- - -
- - Your last name is required. - - - Your last name is required to be at least 1 character. - - - Your last name cannot be longer than 50 characters. - -
-
-
- - -
- - Your email is required. - - - Your email is invalid. - - - Your email is required to be at least 5 characters. - - - Your email cannot be longer than 100 characters. - -
-
- -
-
-
- -
diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/settings/settings.component.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/account/settings/settings.component.ts deleted file mode 100644 index 92afaca79359..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/settings/settings.component.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { Component, OnInit } from '@angular/core'; - -import { AccountService } from 'app/core'; - -@Component({ - selector: 'jhi-settings', - templateUrl: './settings.component.html' -}) -export class SettingsComponent implements OnInit { - error: string; - success: string; - settingsAccount: any; - languages: any[]; - - constructor(private accountService: AccountService) {} - - ngOnInit() { - this.accountService.identity().then(account => { - this.settingsAccount = this.copyAccount(account); - }); - } - - save() { - this.accountService.save(this.settingsAccount).subscribe( - () => { - this.error = null; - this.success = 'OK'; - this.accountService.identity(true).then(account => { - this.settingsAccount = this.copyAccount(account); - }); - }, - () => { - this.success = null; - this.error = 'ERROR'; - } - ); - } - - copyAccount(account) { - return { - activated: account.activated, - email: account.email, - firstName: account.firstName, - langKey: account.langKey, - lastName: account.lastName, - login: account.login, - imageUrl: account.imageUrl - }; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/settings/settings.route.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/account/settings/settings.route.ts deleted file mode 100644 index 3c9cf18e15a1..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/settings/settings.route.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { Route } from '@angular/router'; - -import { UserRouteAccessService } from 'app/core'; -import { SettingsComponent } from './settings.component'; - -export const settingsRoute: Route = { - path: 'settings', - component: SettingsComponent, - data: { - authorities: ['ROLE_USER'], - pageTitle: 'Settings' - }, - canActivate: [UserRouteAccessService] -}; diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/admin.module.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/admin.module.ts deleted file mode 100644 index 4e46e0fe13e2..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/admin.module.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; -import { RouterModule } from '@angular/router'; -import { BookstoreSharedModule } from 'app/shared'; -/* jhipster-needle-add-admin-module-import - JHipster will add admin modules imports here */ - -import { - adminState, - AuditsComponent, - UserMgmtComponent, - UserMgmtDetailComponent, - UserMgmtUpdateComponent, - UserMgmtDeleteDialogComponent, - LogsComponent, - JhiMetricsMonitoringComponent, - JhiHealthModalComponent, - JhiHealthCheckComponent, - JhiConfigurationComponent, - JhiDocsComponent -} from './'; - -@NgModule({ - imports: [ - BookstoreSharedModule, - RouterModule.forChild(adminState) - /* jhipster-needle-add-admin-module - JHipster will add admin modules here */ - ], - declarations: [ - AuditsComponent, - UserMgmtComponent, - UserMgmtDetailComponent, - UserMgmtUpdateComponent, - UserMgmtDeleteDialogComponent, - LogsComponent, - JhiConfigurationComponent, - JhiHealthCheckComponent, - JhiHealthModalComponent, - JhiDocsComponent, - JhiMetricsMonitoringComponent - ], - entryComponents: [UserMgmtDeleteDialogComponent, JhiHealthModalComponent], - schemas: [CUSTOM_ELEMENTS_SCHEMA] -}) -export class BookstoreAdminModule {} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/admin.route.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/admin.route.ts deleted file mode 100644 index 88c7e575f049..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/admin.route.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Routes } from '@angular/router'; - -import { auditsRoute, configurationRoute, docsRoute, healthRoute, logsRoute, metricsRoute, userMgmtRoute } from './'; - -import { UserRouteAccessService } from 'app/core'; - -const ADMIN_ROUTES = [auditsRoute, configurationRoute, docsRoute, healthRoute, logsRoute, ...userMgmtRoute, metricsRoute]; - -export const adminState: Routes = [ - { - path: '', - data: { - authorities: ['ROLE_ADMIN'] - }, - canActivate: [UserRouteAccessService], - children: ADMIN_ROUTES - } -]; diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/audits/audit-data.model.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/audits/audit-data.model.ts deleted file mode 100644 index a2506c4090df..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/audits/audit-data.model.ts +++ /dev/null @@ -1,3 +0,0 @@ -export class AuditData { - constructor(public remoteAddress: string, public sessionId: string) {} -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/audits/audit.model.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/audits/audit.model.ts deleted file mode 100644 index 6497fb444e35..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/audits/audit.model.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { AuditData } from './audit-data.model'; - -export class Audit { - constructor(public data: AuditData, public principal: string, public timestamp: string, public type: string) {} -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/audits/audits.component.html b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/audits/audits.component.html deleted file mode 100644 index 38af44044a46..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/audits/audits.component.html +++ /dev/null @@ -1,52 +0,0 @@ -
-

Audits

- -
-
-

Filter by date

-
-
- from -
- - -
- To -
- -
-
-
- -
- - - - - - - - - - - - - - - - - -
DateUserStateExtra data
{{audit.timestamp| date:'medium'}}{{audit.principal}}{{audit.type}} - {{audit.data.message}} - Remote Address {{audit.data.remoteAddress}} -
-
-
-
- -
-
- -
-
-
diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/audits/audits.component.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/audits/audits.component.ts deleted file mode 100644 index 21739275f250..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/audits/audits.component.ts +++ /dev/null @@ -1,126 +0,0 @@ -import { Component, OnInit, OnDestroy } from '@angular/core'; -import { HttpResponse } from '@angular/common/http'; -import { DatePipe } from '@angular/common'; -import { ActivatedRoute, Router } from '@angular/router'; -import { JhiParseLinks, JhiAlertService } from 'ng-jhipster'; - -import { ITEMS_PER_PAGE } from 'app/shared'; -import { Audit } from './audit.model'; -import { AuditsService } from './audits.service'; - -@Component({ - selector: 'jhi-audit', - templateUrl: './audits.component.html' -}) -export class AuditsComponent implements OnInit, OnDestroy { - audits: Audit[]; - fromDate: string; - itemsPerPage: any; - links: any; - page: number; - routeData: any; - predicate: any; - previousPage: any; - reverse: boolean; - toDate: string; - totalItems: number; - - constructor( - private auditsService: AuditsService, - private alertService: JhiAlertService, - private parseLinks: JhiParseLinks, - private activatedRoute: ActivatedRoute, - private datePipe: DatePipe, - private router: Router - ) { - this.itemsPerPage = ITEMS_PER_PAGE; - this.routeData = this.activatedRoute.data.subscribe(data => { - this.page = data['pagingParams'].page; - this.previousPage = data['pagingParams'].page; - this.reverse = data['pagingParams'].ascending; - this.predicate = data['pagingParams'].predicate; - }); - } - - ngOnInit() { - this.today(); - this.previousMonth(); - this.loadAll(); - } - - ngOnDestroy() { - this.routeData.unsubscribe(); - } - - previousMonth() { - const dateFormat = 'yyyy-MM-dd'; - let fromDate: Date = new Date(); - - if (fromDate.getMonth() === 0) { - fromDate = new Date(fromDate.getFullYear() - 1, 11, fromDate.getDate()); - } else { - fromDate = new Date(fromDate.getFullYear(), fromDate.getMonth() - 1, fromDate.getDate()); - } - - this.fromDate = this.datePipe.transform(fromDate, dateFormat); - } - - today() { - const dateFormat = 'yyyy-MM-dd'; - // Today + 1 day - needed if the current day must be included - const today: Date = new Date(); - today.setDate(today.getDate() + 1); - const date = new Date(today.getFullYear(), today.getMonth(), today.getDate()); - this.toDate = this.datePipe.transform(date, dateFormat); - } - - loadAll() { - this.auditsService - .query({ - page: this.page - 1, - size: this.itemsPerPage, - sort: this.sort(), - fromDate: this.fromDate, - toDate: this.toDate - }) - .subscribe( - (res: HttpResponse) => this.onSuccess(res.body, res.headers), - (res: HttpResponse) => this.onError(res.body) - ); - } - - sort() { - const result = [this.predicate + ',' + (this.reverse ? 'asc' : 'desc')]; - if (this.predicate !== 'id') { - result.push('id'); - } - return result; - } - - loadPage(page: number) { - if (page !== this.previousPage) { - this.previousPage = page; - this.transition(); - } - } - - transition() { - this.router.navigate(['/admin/audits'], { - queryParams: { - page: this.page, - sort: this.predicate + ',' + (this.reverse ? 'asc' : 'desc') - } - }); - this.loadAll(); - } - - private onSuccess(data, headers) { - this.links = this.parseLinks.parse(headers.get('link')); - this.totalItems = headers.get('X-Total-Count'); - this.audits = data; - } - - private onError(error) { - this.alertService.error(error.error, error.message, null); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/audits/audits.route.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/audits/audits.route.ts deleted file mode 100644 index 87af5c6e8cf7..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/audits/audits.route.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { Injectable } from '@angular/core'; -import { Resolve, ActivatedRouteSnapshot, RouterStateSnapshot, Route } from '@angular/router'; -import { JhiPaginationUtil, JhiResolvePagingParams } from 'ng-jhipster'; - -import { AuditsComponent } from './audits.component'; - -export const auditsRoute: Route = { - path: 'audits', - component: AuditsComponent, - resolve: { - pagingParams: JhiResolvePagingParams - }, - data: { - pageTitle: 'Audits', - defaultSort: 'auditEventDate,desc' - } -}; diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/audits/audits.service.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/audits/audits.service.ts deleted file mode 100644 index 78e8cca7e2ed..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/audits/audits.service.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Injectable } from '@angular/core'; -import { HttpClient, HttpParams, HttpResponse } from '@angular/common/http'; -import { Observable } from 'rxjs'; - -import { createRequestOption } from 'app/shared'; -import { SERVER_API_URL } from 'app/app.constants'; -import { Audit } from './audit.model'; - -@Injectable({ providedIn: 'root' }) -export class AuditsService { - constructor(private http: HttpClient) {} - - query(req: any): Observable> { - const params: HttpParams = createRequestOption(req); - params.set('fromDate', req.fromDate); - params.set('toDate', req.toDate); - - const requestURL = SERVER_API_URL + 'management/audits'; - - return this.http.get(requestURL, { - params, - observe: 'response' - }); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/configuration/configuration.component.html b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/configuration/configuration.component.html deleted file mode 100644 index 02a4a9643301..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/configuration/configuration.component.html +++ /dev/null @@ -1,46 +0,0 @@ -
-

Configuration

- - Filter (by prefix) -

Spring configuration

- - - - - - - - - - - - - -
PrefixProperties
{{entry.prefix}} -
-
{{key}}
-
- {{entry.properties[key] | json}} -
-
-
-
-

{{key}}

- - - - - - - - - - - - - -
PropertyValue
{{item.key}} - {{item.val}} -
-
-
diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/configuration/configuration.component.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/configuration/configuration.component.ts deleted file mode 100644 index 6867210c91e9..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/configuration/configuration.component.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { Component, OnInit } from '@angular/core'; - -import { JhiConfigurationService } from './configuration.service'; - -@Component({ - selector: 'jhi-configuration', - templateUrl: './configuration.component.html' -}) -export class JhiConfigurationComponent implements OnInit { - allConfiguration: any = null; - configuration: any = null; - configKeys: any[]; - filter: string; - orderProp: string; - reverse: boolean; - - constructor(private configurationService: JhiConfigurationService) { - this.configKeys = []; - this.filter = ''; - this.orderProp = 'prefix'; - this.reverse = false; - } - - keys(dict): Array { - return dict === undefined ? [] : Object.keys(dict); - } - - ngOnInit() { - this.configurationService.get().subscribe(configuration => { - this.configuration = configuration; - - for (const config of configuration) { - if (config.properties !== undefined) { - this.configKeys.push(Object.keys(config.properties)); - } - } - }); - - this.configurationService.getEnv().subscribe(configuration => { - this.allConfiguration = configuration; - }); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/configuration/configuration.route.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/configuration/configuration.route.ts deleted file mode 100644 index f4ad9c3688fa..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/configuration/configuration.route.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Route } from '@angular/router'; - -import { JhiConfigurationComponent } from './configuration.component'; - -export const configurationRoute: Route = { - path: 'jhi-configuration', - component: JhiConfigurationComponent, - data: { - pageTitle: 'Configuration' - } -}; diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/configuration/configuration.service.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/configuration/configuration.service.ts deleted file mode 100644 index 5f9dfd491c56..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/configuration/configuration.service.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { Injectable } from '@angular/core'; -import { HttpClient, HttpResponse } from '@angular/common/http'; -import { Observable } from 'rxjs'; -import { map } from 'rxjs/operators'; - -import { SERVER_API_URL } from 'app/app.constants'; - -@Injectable({ providedIn: 'root' }) -export class JhiConfigurationService { - constructor(private http: HttpClient) {} - - get(): Observable { - return this.http.get(SERVER_API_URL + 'management/configprops', { observe: 'response' }).pipe( - map((res: HttpResponse) => { - const properties: any[] = []; - const propertiesObject = this.getConfigPropertiesObjects(res.body); - for (const key in propertiesObject) { - if (propertiesObject.hasOwnProperty(key)) { - properties.push(propertiesObject[key]); - } - } - - return properties.sort((propertyA, propertyB) => { - return propertyA.prefix === propertyB.prefix ? 0 : propertyA.prefix < propertyB.prefix ? -1 : 1; - }); - }) - ); - } - - getConfigPropertiesObjects(res: Object) { - // This code is for Spring Boot 2 - if (res['contexts'] !== undefined) { - for (const key in res['contexts']) { - // If the key is not bootstrap, it will be the ApplicationContext Id - // For default app, it is baseName - // For microservice, it is baseName-1 - if (!key.startsWith('bootstrap')) { - return res['contexts'][key]['beans']; - } - } - } - // by default, use the default ApplicationContext Id - return res['contexts']['Bookstore']['beans']; - } - - getEnv(): Observable { - return this.http.get(SERVER_API_URL + 'management/env', { observe: 'response' }).pipe( - map((res: HttpResponse) => { - const properties: any = {}; - const propertySources = res.body['propertySources']; - - for (const propertyObject of propertySources) { - const name = propertyObject['name']; - const detailProperties = propertyObject['properties']; - const vals: any[] = []; - for (const keyDetail in detailProperties) { - if (detailProperties.hasOwnProperty(keyDetail)) { - vals.push({ key: keyDetail, val: detailProperties[keyDetail]['value'] }); - } - } - properties[name] = vals; - } - return properties; - }) - ); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/docs/docs.component.html b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/docs/docs.component.html deleted file mode 100644 index 30efbbb93ee5..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/docs/docs.component.html +++ /dev/null @@ -1,2 +0,0 @@ - diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/docs/docs.component.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/docs/docs.component.ts deleted file mode 100644 index b338e7c3a669..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/docs/docs.component.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Component } from '@angular/core'; - -@Component({ - selector: 'jhi-docs', - templateUrl: './docs.component.html' -}) -export class JhiDocsComponent { - constructor() {} -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/docs/docs.route.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/docs/docs.route.ts deleted file mode 100644 index d7df51b9356b..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/docs/docs.route.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Route } from '@angular/router'; - -import { JhiDocsComponent } from './docs.component'; - -export const docsRoute: Route = { - path: 'docs', - component: JhiDocsComponent, - data: { - pageTitle: 'API' - } -}; diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/health/health-modal.component.html b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/health/health-modal.component.html deleted file mode 100644 index efc125e3a08e..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/health/health-modal.component.html +++ /dev/null @@ -1,35 +0,0 @@ - - - diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/health/health-modal.component.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/health/health-modal.component.ts deleted file mode 100644 index 28128bf32158..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/health/health-modal.component.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { Component } from '@angular/core'; -import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; - -import { JhiHealthService } from './health.service'; - -@Component({ - selector: 'jhi-health-modal', - templateUrl: './health-modal.component.html' -}) -export class JhiHealthModalComponent { - currentHealth: any; - - constructor(private healthService: JhiHealthService, public activeModal: NgbActiveModal) {} - - baseName(name) { - return this.healthService.getBaseName(name); - } - - subSystemName(name) { - return this.healthService.getSubSystemName(name); - } - - readableValue(value: number) { - if (this.currentHealth.name === 'diskSpace') { - // Should display storage space in an human readable unit - const val = value / 1073741824; - if (val > 1) { - // Value - return val.toFixed(2) + ' GB'; - } else { - return (value / 1048576).toFixed(2) + ' MB'; - } - } - - if (typeof value === 'object') { - return JSON.stringify(value); - } else { - return value.toString(); - } - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/health/health.component.html b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/health/health.component.html deleted file mode 100644 index b314daa0ba18..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/health/health.component.html +++ /dev/null @@ -1,34 +0,0 @@ -
-

- Health Checks - -

-
- - - - - - - - - - - - - - - -
Service NameStatusDetails
{{ baseName(health.name) }} {{subSystemName(health.name)}} - - {{health.status}} - - - - - -
-
-
diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/health/health.component.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/health/health.component.ts deleted file mode 100644 index ada3ef62f496..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/health/health.component.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; - -import { JhiHealthService } from './health.service'; -import { JhiHealthModalComponent } from './health-modal.component'; - -@Component({ - selector: 'jhi-health', - templateUrl: './health.component.html' -}) -export class JhiHealthCheckComponent implements OnInit { - healthData: any; - updatingHealth: boolean; - - constructor(private modalService: NgbModal, private healthService: JhiHealthService) {} - - ngOnInit() { - this.refresh(); - } - - baseName(name: string) { - return this.healthService.getBaseName(name); - } - - getBadgeClass(statusState) { - if (statusState === 'UP') { - return 'badge-success'; - } else { - return 'badge-danger'; - } - } - - refresh() { - this.updatingHealth = true; - - this.healthService.checkHealth().subscribe( - health => { - this.healthData = this.healthService.transformHealthData(health); - this.updatingHealth = false; - }, - error => { - if (error.status === 503) { - this.healthData = this.healthService.transformHealthData(error.error); - this.updatingHealth = false; - } - } - ); - } - - showHealth(health: any) { - const modalRef = this.modalService.open(JhiHealthModalComponent); - modalRef.componentInstance.currentHealth = health; - modalRef.result.then( - result => { - // Left blank intentionally, nothing to do here - }, - reason => { - // Left blank intentionally, nothing to do here - } - ); - } - - subSystemName(name: string) { - return this.healthService.getSubSystemName(name); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/health/health.route.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/health/health.route.ts deleted file mode 100644 index 0b6777565110..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/health/health.route.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Route } from '@angular/router'; - -import { JhiHealthCheckComponent } from './health.component'; - -export const healthRoute: Route = { - path: 'jhi-health', - component: JhiHealthCheckComponent, - data: { - pageTitle: 'Health Checks' - } -}; diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/health/health.service.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/health/health.service.ts deleted file mode 100644 index 4c1b0e5ec869..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/health/health.service.ts +++ /dev/null @@ -1,133 +0,0 @@ -import { Injectable } from '@angular/core'; -import { HttpClient } from '@angular/common/http'; -import { Observable } from 'rxjs'; - -import { SERVER_API_URL } from 'app/app.constants'; - -@Injectable({ providedIn: 'root' }) -export class JhiHealthService { - separator: string; - - constructor(private http: HttpClient) { - this.separator = '.'; - } - - checkHealth(): Observable { - return this.http.get(SERVER_API_URL + 'management/health'); - } - - transformHealthData(data): any { - const response = []; - this.flattenHealthData(response, null, data.details); - return response; - } - - getBaseName(name): string { - if (name) { - const split = name.split('.'); - return split[0]; - } - } - - getSubSystemName(name): string { - if (name) { - const split = name.split('.'); - split.splice(0, 1); - const remainder = split.join('.'); - return remainder ? ' - ' + remainder : ''; - } - } - - /* private methods */ - private addHealthObject(result, isLeaf, healthObject, name): any { - const healthData: any = { - name - }; - - const details = {}; - let hasDetails = false; - - for (const key in healthObject) { - if (healthObject.hasOwnProperty(key)) { - const value = healthObject[key]; - if (key === 'status' || key === 'error') { - healthData[key] = value; - } else { - if (!this.isHealthObject(value)) { - details[key] = value; - hasDetails = true; - } - } - } - } - - // Add the details - if (hasDetails) { - healthData.details = details; - } - - // Only add nodes if they provide additional information - if (isLeaf || hasDetails || healthData.error) { - result.push(healthData); - } - return healthData; - } - - private flattenHealthData(result, path, data): any { - for (const key in data) { - if (data.hasOwnProperty(key)) { - const value = data[key]; - if (this.isHealthObject(value)) { - if (this.hasSubSystem(value)) { - this.addHealthObject(result, false, value, this.getModuleName(path, key)); - this.flattenHealthData(result, this.getModuleName(path, key), value); - } else { - this.addHealthObject(result, true, value, this.getModuleName(path, key)); - } - } - } - } - return result; - } - - private getModuleName(path, name): string { - let result; - if (path && name) { - result = path + this.separator + name; - } else if (path) { - result = path; - } else if (name) { - result = name; - } else { - result = ''; - } - return result; - } - - private hasSubSystem(healthObject): boolean { - let result = false; - - for (const key in healthObject) { - if (healthObject.hasOwnProperty(key)) { - const value = healthObject[key]; - if (value && value.status) { - result = true; - } - } - } - return result; - } - - private isHealthObject(healthObject): boolean { - let result = false; - - for (const key in healthObject) { - if (healthObject.hasOwnProperty(key)) { - if (key === 'status') { - result = true; - } - } - } - return result; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/index.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/index.ts deleted file mode 100644 index 7f631ffb9b08..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/index.ts +++ /dev/null @@ -1,27 +0,0 @@ -export * from './audits/audits.component'; -export * from './audits/audits.service'; -export * from './audits/audits.route'; -export * from './audits/audit.model'; -export * from './audits/audit-data.model'; -export * from './configuration/configuration.component'; -export * from './configuration/configuration.service'; -export * from './configuration/configuration.route'; -export * from './docs/docs.component'; -export * from './docs/docs.route'; -export * from './health/health.component'; -export * from './health/health-modal.component'; -export * from './health/health.service'; -export * from './health/health.route'; -export * from './logs/logs.component'; -export * from './logs/logs.service'; -export * from './logs/logs.route'; -export * from './logs/log.model'; -export * from './metrics/metrics.component'; -export * from './metrics/metrics.service'; -export * from './metrics/metrics.route'; -export * from './user-management/user-management-update.component'; -export * from './user-management/user-management-delete-dialog.component'; -export * from './user-management/user-management-detail.component'; -export * from './user-management/user-management.component'; -export * from './user-management/user-management.route'; -export * from './admin.route'; diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/logs/log.model.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/logs/log.model.ts deleted file mode 100644 index 3f27b6728cfa..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/logs/log.model.ts +++ /dev/null @@ -1,3 +0,0 @@ -export class Log { - constructor(public name: string, public level: string) {} -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/logs/logs.component.html b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/logs/logs.component.html deleted file mode 100644 index cf5d6a046fa0..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/logs/logs.component.html +++ /dev/null @@ -1,28 +0,0 @@ -
-

Logs

- -

There are {{ loggers.length }} loggers.

- - Filter - - - - - - - - - - - - - -
NameLevel
{{logger.name | slice:0:140}} - - - - - - -
-
diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/logs/logs.component.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/logs/logs.component.ts deleted file mode 100644 index 28547f9ae631..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/logs/logs.component.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { Component, OnInit } from '@angular/core'; - -import { Log } from './log.model'; -import { LogsService } from './logs.service'; - -@Component({ - selector: 'jhi-logs', - templateUrl: './logs.component.html' -}) -export class LogsComponent implements OnInit { - loggers: Log[]; - filter: string; - orderProp: string; - reverse: boolean; - - constructor(private logsService: LogsService) { - this.filter = ''; - this.orderProp = 'name'; - this.reverse = false; - } - - ngOnInit() { - this.logsService.findAll().subscribe(response => (this.loggers = response.body)); - } - - changeLevel(name: string, level: string) { - const log = new Log(name, level); - this.logsService.changeLevel(log).subscribe(() => { - this.logsService.findAll().subscribe(response => (this.loggers = response.body)); - }); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/logs/logs.route.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/logs/logs.route.ts deleted file mode 100644 index cfa87715d816..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/logs/logs.route.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Route } from '@angular/router'; - -import { LogsComponent } from './logs.component'; - -export const logsRoute: Route = { - path: 'logs', - component: LogsComponent, - data: { - pageTitle: 'Logs' - } -}; diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/logs/logs.service.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/logs/logs.service.ts deleted file mode 100644 index 71a596b0abd7..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/logs/logs.service.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { Injectable } from '@angular/core'; -import { HttpClient, HttpResponse } from '@angular/common/http'; -import { Observable } from 'rxjs'; - -import { SERVER_API_URL } from 'app/app.constants'; -import { Log } from './log.model'; - -@Injectable({ providedIn: 'root' }) -export class LogsService { - constructor(private http: HttpClient) {} - - changeLevel(log: Log): Observable> { - return this.http.put(SERVER_API_URL + 'management/logs', log, { observe: 'response' }); - } - - findAll(): Observable> { - return this.http.get(SERVER_API_URL + 'management/logs', { observe: 'response' }); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/metrics/metrics.component.html b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/metrics/metrics.component.html deleted file mode 100644 index 75902d8fb393..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/metrics/metrics.component.html +++ /dev/null @@ -1,56 +0,0 @@ -
-

- Application Metrics - -

- -

JVM Metrics

-
- - - - - -
- -
-

Garbage collector statistics

- -
- -
Updating...
- - - - -
- - - - - - - - - -
diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/metrics/metrics.component.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/metrics/metrics.component.ts deleted file mode 100644 index ed508c818705..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/metrics/metrics.component.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; - -import { JhiMetricsService } from './metrics.service'; - -@Component({ - selector: 'jhi-metrics', - templateUrl: './metrics.component.html' -}) -export class JhiMetricsMonitoringComponent implements OnInit { - metrics: any = {}; - threadData: any = {}; - updatingMetrics = true; - JCACHE_KEY: string; - - constructor(private modalService: NgbModal, private metricsService: JhiMetricsService) { - this.JCACHE_KEY = 'jcache.statistics'; - } - - ngOnInit() { - this.refresh(); - } - - refresh() { - this.updatingMetrics = true; - this.metricsService.getMetrics().subscribe(metrics => { - this.metrics = metrics; - this.metricsService.threadDump().subscribe(data => { - this.threadData = data.threads; - this.updatingMetrics = false; - }); - }); - } - - isObjectExisting(metrics: any, key: string) { - return metrics && metrics[key]; - } - - isObjectExistingAndNotEmpty(metrics: any, key: string) { - return this.isObjectExisting(metrics, key) && JSON.stringify(metrics[key]) !== '{}'; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/metrics/metrics.route.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/metrics/metrics.route.ts deleted file mode 100644 index abc18b825405..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/metrics/metrics.route.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Route } from '@angular/router'; - -import { JhiMetricsMonitoringComponent } from './metrics.component'; - -export const metricsRoute: Route = { - path: 'jhi-metrics', - component: JhiMetricsMonitoringComponent, - data: { - pageTitle: 'Application Metrics' - } -}; diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/metrics/metrics.service.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/metrics/metrics.service.ts deleted file mode 100644 index 15cfe3536ca5..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/metrics/metrics.service.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Injectable } from '@angular/core'; -import { HttpClient } from '@angular/common/http'; -import { Observable } from 'rxjs'; - -import { SERVER_API_URL } from 'app/app.constants'; - -@Injectable({ providedIn: 'root' }) -export class JhiMetricsService { - constructor(private http: HttpClient) {} - - getMetrics(): Observable { - return this.http.get(SERVER_API_URL + 'management/jhi-metrics'); - } - - threadDump(): Observable { - return this.http.get(SERVER_API_URL + 'management/threaddump'); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-delete-dialog.component.html b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-delete-dialog.component.html deleted file mode 100644 index adb1a908dad8..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-delete-dialog.component.html +++ /dev/null @@ -1,19 +0,0 @@ -
- - - -
diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-delete-dialog.component.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-delete-dialog.component.ts deleted file mode 100644 index d7674f6cd9d1..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-delete-dialog.component.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { Component } from '@angular/core'; -import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; -import { JhiEventManager } from 'ng-jhipster'; - -import { User, UserService } from 'app/core'; - -@Component({ - selector: 'jhi-user-mgmt-delete-dialog', - templateUrl: './user-management-delete-dialog.component.html' -}) -export class UserMgmtDeleteDialogComponent { - user: User; - - constructor(private userService: UserService, public activeModal: NgbActiveModal, private eventManager: JhiEventManager) {} - - clear() { - this.activeModal.dismiss('cancel'); - } - - confirmDelete(login) { - this.userService.delete(login).subscribe(response => { - this.eventManager.broadcast({ - name: 'userListModification', - content: 'Deleted a user' - }); - this.activeModal.dismiss(true); - }); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-detail.component.html b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-detail.component.html deleted file mode 100644 index 051f335ded55..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-detail.component.html +++ /dev/null @@ -1,47 +0,0 @@ -
-
-
-

- User [{{user.login}}] -

-
-
Login
-
- {{user.login}} - - -
-
First Name
-
{{user.firstName}}
-
Last Name
-
{{user.lastName}}
-
Email
-
{{user.email}}
-
Created By
-
{{user.createdBy}}
-
Created Date
-
{{user.createdDate | date:'dd/MM/yy HH:mm' }}
-
Last Modified By
-
{{user.lastModifiedBy}}
-
Last Modified Date
-
{{user.lastModifiedDate | date:'dd/MM/yy HH:mm'}}
-
Profiles
-
-
    -
  • - {{authority}} -
  • -
-
-
- -
-
-
diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-detail.component.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-detail.component.ts deleted file mode 100644 index 0b323d89a0e9..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-detail.component.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { Component, OnInit, OnDestroy } from '@angular/core'; -import { ActivatedRoute } from '@angular/router'; - -import { User } from 'app/core'; - -@Component({ - selector: 'jhi-user-mgmt-detail', - templateUrl: './user-management-detail.component.html' -}) -export class UserMgmtDetailComponent implements OnInit { - user: User; - - constructor(private route: ActivatedRoute) {} - - ngOnInit() { - this.route.data.subscribe(({ user }) => { - this.user = user.body ? user.body : user; - }); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-update.component.html b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-update.component.html deleted file mode 100644 index b2d04b42278c..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-update.component.html +++ /dev/null @@ -1,118 +0,0 @@ -
-
-
-

- Create or edit a User -

-
- -
- - -
- -
- - - -
- - This field is required. - - - - This field cannot be longer than 50 characters. - - - - This field can only contain letters, digits and e-mail addresses. - -
-
-
- - - -
- - This field cannot be longer than 50 characters. - -
-
-
- - - -
- - This field cannot be longer than 50 characters. - -
-
-
- - - -
- - This field is required. - - - - This field cannot be longer than 100 characters. - - - - This field is required to be at least 5 characters. - - - - Your email is invalid. - -
-
-
- -
- -
- - -
-
-
- - -
-
-
-
diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-update.component.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-update.component.ts deleted file mode 100644 index e51e4f4a331f..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management-update.component.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { ActivatedRoute, Router } from '@angular/router'; - -import { User, UserService } from 'app/core'; - -@Component({ - selector: 'jhi-user-mgmt-update', - templateUrl: './user-management-update.component.html' -}) -export class UserMgmtUpdateComponent implements OnInit { - user: User; - languages: any[]; - authorities: any[]; - isSaving: boolean; - - constructor(private userService: UserService, private route: ActivatedRoute, private router: Router) {} - - ngOnInit() { - this.isSaving = false; - this.route.data.subscribe(({ user }) => { - this.user = user.body ? user.body : user; - }); - this.authorities = []; - this.userService.authorities().subscribe(authorities => { - this.authorities = authorities; - }); - } - - previousState() { - window.history.back(); - } - - save() { - this.isSaving = true; - if (this.user.id !== null) { - this.userService.update(this.user).subscribe(response => this.onSaveSuccess(response), () => this.onSaveError()); - } else { - this.user.langKey = 'en'; - this.userService.create(this.user).subscribe(response => this.onSaveSuccess(response), () => this.onSaveError()); - } - } - - private onSaveSuccess(result) { - this.isSaving = false; - this.previousState(); - } - - private onSaveError() { - this.isSaving = false; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management.component.html b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management.component.html deleted file mode 100644 index 4592998c1f1a..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management.component.html +++ /dev/null @@ -1,78 +0,0 @@ -
-

- Users - -

- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ID Login Email ProfilesCreated Date Last Modified By Last Modified Date
{{user.id}}{{user.login}}{{user.email}} - - - -
- {{ authority }} -
-
{{user.createdDate | date:'dd/MM/yy HH:mm'}}{{user.lastModifiedBy}}{{user.lastModifiedDate | date:'dd/MM/yy HH:mm'}} -
- - - -
-
-
-
-
- -
-
- -
-
-
diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management.component.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management.component.ts deleted file mode 100644 index 439442e3b670..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management.component.ts +++ /dev/null @@ -1,144 +0,0 @@ -import { Component, OnInit, OnDestroy } from '@angular/core'; -import { HttpResponse } from '@angular/common/http'; -import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; - -import { ActivatedRoute, Router } from '@angular/router'; -import { JhiEventManager, JhiParseLinks, JhiAlertService } from 'ng-jhipster'; - -import { ITEMS_PER_PAGE } from 'app/shared'; -import { AccountService, UserService, User } from 'app/core'; -import { UserMgmtDeleteDialogComponent } from 'app/admin'; - -@Component({ - selector: 'jhi-user-mgmt', - templateUrl: './user-management.component.html' -}) -export class UserMgmtComponent implements OnInit, OnDestroy { - currentAccount: any; - users: User[]; - error: any; - success: any; - routeData: any; - links: any; - totalItems: any; - itemsPerPage: any; - page: any; - predicate: any; - previousPage: any; - reverse: any; - - constructor( - private userService: UserService, - private alertService: JhiAlertService, - private accountService: AccountService, - private parseLinks: JhiParseLinks, - private activatedRoute: ActivatedRoute, - private router: Router, - private eventManager: JhiEventManager, - private modalService: NgbModal - ) { - this.itemsPerPage = ITEMS_PER_PAGE; - this.routeData = this.activatedRoute.data.subscribe(data => { - this.page = data['pagingParams'].page; - this.previousPage = data['pagingParams'].page; - this.reverse = data['pagingParams'].ascending; - this.predicate = data['pagingParams'].predicate; - }); - } - - ngOnInit() { - this.accountService.identity().then(account => { - this.currentAccount = account; - this.loadAll(); - this.registerChangeInUsers(); - }); - } - - ngOnDestroy() { - this.routeData.unsubscribe(); - } - - registerChangeInUsers() { - this.eventManager.subscribe('userListModification', response => this.loadAll()); - } - - setActive(user, isActivated) { - user.activated = isActivated; - - this.userService.update(user).subscribe(response => { - if (response.status === 200) { - this.error = null; - this.success = 'OK'; - this.loadAll(); - } else { - this.success = null; - this.error = 'ERROR'; - } - }); - } - - loadAll() { - this.userService - .query({ - page: this.page - 1, - size: this.itemsPerPage, - sort: this.sort() - }) - .subscribe( - (res: HttpResponse) => this.onSuccess(res.body, res.headers), - (res: HttpResponse) => this.onError(res.body) - ); - } - - trackIdentity(index, item: User) { - return item.id; - } - - sort() { - const result = [this.predicate + ',' + (this.reverse ? 'asc' : 'desc')]; - if (this.predicate !== 'id') { - result.push('id'); - } - return result; - } - - loadPage(page: number) { - if (page !== this.previousPage) { - this.previousPage = page; - this.transition(); - } - } - - transition() { - this.router.navigate(['/admin/user-management'], { - queryParams: { - page: this.page, - sort: this.predicate + ',' + (this.reverse ? 'asc' : 'desc') - } - }); - this.loadAll(); - } - - deleteUser(user: User) { - const modalRef = this.modalService.open(UserMgmtDeleteDialogComponent, { size: 'lg', backdrop: 'static' }); - modalRef.componentInstance.user = user; - modalRef.result.then( - result => { - // Left blank intentionally, nothing to do here - }, - reason => { - // Left blank intentionally, nothing to do here - } - ); - } - - private onSuccess(data, headers) { - this.links = this.parseLinks.parse(headers.get('link')); - this.totalItems = headers.get('X-Total-Count'); - this.users = data; - } - - private onError(error) { - this.alertService.error(error.error, error.message, null); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management.route.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management.route.ts deleted file mode 100644 index bf1115516f0a..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/admin/user-management/user-management.route.ts +++ /dev/null @@ -1,68 +0,0 @@ -import { Injectable } from '@angular/core'; -import { Resolve, ActivatedRouteSnapshot, RouterStateSnapshot, Routes, CanActivate } from '@angular/router'; -import { JhiPaginationUtil, JhiResolvePagingParams } from 'ng-jhipster'; - -import { AccountService, User, UserService } from 'app/core'; -import { UserMgmtComponent } from './user-management.component'; -import { UserMgmtDetailComponent } from './user-management-detail.component'; -import { UserMgmtUpdateComponent } from './user-management-update.component'; - -@Injectable({ providedIn: 'root' }) -export class UserResolve implements CanActivate { - constructor(private accountService: AccountService) {} - - canActivate() { - return this.accountService.identity().then(account => this.accountService.hasAnyAuthority(['ROLE_ADMIN'])); - } -} - -@Injectable({ providedIn: 'root' }) -export class UserMgmtResolve implements Resolve { - constructor(private service: UserService) {} - - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) { - const id = route.params['login'] ? route.params['login'] : null; - if (id) { - return this.service.find(id); - } - return new User(); - } -} - -export const userMgmtRoute: Routes = [ - { - path: 'user-management', - component: UserMgmtComponent, - resolve: { - pagingParams: JhiResolvePagingParams - }, - data: { - pageTitle: 'Users', - defaultSort: 'id,asc' - } - }, - { - path: 'user-management/:login/view', - component: UserMgmtDetailComponent, - resolve: { - user: UserMgmtResolve - }, - data: { - pageTitle: 'Users' - } - }, - { - path: 'user-management/new', - component: UserMgmtUpdateComponent, - resolve: { - user: UserMgmtResolve - } - }, - { - path: 'user-management/:login/edit', - component: UserMgmtUpdateComponent, - resolve: { - user: UserMgmtResolve - } - } -]; diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/app-routing.module.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/app-routing.module.ts deleted file mode 100644 index c40d4df774b0..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/app-routing.module.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; -import { errorRoute, navbarRoute } from './layouts'; -import { DEBUG_INFO_ENABLED } from 'app/app.constants'; - -const LAYOUT_ROUTES = [navbarRoute, ...errorRoute]; - -@NgModule({ - imports: [ - RouterModule.forRoot( - [ - { - path: 'admin', - loadChildren: './admin/admin.module#BookstoreAdminModule' - }, - ...LAYOUT_ROUTES - ], - { useHash: true, enableTracing: DEBUG_INFO_ENABLED } - ) - ], - exports: [RouterModule] -}) -export class BookstoreAppRoutingModule {} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/app.constants.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/app.constants.ts deleted file mode 100644 index 9760a49a9158..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/app.constants.ts +++ /dev/null @@ -1,8 +0,0 @@ -// These constants are injected via webpack environment variables. -// You can add more variables in webpack.common.js or in profile specific webpack..js files. -// If you change the values in the webpack config files, you need to re run webpack to update the application - -export const VERSION = process.env.VERSION; -export const DEBUG_INFO_ENABLED: boolean = !!process.env.DEBUG_INFO_ENABLED; -export const SERVER_API_URL = process.env.SERVER_API_URL; -export const BUILD_TIMESTAMP = process.env.BUILD_TIMESTAMP; diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/app.main.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/app.main.ts deleted file mode 100644 index 7695bb8571e5..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/app.main.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; -import { ProdConfig } from './blocks/config/prod.config'; -import { BookstoreAppModule } from './app.module'; - -ProdConfig(); - -if (module['hot']) { - module['hot'].accept(); -} - -platformBrowserDynamic() - .bootstrapModule(BookstoreAppModule, { preserveWhitespaces: true }) - .then(success => console.log(`Application started`)) - .catch(err => console.error(err)); diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/app.module.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/app.module.ts deleted file mode 100644 index 5fb96ed8c5b4..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/app.module.ts +++ /dev/null @@ -1,70 +0,0 @@ -import './vendor.ts'; - -import { NgModule } from '@angular/core'; -import { BrowserModule } from '@angular/platform-browser'; -import { HTTP_INTERCEPTORS } from '@angular/common/http'; -import { NgbDatepickerConfig } from '@ng-bootstrap/ng-bootstrap'; -import { Ng2Webstorage } from 'ngx-webstorage'; -import { NgJhipsterModule } from 'ng-jhipster'; - -import { AuthInterceptor } from './blocks/interceptor/auth.interceptor'; -import { AuthExpiredInterceptor } from './blocks/interceptor/auth-expired.interceptor'; -import { ErrorHandlerInterceptor } from './blocks/interceptor/errorhandler.interceptor'; -import { NotificationInterceptor } from './blocks/interceptor/notification.interceptor'; -import { BookstoreSharedModule } from 'app/shared'; -import { BookstoreCoreModule } from 'app/core'; -import { BookstoreAppRoutingModule } from './app-routing.module'; -import { BookstoreHomeModule } from './home/home.module'; -import { BookstoreAccountModule } from './account/account.module'; -import { BookstoreEntityModule } from './entities/entity.module'; -import * as moment from 'moment'; -// jhipster-needle-angular-add-module-import JHipster will add new module here -import { JhiMainComponent, NavbarComponent, FooterComponent, PageRibbonComponent, ErrorComponent } from './layouts'; - -@NgModule({ - imports: [ - BrowserModule, - Ng2Webstorage.forRoot({ prefix: 'jhi', separator: '-' }), - NgJhipsterModule.forRoot({ - // set below to true to make alerts look like toast - alertAsToast: false, - alertTimeout: 5000 - }), - BookstoreSharedModule.forRoot(), - BookstoreCoreModule, - BookstoreHomeModule, - BookstoreAccountModule, - // jhipster-needle-angular-add-module JHipster will add new module here - BookstoreEntityModule, - BookstoreAppRoutingModule - ], - declarations: [JhiMainComponent, NavbarComponent, ErrorComponent, PageRibbonComponent, FooterComponent], - providers: [ - { - provide: HTTP_INTERCEPTORS, - useClass: AuthInterceptor, - multi: true - }, - { - provide: HTTP_INTERCEPTORS, - useClass: AuthExpiredInterceptor, - multi: true - }, - { - provide: HTTP_INTERCEPTORS, - useClass: ErrorHandlerInterceptor, - multi: true - }, - { - provide: HTTP_INTERCEPTORS, - useClass: NotificationInterceptor, - multi: true - } - ], - bootstrap: [JhiMainComponent] -}) -export class BookstoreAppModule { - constructor(private dpConfig: NgbDatepickerConfig) { - this.dpConfig.minDate = { year: moment().year() - 100, month: 1, day: 1 }; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/blocks/config/prod.config.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/blocks/config/prod.config.ts deleted file mode 100644 index c6221c1eaf8b..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/blocks/config/prod.config.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { enableProdMode } from '@angular/core'; -import { DEBUG_INFO_ENABLED } from 'app/app.constants'; - -export function ProdConfig() { - // disable debug data on prod profile to improve performance - if (!DEBUG_INFO_ENABLED) { - enableProdMode(); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/blocks/config/uib-pagination.config.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/blocks/config/uib-pagination.config.ts deleted file mode 100644 index 0c2ea9480861..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/blocks/config/uib-pagination.config.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { Injectable } from '@angular/core'; -import { NgbPaginationConfig } from '@ng-bootstrap/ng-bootstrap'; -import { ITEMS_PER_PAGE } from 'app/shared'; - -@Injectable({ providedIn: 'root' }) -export class PaginationConfig { - // tslint:disable-next-line: no-unused-variable - constructor(private config: NgbPaginationConfig) { - config.boundaryLinks = true; - config.maxSize = 5; - config.pageSize = ITEMS_PER_PAGE; - config.size = 'sm'; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/blocks/interceptor/auth-expired.interceptor.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/blocks/interceptor/auth-expired.interceptor.ts deleted file mode 100644 index bc1b70cfef82..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/blocks/interceptor/auth-expired.interceptor.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Injectable } from '@angular/core'; -import { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent, HttpErrorResponse } from '@angular/common/http'; -import { Observable } from 'rxjs'; -import { tap } from 'rxjs/operators'; -import { LoginService } from 'app/core/login/login.service'; - -@Injectable() -export class AuthExpiredInterceptor implements HttpInterceptor { - constructor(private loginService: LoginService) {} - - intercept(request: HttpRequest, next: HttpHandler): Observable> { - return next.handle(request).pipe( - tap( - (event: HttpEvent) => {}, - (err: any) => { - if (err instanceof HttpErrorResponse) { - if (err.status === 401) { - this.loginService.logout(); - } - } - } - ) - ); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/blocks/interceptor/auth.interceptor.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/blocks/interceptor/auth.interceptor.ts deleted file mode 100644 index 23cdeaf66b4c..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/blocks/interceptor/auth.interceptor.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { Injectable } from '@angular/core'; -import { Observable } from 'rxjs'; -import { LocalStorageService, SessionStorageService } from 'ngx-webstorage'; -import { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent } from '@angular/common/http'; - -import { SERVER_API_URL } from 'app/app.constants'; - -@Injectable() -export class AuthInterceptor implements HttpInterceptor { - constructor(private localStorage: LocalStorageService, private sessionStorage: SessionStorageService) {} - - intercept(request: HttpRequest, next: HttpHandler): Observable> { - if (!request || !request.url || (/^http/.test(request.url) && !(SERVER_API_URL && request.url.startsWith(SERVER_API_URL)))) { - return next.handle(request); - } - - const token = this.localStorage.retrieve('authenticationToken') || this.sessionStorage.retrieve('authenticationToken'); - if (!!token) { - request = request.clone({ - setHeaders: { - Authorization: 'Bearer ' + token - } - }); - } - return next.handle(request); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/blocks/interceptor/errorhandler.interceptor.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/blocks/interceptor/errorhandler.interceptor.ts deleted file mode 100644 index e464f66cd31a..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/blocks/interceptor/errorhandler.interceptor.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Injectable } from '@angular/core'; -import { JhiEventManager } from 'ng-jhipster'; -import { HttpInterceptor, HttpRequest, HttpErrorResponse, HttpHandler, HttpEvent } from '@angular/common/http'; -import { Observable } from 'rxjs'; -import { tap } from 'rxjs/operators'; - -@Injectable() -export class ErrorHandlerInterceptor implements HttpInterceptor { - constructor(private eventManager: JhiEventManager) {} - - intercept(request: HttpRequest, next: HttpHandler): Observable> { - return next.handle(request).pipe( - tap( - (event: HttpEvent) => {}, - (err: any) => { - if (err instanceof HttpErrorResponse) { - if (!(err.status === 401 && (err.message === '' || (err.url && err.url.includes('/api/account'))))) { - this.eventManager.broadcast({ name: 'bookstoreApp.httpError', content: err }); - } - } - } - ) - ); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/blocks/interceptor/notification.interceptor.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/blocks/interceptor/notification.interceptor.ts deleted file mode 100644 index 34af81d482af..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/blocks/interceptor/notification.interceptor.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { JhiAlertService } from 'ng-jhipster'; -import { HttpInterceptor, HttpRequest, HttpResponse, HttpHandler, HttpEvent } from '@angular/common/http'; -import { Injectable } from '@angular/core'; -import { Observable } from 'rxjs'; -import { tap } from 'rxjs/operators'; - -@Injectable() -export class NotificationInterceptor implements HttpInterceptor { - constructor(private alertService: JhiAlertService) {} - - intercept(request: HttpRequest, next: HttpHandler): Observable> { - return next.handle(request).pipe( - tap( - (event: HttpEvent) => { - if (event instanceof HttpResponse) { - const arr = event.headers.keys(); - let alert = null; - arr.forEach(entry => { - if (entry.toLowerCase().endsWith('app-alert')) { - alert = event.headers.get(entry); - } - }); - if (alert) { - if (typeof alert === 'string') { - this.alertService.success(alert, null, null); - } - } - } - }, - (err: any) => {} - ) - ); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/core/auth/account.service.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/core/auth/account.service.ts deleted file mode 100644 index a6548f6dd9f9..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/core/auth/account.service.ts +++ /dev/null @@ -1,108 +0,0 @@ -import { Injectable } from '@angular/core'; -import { HttpClient, HttpResponse } from '@angular/common/http'; -import { Observable, Subject } from 'rxjs'; - -import { SERVER_API_URL } from 'app/app.constants'; -import { Account } from 'app/core/user/account.model'; - -@Injectable({ providedIn: 'root' }) -export class AccountService { - private userIdentity: any; - private authenticated = false; - private authenticationState = new Subject(); - - constructor(private http: HttpClient) {} - - fetch(): Observable> { - return this.http.get(SERVER_API_URL + 'api/account', { observe: 'response' }); - } - - save(account: any): Observable> { - return this.http.post(SERVER_API_URL + 'api/account', account, { observe: 'response' }); - } - - authenticate(identity) { - this.userIdentity = identity; - this.authenticated = identity !== null; - this.authenticationState.next(this.userIdentity); - } - - hasAnyAuthority(authorities: string[]): boolean { - if (!this.authenticated || !this.userIdentity || !this.userIdentity.authorities) { - return false; - } - - for (let i = 0; i < authorities.length; i++) { - if (this.userIdentity.authorities.includes(authorities[i])) { - return true; - } - } - - return false; - } - - hasAuthority(authority: string): Promise { - if (!this.authenticated) { - return Promise.resolve(false); - } - - return this.identity().then( - id => { - return Promise.resolve(id.authorities && id.authorities.includes(authority)); - }, - () => { - return Promise.resolve(false); - } - ); - } - - identity(force?: boolean): Promise { - if (force) { - this.userIdentity = undefined; - } - - // check and see if we have retrieved the userIdentity data from the server. - // if we have, reuse it by immediately resolving - if (this.userIdentity) { - return Promise.resolve(this.userIdentity); - } - - // retrieve the userIdentity data from the server, update the identity object, and then resolve. - return this.fetch() - .toPromise() - .then(response => { - const account = response.body; - if (account) { - this.userIdentity = account; - this.authenticated = true; - } else { - this.userIdentity = null; - this.authenticated = false; - } - this.authenticationState.next(this.userIdentity); - return this.userIdentity; - }) - .catch(err => { - this.userIdentity = null; - this.authenticated = false; - this.authenticationState.next(this.userIdentity); - return null; - }); - } - - isAuthenticated(): boolean { - return this.authenticated; - } - - isIdentityResolved(): boolean { - return this.userIdentity !== undefined; - } - - getAuthenticationState(): Observable { - return this.authenticationState.asObservable(); - } - - getImageUrl(): string { - return this.isIdentityResolved() ? this.userIdentity.imageUrl : null; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/core/auth/auth-jwt.service.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/core/auth/auth-jwt.service.ts deleted file mode 100644 index 5ad53e3dfedb..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/core/auth/auth-jwt.service.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { Injectable } from '@angular/core'; -import { HttpClient } from '@angular/common/http'; -import { Observable } from 'rxjs'; -import { map } from 'rxjs/operators'; -import { LocalStorageService, SessionStorageService } from 'ngx-webstorage'; - -import { SERVER_API_URL } from 'app/app.constants'; - -@Injectable({ providedIn: 'root' }) -export class AuthServerProvider { - constructor(private http: HttpClient, private $localStorage: LocalStorageService, private $sessionStorage: SessionStorageService) {} - - getToken() { - return this.$localStorage.retrieve('authenticationToken') || this.$sessionStorage.retrieve('authenticationToken'); - } - - login(credentials): Observable { - const data = { - username: credentials.username, - password: credentials.password, - rememberMe: credentials.rememberMe - }; - return this.http.post(SERVER_API_URL + 'api/authenticate', data, { observe: 'response' }).pipe(map(authenticateSuccess.bind(this))); - - function authenticateSuccess(resp) { - const bearerToken = resp.headers.get('Authorization'); - if (bearerToken && bearerToken.slice(0, 7) === 'Bearer ') { - const jwt = bearerToken.slice(7, bearerToken.length); - this.storeAuthenticationToken(jwt, credentials.rememberMe); - return jwt; - } - } - } - - loginWithToken(jwt, rememberMe) { - if (jwt) { - this.storeAuthenticationToken(jwt, rememberMe); - return Promise.resolve(jwt); - } else { - return Promise.reject('auth-jwt-service Promise reject'); // Put appropriate error message here - } - } - - storeAuthenticationToken(jwt, rememberMe) { - if (rememberMe) { - this.$localStorage.store('authenticationToken', jwt); - } else { - this.$sessionStorage.store('authenticationToken', jwt); - } - } - - logout(): Observable { - return new Observable(observer => { - this.$localStorage.clear('authenticationToken'); - this.$sessionStorage.clear('authenticationToken'); - observer.complete(); - }); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/core/auth/csrf.service.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/core/auth/csrf.service.ts deleted file mode 100644 index 01fdccb02ac3..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/core/auth/csrf.service.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Injectable } from '@angular/core'; -import { CookieService } from 'ngx-cookie'; - -@Injectable({ providedIn: 'root' }) -export class CSRFService { - constructor(private cookieService: CookieService) {} - - getCSRF(name = 'XSRF-TOKEN') { - return this.cookieService.get(name); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/core/auth/state-storage.service.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/core/auth/state-storage.service.ts deleted file mode 100644 index 0e5befbfc35e..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/core/auth/state-storage.service.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { Injectable } from '@angular/core'; -import { SessionStorageService } from 'ngx-webstorage'; - -@Injectable({ providedIn: 'root' }) -export class StateStorageService { - constructor(private $sessionStorage: SessionStorageService) {} - - getPreviousState() { - return this.$sessionStorage.retrieve('previousState'); - } - - resetPreviousState() { - this.$sessionStorage.clear('previousState'); - } - - storePreviousState(previousStateName, previousStateParams) { - const previousState = { name: previousStateName, params: previousStateParams }; - this.$sessionStorage.store('previousState', previousState); - } - - getDestinationState() { - return this.$sessionStorage.retrieve('destinationState'); - } - - storeUrl(url: string) { - this.$sessionStorage.store('previousUrl', url); - } - - getUrl() { - return this.$sessionStorage.retrieve('previousUrl'); - } - - storeDestinationState(destinationState, destinationStateParams, fromState) { - const destinationInfo = { - destination: { - name: destinationState.name, - data: destinationState.data - }, - params: destinationStateParams, - from: { - name: fromState.name - } - }; - this.$sessionStorage.store('destinationState', destinationInfo); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/core/auth/user-route-access-service.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/core/auth/user-route-access-service.ts deleted file mode 100644 index a55b0bc0351e..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/core/auth/user-route-access-service.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { Injectable, isDevMode } from '@angular/core'; -import { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot } from '@angular/router'; - -import { AccountService } from '../'; -import { LoginModalService } from '../login/login-modal.service'; -import { StateStorageService } from './state-storage.service'; - -@Injectable({ providedIn: 'root' }) -export class UserRouteAccessService implements CanActivate { - constructor( - private router: Router, - private loginModalService: LoginModalService, - private accountService: AccountService, - private stateStorageService: StateStorageService - ) {} - - canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean | Promise { - const authorities = route.data['authorities']; - // We need to call the checkLogin / and so the accountService.identity() function, to ensure, - // that the client has a principal too, if they already logged in by the server. - // This could happen on a page refresh. - return this.checkLogin(authorities, state.url); - } - - checkLogin(authorities: string[], url: string): Promise { - return this.accountService.identity().then(account => { - if (!authorities || authorities.length === 0) { - return true; - } - - if (account) { - const hasAnyAuthority = this.accountService.hasAnyAuthority(authorities); - if (hasAnyAuthority) { - return true; - } - if (isDevMode()) { - console.error('User has not any of required authorities: ', authorities); - } - return false; - } - - this.stateStorageService.storeUrl(url); - this.router.navigate(['accessdenied']).then(() => { - // only show the login dialog, if the user hasn't logged in yet - if (!account) { - this.loginModalService.open(); - } - }); - return false; - }); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/core/core.module.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/core/core.module.ts deleted file mode 100644 index 7569b8f59e4b..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/core/core.module.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { NgModule, LOCALE_ID } from '@angular/core'; -import { DatePipe, registerLocaleData } from '@angular/common'; -import { HttpClientModule } from '@angular/common/http'; -import { Title } from '@angular/platform-browser'; -import locale from '@angular/common/locales/en'; - -@NgModule({ - imports: [HttpClientModule], - exports: [], - declarations: [], - providers: [ - Title, - { - provide: LOCALE_ID, - useValue: 'en' - }, - DatePipe - ] -}) -export class BookstoreCoreModule { - constructor() { - registerLocaleData(locale); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/core/index.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/core/index.ts deleted file mode 100644 index 38827443a593..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/core/index.ts +++ /dev/null @@ -1,11 +0,0 @@ -export * from './auth/csrf.service'; -export * from './auth/state-storage.service'; -export * from './auth/account.service'; -export * from './auth/auth-jwt.service'; -export * from './user/account.model'; -export * from './user/user.model'; -export * from './auth/user-route-access-service'; -export * from './login/login-modal.service'; -export * from './login/login.service'; -export * from './user/user.service'; -export * from './core.module'; diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/core/login/login-modal.service.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/core/login/login-modal.service.ts deleted file mode 100644 index a0002aa56b25..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/core/login/login-modal.service.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { Injectable } from '@angular/core'; -import { NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap'; - -import { JhiLoginModalComponent } from 'app/shared/login/login.component'; - -@Injectable({ providedIn: 'root' }) -export class LoginModalService { - private isOpen = false; - constructor(private modalService: NgbModal) {} - - open(): NgbModalRef { - if (this.isOpen) { - return; - } - this.isOpen = true; - const modalRef = this.modalService.open(JhiLoginModalComponent); - modalRef.result.then( - result => { - this.isOpen = false; - }, - reason => { - this.isOpen = false; - } - ); - return modalRef; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/core/login/login.service.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/core/login/login.service.ts deleted file mode 100644 index e91508ff442c..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/core/login/login.service.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { Injectable } from '@angular/core'; - -import { AccountService } from 'app/core/auth/account.service'; -import { AuthServerProvider } from 'app/core/auth/auth-jwt.service'; - -@Injectable({ providedIn: 'root' }) -export class LoginService { - constructor(private accountService: AccountService, private authServerProvider: AuthServerProvider) {} - - login(credentials, callback?) { - const cb = callback || function() {}; - - return new Promise((resolve, reject) => { - this.authServerProvider.login(credentials).subscribe( - data => { - this.accountService.identity(true).then(account => { - resolve(data); - }); - return cb(); - }, - err => { - this.logout(); - reject(err); - return cb(err); - } - ); - }); - } - - loginWithToken(jwt, rememberMe) { - return this.authServerProvider.loginWithToken(jwt, rememberMe); - } - - logout() { - this.authServerProvider.logout().subscribe(); - this.accountService.authenticate(null); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/core/user/account.model.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/core/user/account.model.ts deleted file mode 100644 index 35679657e3b0..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/core/user/account.model.ts +++ /dev/null @@ -1,12 +0,0 @@ -export class Account { - constructor( - public activated: boolean, - public authorities: string[], - public email: string, - public firstName: string, - public langKey: string, - public lastName: string, - public login: string, - public imageUrl: string - ) {} -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/core/user/user.model.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/core/user/user.model.ts deleted file mode 100644 index e82da11ac542..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/core/user/user.model.ts +++ /dev/null @@ -1,47 +0,0 @@ -export interface IUser { - id?: any; - login?: string; - firstName?: string; - lastName?: string; - email?: string; - activated?: boolean; - langKey?: string; - authorities?: any[]; - createdBy?: string; - createdDate?: Date; - lastModifiedBy?: string; - lastModifiedDate?: Date; - password?: string; -} - -export class User implements IUser { - constructor( - public id?: any, - public login?: string, - public firstName?: string, - public lastName?: string, - public email?: string, - public activated?: boolean, - public langKey?: string, - public authorities?: any[], - public createdBy?: string, - public createdDate?: Date, - public lastModifiedBy?: string, - public lastModifiedDate?: Date, - public password?: string - ) { - this.id = id ? id : null; - this.login = login ? login : null; - this.firstName = firstName ? firstName : null; - this.lastName = lastName ? lastName : null; - this.email = email ? email : null; - this.activated = activated ? activated : false; - this.langKey = langKey ? langKey : null; - this.authorities = authorities ? authorities : null; - this.createdBy = createdBy ? createdBy : null; - this.createdDate = createdDate ? createdDate : null; - this.lastModifiedBy = lastModifiedBy ? lastModifiedBy : null; - this.lastModifiedDate = lastModifiedDate ? lastModifiedDate : null; - this.password = password ? password : null; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/core/user/user.service.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/core/user/user.service.ts deleted file mode 100644 index 5c8065bedd3d..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/core/user/user.service.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { Injectable } from '@angular/core'; -import { HttpClient, HttpResponse } from '@angular/common/http'; -import { Observable } from 'rxjs'; - -import { SERVER_API_URL } from 'app/app.constants'; -import { createRequestOption } from 'app/shared/util/request-util'; -import { IUser } from './user.model'; - -@Injectable({ providedIn: 'root' }) -export class UserService { - public resourceUrl = SERVER_API_URL + 'api/users'; - - constructor(private http: HttpClient) {} - - create(user: IUser): Observable> { - return this.http.post(this.resourceUrl, user, { observe: 'response' }); - } - - update(user: IUser): Observable> { - return this.http.put(this.resourceUrl, user, { observe: 'response' }); - } - - find(login: string): Observable> { - return this.http.get(`${this.resourceUrl}/${login}`, { observe: 'response' }); - } - - query(req?: any): Observable> { - const options = createRequestOption(req); - return this.http.get(this.resourceUrl, { params: options, observe: 'response' }); - } - - delete(login: string): Observable> { - return this.http.delete(`${this.resourceUrl}/${login}`, { observe: 'response' }); - } - - authorities(): Observable { - return this.http.get(SERVER_API_URL + 'api/users/authorities'); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book-delete-dialog.component.html b/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book-delete-dialog.component.html deleted file mode 100644 index be3647e9df56..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book-delete-dialog.component.html +++ /dev/null @@ -1,19 +0,0 @@ -
- - - -
diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book-delete-dialog.component.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book-delete-dialog.component.ts deleted file mode 100644 index 7992a5d26df5..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book-delete-dialog.component.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { Component, OnInit, OnDestroy } from '@angular/core'; -import { ActivatedRoute, Router } from '@angular/router'; - -import { NgbActiveModal, NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap'; -import { JhiEventManager } from 'ng-jhipster'; - -import { IBook } from 'app/shared/model/book.model'; -import { BookService } from './book.service'; - -@Component({ - selector: 'jhi-book-delete-dialog', - templateUrl: './book-delete-dialog.component.html' -}) -export class BookDeleteDialogComponent { - book: IBook; - - constructor(protected bookService: BookService, public activeModal: NgbActiveModal, protected eventManager: JhiEventManager) {} - - clear() { - this.activeModal.dismiss('cancel'); - } - - confirmDelete(id: number) { - this.bookService.delete(id).subscribe(response => { - this.eventManager.broadcast({ - name: 'bookListModification', - content: 'Deleted an book' - }); - this.activeModal.dismiss(true); - }); - } -} - -@Component({ - selector: 'jhi-book-delete-popup', - template: '' -}) -export class BookDeletePopupComponent implements OnInit, OnDestroy { - protected ngbModalRef: NgbModalRef; - - constructor(protected activatedRoute: ActivatedRoute, protected router: Router, protected modalService: NgbModal) {} - - ngOnInit() { - this.activatedRoute.data.subscribe(({ book }) => { - setTimeout(() => { - this.ngbModalRef = this.modalService.open(BookDeleteDialogComponent as Component, { size: 'lg', backdrop: 'static' }); - this.ngbModalRef.componentInstance.book = book; - this.ngbModalRef.result.then( - result => { - this.router.navigate(['/book', { outlets: { popup: null } }]); - this.ngbModalRef = null; - }, - reason => { - this.router.navigate(['/book', { outlets: { popup: null } }]); - this.ngbModalRef = null; - } - ); - }, 0); - }); - } - - ngOnDestroy() { - this.ngbModalRef = null; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book-detail.component.html b/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book-detail.component.html deleted file mode 100644 index 4a3c20e8410b..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book-detail.component.html +++ /dev/null @@ -1,49 +0,0 @@ -
-
-
-

Book {{book.id}}

-
- -
-
Title
-
- {{book.title}} -
-
Author
-
- {{book.author}} -
-
Published
-
- {{book.published}} -
-
Quantity
-
- {{book.quantity}} -
-
Price
-
- {{book.price}} -
-
- - - - - - -
-
-
diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book-detail.component.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book-detail.component.ts deleted file mode 100644 index 6b84c0ba73bc..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book-detail.component.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { ActivatedRoute } from '@angular/router'; - -import { IBook } from 'app/shared/model/book.model'; -import { BookService } from 'app/entities/book/book.service'; -import { HttpErrorResponse, HttpResponse } from '@angular/common/http'; - -@Component({ - selector: 'jhi-book-detail', - templateUrl: './book-detail.component.html' -}) -export class BookDetailComponent implements OnInit { - book: IBook; - - constructor(protected activatedRoute: ActivatedRoute, protected bookService: BookService) {} - - ngOnInit() { - this.activatedRoute.data.subscribe(({ book }) => { - this.book = book; - }); - } - - previousState() { - window.history.back(); - } - - purchase(id: number) { - console.log('Purchasing book ' + id); - this.bookService.purchase(id).subscribe( - (res: HttpResponse) => { - this.book = res.body; - }, - (res: HttpErrorResponse) => console.log(res.message) - ); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book-update.component.html b/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book-update.component.html deleted file mode 100644 index 3b41c6e1e0aa..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book-update.component.html +++ /dev/null @@ -1,100 +0,0 @@ -
-
-
-

Create or edit a Book

-
- -
- - -
-
- - -
- - This field is required. - -
-
-
- - -
- - This field is required. - -
-
-
- -
- - - - -
-
- - This field is required. - -
-
-
- - -
- - This field is required. - - - This field should be at least 0. - - - This field should be a number. - -
-
-
- - -
- - This field is required. - - - This field should be at least 0. - - - This field should be a number. - -
-
- -
-
- - -
-
-
-
diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book-update.component.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book-update.component.ts deleted file mode 100644 index 67f46a67c251..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book-update.component.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { ActivatedRoute } from '@angular/router'; -import { HttpResponse, HttpErrorResponse } from '@angular/common/http'; -import { Observable } from 'rxjs'; -import { filter, map } from 'rxjs/operators'; -import * as moment from 'moment'; -import { IBook } from 'app/shared/model/book.model'; -import { BookService } from './book.service'; - -@Component({ - selector: 'jhi-book-update', - templateUrl: './book-update.component.html' -}) -export class BookUpdateComponent implements OnInit { - book: IBook; - isSaving: boolean; - publishedDp: any; - - constructor(protected bookService: BookService, protected activatedRoute: ActivatedRoute) {} - - ngOnInit() { - this.isSaving = false; - this.activatedRoute.data.subscribe(({ book }) => { - this.book = book; - }); - } - - previousState() { - window.history.back(); - } - - save() { - this.isSaving = true; - if (this.book.id !== undefined) { - this.subscribeToSaveResponse(this.bookService.update(this.book)); - } else { - this.subscribeToSaveResponse(this.bookService.create(this.book)); - } - } - - protected subscribeToSaveResponse(result: Observable>) { - result.subscribe((res: HttpResponse) => this.onSaveSuccess(), (res: HttpErrorResponse) => this.onSaveError()); - } - - protected onSaveSuccess() { - this.isSaving = false; - this.previousState(); - } - - protected onSaveError() { - this.isSaving = false; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book.component.html b/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book.component.html deleted file mode 100644 index 74ad02a8e3b4..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book.component.html +++ /dev/null @@ -1,62 +0,0 @@ -
-

- Books - -

- -
-
- - - - - - - - - - - - - - - - - - - - - - - -
IDTitleAuthorPublishedQuantityPrice
{{book.id}}{{book.title}}{{book.author}}{{book.published | date:'mediumDate'}}{{book.quantity}}{{book.price}} -
- - - -
-
-
-
diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book.component.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book.component.ts deleted file mode 100644 index 91a71c2f5c0e..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book.component.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { Component, OnInit, OnDestroy } from '@angular/core'; -import { HttpErrorResponse, HttpResponse } from '@angular/common/http'; -import { Subscription } from 'rxjs'; -import { filter, map } from 'rxjs/operators'; -import { JhiEventManager, JhiAlertService } from 'ng-jhipster'; - -import { IBook } from 'app/shared/model/book.model'; -import { AccountService } from 'app/core'; -import { BookService } from './book.service'; - -@Component({ - selector: 'jhi-book', - templateUrl: './book.component.html' -}) -export class BookComponent implements OnInit, OnDestroy { - books: IBook[]; - currentAccount: any; - eventSubscriber: Subscription; - - constructor( - protected bookService: BookService, - protected jhiAlertService: JhiAlertService, - protected eventManager: JhiEventManager, - protected accountService: AccountService - ) {} - - loadAll() { - this.bookService - .query() - .pipe( - filter((res: HttpResponse) => res.ok), - map((res: HttpResponse) => res.body) - ) - .subscribe( - (res: IBook[]) => { - this.books = res; - }, - (res: HttpErrorResponse) => this.onError(res.message) - ); - } - - ngOnInit() { - this.loadAll(); - this.accountService.identity().then(account => { - this.currentAccount = account; - }); - this.registerChangeInBooks(); - } - - ngOnDestroy() { - this.eventManager.destroy(this.eventSubscriber); - } - - trackId(index: number, item: IBook) { - return item.id; - } - - registerChangeInBooks() { - this.eventSubscriber = this.eventManager.subscribe('bookListModification', response => this.loadAll()); - } - - protected onError(errorMessage: string) { - this.jhiAlertService.error(errorMessage, null, null); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book.module.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book.module.ts deleted file mode 100644 index fe221a0eb936..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book.module.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; -import { RouterModule } from '@angular/router'; - -import { BookstoreSharedModule } from 'app/shared'; -import { - BookComponent, - BookDetailComponent, - BookUpdateComponent, - BookDeletePopupComponent, - BookDeleteDialogComponent, - bookRoute, - bookPopupRoute -} from './'; - -const ENTITY_STATES = [...bookRoute, ...bookPopupRoute]; - -@NgModule({ - imports: [BookstoreSharedModule, RouterModule.forChild(ENTITY_STATES)], - declarations: [BookComponent, BookDetailComponent, BookUpdateComponent, BookDeleteDialogComponent, BookDeletePopupComponent], - entryComponents: [BookComponent, BookUpdateComponent, BookDeleteDialogComponent, BookDeletePopupComponent], - schemas: [CUSTOM_ELEMENTS_SCHEMA] -}) -export class BookstoreBookModule {} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book.route.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book.route.ts deleted file mode 100644 index 154fa89a5cbc..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book.route.ts +++ /dev/null @@ -1,93 +0,0 @@ -import { Injectable } from '@angular/core'; -import { HttpResponse } from '@angular/common/http'; -import { Resolve, ActivatedRouteSnapshot, RouterStateSnapshot, Routes } from '@angular/router'; -import { UserRouteAccessService } from 'app/core'; -import { Observable, of } from 'rxjs'; -import { filter, map } from 'rxjs/operators'; -import { Book } from 'app/shared/model/book.model'; -import { BookService } from './book.service'; -import { BookComponent } from './book.component'; -import { BookDetailComponent } from './book-detail.component'; -import { BookUpdateComponent } from './book-update.component'; -import { BookDeletePopupComponent } from './book-delete-dialog.component'; -import { IBook } from 'app/shared/model/book.model'; - -@Injectable({ providedIn: 'root' }) -export class BookResolve implements Resolve { - constructor(private service: BookService) {} - - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { - const id = route.params['id'] ? route.params['id'] : null; - if (id) { - return this.service.find(id).pipe( - filter((response: HttpResponse) => response.ok), - map((book: HttpResponse) => book.body) - ); - } - return of(new Book()); - } -} - -export const bookRoute: Routes = [ - { - path: '', - component: BookComponent, - data: { - authorities: ['ROLE_USER'], - pageTitle: 'Books' - }, - canActivate: [UserRouteAccessService] - }, - { - path: ':id/view', - component: BookDetailComponent, - resolve: { - book: BookResolve - }, - data: { - authorities: ['ROLE_USER'], - pageTitle: 'Books' - }, - canActivate: [UserRouteAccessService] - }, - { - path: 'new', - component: BookUpdateComponent, - resolve: { - book: BookResolve - }, - data: { - authorities: ['ROLE_USER'], - pageTitle: 'Books' - }, - canActivate: [UserRouteAccessService] - }, - { - path: ':id/edit', - component: BookUpdateComponent, - resolve: { - book: BookResolve - }, - data: { - authorities: ['ROLE_USER'], - pageTitle: 'Books' - }, - canActivate: [UserRouteAccessService] - } -]; - -export const bookPopupRoute: Routes = [ - { - path: ':id/delete', - component: BookDeletePopupComponent, - resolve: { - book: BookResolve - }, - data: { - authorities: ['ROLE_USER'], - pageTitle: 'Books' - }, - canActivate: [UserRouteAccessService], - outlet: 'popup' - } -]; diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book.service.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book.service.ts deleted file mode 100644 index bff511f7e671..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/book.service.ts +++ /dev/null @@ -1,81 +0,0 @@ -import { Injectable } from '@angular/core'; -import { HttpClient, HttpResponse } from '@angular/common/http'; -import { Observable } from 'rxjs'; -import * as moment from 'moment'; -import { DATE_FORMAT } from 'app/shared/constants/input.constants'; -import { map } from 'rxjs/operators'; - -import { SERVER_API_URL } from 'app/app.constants'; -import { createRequestOption } from 'app/shared'; -import { IBook } from 'app/shared/model/book.model'; - -type EntityResponseType = HttpResponse; -type EntityArrayResponseType = HttpResponse; - -@Injectable({ providedIn: 'root' }) -export class BookService { - public resourceUrl = SERVER_API_URL + 'api/books'; - - constructor(protected http: HttpClient) {} - - create(book: IBook): Observable { - const copy = this.convertDateFromClient(book); - return this.http - .post(this.resourceUrl, copy, { observe: 'response' }) - .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); - } - - update(book: IBook): Observable { - const copy = this.convertDateFromClient(book); - return this.http - .put(this.resourceUrl, copy, { observe: 'response' }) - .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); - } - - find(id: number): Observable { - return this.http - .get(`${this.resourceUrl}/${id}`, { observe: 'response' }) - .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); - } - - purchase(id: number): Observable { - console.log('Calling /api/books/purchase/ ' + id); - return this.http - .get(`${this.resourceUrl}/purchase/${id}`, { observe: 'response' }) - .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); - } - - query(req?: any): Observable { - const options = createRequestOption(req); - return this.http - .get(this.resourceUrl, { params: options, observe: 'response' }) - .pipe(map((res: EntityArrayResponseType) => this.convertDateArrayFromServer(res))); - } - - delete(id: number): Observable> { - return this.http.delete(`${this.resourceUrl}/${id}`, { observe: 'response' }); - } - - protected convertDateFromClient(book: IBook): IBook { - const copy: IBook = Object.assign({}, book, { - published: book.published != null && book.published.isValid() ? book.published.format(DATE_FORMAT) : null - }); - return copy; - } - - protected convertDateFromServer(res: EntityResponseType): EntityResponseType { - if (res.body) { - res.body.published = res.body.published != null ? moment(res.body.published) : null; - } - return res; - } - - protected convertDateArrayFromServer(res: EntityArrayResponseType): EntityArrayResponseType { - if (res.body) { - res.body.forEach((book: IBook) => { - book.published = book.published != null ? moment(book.published) : null; - }); - } - return res; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/index.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/index.ts deleted file mode 100644 index 603cf68f9f79..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/book/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -export * from './book.service'; -export * from './book-update.component'; -export * from './book-delete-dialog.component'; -export * from './book-detail.component'; -export * from './book.component'; -export * from './book.route'; diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/entity.module.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/entity.module.ts deleted file mode 100644 index fba1f55ef744..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/entities/entity.module.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; -import { RouterModule } from '@angular/router'; - -@NgModule({ - imports: [ - RouterModule.forChild([ - { - path: 'book', - loadChildren: './book/book.module#BookstoreBookModule' - } - /* jhipster-needle-add-entity-route - JHipster will add entity modules routes here */ - ]) - ], - declarations: [], - entryComponents: [], - providers: [], - schemas: [CUSTOM_ELEMENTS_SCHEMA] -}) -export class BookstoreEntityModule {} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/home/home.component.html b/jhipster-5/bookstore-monolith/src/main/webapp/app/home/home.component.html deleted file mode 100644 index 0c595b9d7446..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/home/home.component.html +++ /dev/null @@ -1,41 +0,0 @@ -
-
- -
-
-

Welcome, Java Hipster!

-

This is your homepage

- -
-
- You are logged in as user "{{account.login}}". -
- -
- If you want to - sign in, you can try the default accounts:
- Administrator (login="admin" and password="admin")
- User (login="user" and password="user").
-
-
- You don't have an account yet?  - Register a new account -
-
- -

- If you have any question on JHipster: -

- - - -

- If you like JHipster, don't forget to give us a star on GitHub! -

-
-
diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/home/home.component.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/home/home.component.ts deleted file mode 100644 index f1410c2cf51a..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/home/home.component.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { NgbModalRef } from '@ng-bootstrap/ng-bootstrap'; -import { JhiEventManager } from 'ng-jhipster'; - -import { LoginModalService, AccountService, Account } from 'app/core'; - -@Component({ - selector: 'jhi-home', - templateUrl: './home.component.html', - styleUrls: ['home.scss'] -}) -export class HomeComponent implements OnInit { - account: Account; - modalRef: NgbModalRef; - - constructor( - private accountService: AccountService, - private loginModalService: LoginModalService, - private eventManager: JhiEventManager - ) {} - - ngOnInit() { - this.accountService.identity().then((account: Account) => { - this.account = account; - }); - this.registerAuthenticationSuccess(); - } - - registerAuthenticationSuccess() { - this.eventManager.subscribe('authenticationSuccess', message => { - this.accountService.identity().then(account => { - this.account = account; - }); - }); - } - - isAuthenticated() { - return this.accountService.isAuthenticated(); - } - - login() { - this.modalRef = this.loginModalService.open(); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/home/home.module.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/home/home.module.ts deleted file mode 100644 index c1004a6dd979..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/home/home.module.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; -import { RouterModule } from '@angular/router'; - -import { BookstoreSharedModule } from 'app/shared'; -import { HOME_ROUTE, HomeComponent } from './'; - -@NgModule({ - imports: [BookstoreSharedModule, RouterModule.forChild([HOME_ROUTE])], - declarations: [HomeComponent], - schemas: [CUSTOM_ELEMENTS_SCHEMA] -}) -export class BookstoreHomeModule {} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/home/home.route.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/home/home.route.ts deleted file mode 100644 index a59993f8f08a..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/home/home.route.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Route } from '@angular/router'; - -import { HomeComponent } from './'; - -export const HOME_ROUTE: Route = { - path: '', - component: HomeComponent, - data: { - authorities: [], - pageTitle: 'Welcome, Java Hipster!' - } -}; diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/home/home.scss b/jhipster-5/bookstore-monolith/src/main/webapp/app/home/home.scss deleted file mode 100644 index 7fe48ff5fab8..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/home/home.scss +++ /dev/null @@ -1,23 +0,0 @@ -/* ========================================================================== -Main page styles -========================================================================== */ - -.hipster { - display: inline-block; - width: 347px; - height: 497px; - background: url('../../content/images/jhipster_family_member_0.svg') no-repeat center top; - background-size: contain; -} - -/* wait autoprefixer update to allow simple generation of high pixel density media query */ -@media only screen and (-webkit-min-device-pixel-ratio: 2), - only screen and (-moz-min-device-pixel-ratio: 2), - only screen and (-o-min-device-pixel-ratio: 2/1), - only screen and (min-resolution: 192dpi), - only screen and (min-resolution: 2dppx) { - .hipster { - background: url('../../content/images/jhipster_family_member_0.svg') no-repeat center top; - background-size: contain; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/home/index.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/home/index.ts deleted file mode 100644 index d76285b27776..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/home/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from './home.component'; -export * from './home.route'; -export * from './home.module'; diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/error/error.component.html b/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/error/error.component.html deleted file mode 100644 index b79392173ef4..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/error/error.component.html +++ /dev/null @@ -1,19 +0,0 @@ -
-
-
- -
-
-

Error Page!

- -
-
{{errorMessage}} -
-
-
You are not authorized to access this page. -
-
The page asked was not found. -
-
-
-
diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/error/error.component.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/error/error.component.ts deleted file mode 100644 index faa965816163..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/error/error.component.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { ActivatedRoute } from '@angular/router'; - -@Component({ - selector: 'jhi-error', - templateUrl: './error.component.html' -}) -export class ErrorComponent implements OnInit { - errorMessage: string; - error403: boolean; - error404: boolean; - - constructor(private route: ActivatedRoute) {} - - ngOnInit() { - this.route.data.subscribe(routeData => { - if (routeData.error403) { - this.error403 = routeData.error403; - } - if (routeData.error404) { - this.error404 = routeData.error404; - } - if (routeData.errorMessage) { - this.errorMessage = routeData.errorMessage; - } - }); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/error/error.route.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/error/error.route.ts deleted file mode 100644 index 85ab257ca9f1..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/error/error.route.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { Routes } from '@angular/router'; - -import { ErrorComponent } from './error.component'; - -export const errorRoute: Routes = [ - { - path: 'error', - component: ErrorComponent, - data: { - authorities: [], - pageTitle: 'Bookstore' - } - }, - { - path: 'accessdenied', - component: ErrorComponent, - data: { - authorities: [], - pageTitle: 'Bookstore', - error403: true - } - }, - { - path: '404', - component: ErrorComponent, - data: { - authorities: [], - pageTitle: 'Bookstore', - error404: true - } - }, - { - path: '**', - redirectTo: '/404' - } -]; diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/footer/footer.component.html b/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/footer/footer.component.html deleted file mode 100644 index b3ba632e02c3..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/footer/footer.component.html +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/footer/footer.component.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/footer/footer.component.ts deleted file mode 100644 index 37da8bca7544..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/footer/footer.component.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Component } from '@angular/core'; - -@Component({ - selector: 'jhi-footer', - templateUrl: './footer.component.html' -}) -export class FooterComponent {} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/index.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/index.ts deleted file mode 100644 index 8cbf6368d7aa..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/index.ts +++ /dev/null @@ -1,9 +0,0 @@ -export * from './error/error.component'; -export * from './error/error.route'; -export * from './main/main.component'; -export * from './footer/footer.component'; -export * from './navbar/navbar.component'; -export * from './navbar/navbar.route'; -export * from './profiles/page-ribbon.component'; -export * from './profiles/profile.service'; -export * from './profiles/profile-info.model'; diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/main/main.component.html b/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/main/main.component.html deleted file mode 100644 index 5bcd12ab0b84..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/main/main.component.html +++ /dev/null @@ -1,11 +0,0 @@ - -
- -
-
-
- - -
- -
diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/main/main.component.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/main/main.component.ts deleted file mode 100644 index e1f2c8134e6a..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/main/main.component.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { Router, ActivatedRouteSnapshot, NavigationEnd, NavigationError } from '@angular/router'; - -import { Title } from '@angular/platform-browser'; - -@Component({ - selector: 'jhi-main', - templateUrl: './main.component.html' -}) -export class JhiMainComponent implements OnInit { - constructor(private titleService: Title, private router: Router) {} - - private getPageTitle(routeSnapshot: ActivatedRouteSnapshot) { - let title: string = routeSnapshot.data && routeSnapshot.data['pageTitle'] ? routeSnapshot.data['pageTitle'] : 'bookstoreApp'; - if (routeSnapshot.firstChild) { - title = this.getPageTitle(routeSnapshot.firstChild) || title; - } - return title; - } - - ngOnInit() { - this.router.events.subscribe(event => { - if (event instanceof NavigationEnd) { - this.titleService.setTitle(this.getPageTitle(this.router.routerState.snapshot.root)); - } - if (event instanceof NavigationError && event.error.status === 404) { - this.router.navigate(['/404']); - } - }); - } -} 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 deleted file mode 100644 index 4fab5c76acb6..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/navbar/navbar.component.html +++ /dev/null @@ -1,133 +0,0 @@ - diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/navbar/navbar.component.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/navbar/navbar.component.ts deleted file mode 100644 index 6e00d7a1cbbc..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/navbar/navbar.component.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { Router } from '@angular/router'; -import { NgbModalRef } from '@ng-bootstrap/ng-bootstrap'; - -import { VERSION } from 'app/app.constants'; -import { AccountService, LoginModalService, LoginService } from 'app/core'; -import { ProfileService } from 'app/layouts/profiles/profile.service'; - -@Component({ - selector: 'jhi-navbar', - templateUrl: './navbar.component.html', - styleUrls: ['navbar.scss'] -}) -export class NavbarComponent implements OnInit { - inProduction: boolean; - isNavbarCollapsed: boolean; - languages: any[]; - swaggerEnabled: boolean; - modalRef: NgbModalRef; - version: string; - - constructor( - private loginService: LoginService, - private accountService: AccountService, - private loginModalService: LoginModalService, - private profileService: ProfileService, - private router: Router - ) { - this.version = VERSION ? 'v' + VERSION : ''; - this.isNavbarCollapsed = true; - } - - ngOnInit() { - this.profileService.getProfileInfo().then(profileInfo => { - this.inProduction = profileInfo.inProduction; - this.swaggerEnabled = profileInfo.swaggerEnabled; - }); - } - - collapseNavbar() { - this.isNavbarCollapsed = true; - } - - isAuthenticated() { - return this.accountService.isAuthenticated(); - } - - login() { - this.modalRef = this.loginModalService.open(); - } - - logout() { - this.collapseNavbar(); - this.loginService.logout(); - this.router.navigate(['']); - } - - toggleNavbar() { - this.isNavbarCollapsed = !this.isNavbarCollapsed; - } - - getImageUrl() { - return this.isAuthenticated() ? this.accountService.getImageUrl() : null; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/navbar/navbar.route.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/navbar/navbar.route.ts deleted file mode 100644 index 317d99604b26..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/navbar/navbar.route.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Route } from '@angular/router'; - -import { NavbarComponent } from './navbar.component'; - -export const navbarRoute: Route = { - path: '', - component: NavbarComponent, - outlet: 'navbar' -}; diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/navbar/navbar.scss b/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/navbar/navbar.scss deleted file mode 100644 index 9a5f92929366..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/navbar/navbar.scss +++ /dev/null @@ -1,53 +0,0 @@ -@import '~bootstrap/scss/functions'; -@import '~bootstrap/scss/variables'; - -/* ========================================================================== -Navbar -========================================================================== */ - -.navbar-version { - font-size: 0.65em; - color: $navbar-dark-color; -} - -.profile-image { - height: 1.75em; - width: 1.75em; -} - -.navbar { - padding: 0.2rem 1rem; - .dropdown-item.active, - .dropdown-item.active:focus, - .dropdown-item.active:hover { - background-color: $dark; - } - - ul.navbar-nav { - .nav-item { - margin-left: 0.5em; - } - } - - a.nav-link { - font-weight: 400; - } - - .navbar-toggler { - &:hover { - color: $navbar-dark-hover-color; - } - } -} - -/* ========================================================================== -Logo styles -========================================================================== */ -.logo-img { - height: 45px; - width: 45px; - display: inline-block; - vertical-align: middle; - background: url('../../../content/images/logo-jhipster.png') no-repeat center center; - background-size: contain; -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/profiles/page-ribbon.component.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/profiles/page-ribbon.component.ts deleted file mode 100644 index 00fe76075d4c..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/profiles/page-ribbon.component.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { ProfileService } from './profile.service'; -import { ProfileInfo } from './profile-info.model'; - -@Component({ - selector: 'jhi-page-ribbon', - template: ` - - `, - styleUrls: ['page-ribbon.scss'] -}) -export class PageRibbonComponent implements OnInit { - profileInfo: ProfileInfo; - ribbonEnv: string; - - constructor(private profileService: ProfileService) {} - - ngOnInit() { - this.profileService.getProfileInfo().then(profileInfo => { - this.profileInfo = profileInfo; - this.ribbonEnv = profileInfo.ribbonEnv; - }); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/profiles/page-ribbon.scss b/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/profiles/page-ribbon.scss deleted file mode 100644 index 90125b70cb95..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/profiles/page-ribbon.scss +++ /dev/null @@ -1,31 +0,0 @@ -/* ========================================================================== -Developement Ribbon -========================================================================== */ -.ribbon { - background-color: rgba(170, 0, 0, 0.5); - left: -3.5em; - -moz-transform: rotate(-45deg); - -ms-transform: rotate(-45deg); - -o-transform: rotate(-45deg); - -webkit-transform: rotate(-45deg); - transform: rotate(-45deg); - overflow: hidden; - position: absolute; - top: 40px; - white-space: nowrap; - width: 15em; - z-index: 9999; - pointer-events: none; - opacity: 0.75; - a { - color: #fff; - display: block; - font-weight: 400; - margin: 1px 0; - padding: 10px 50px; - text-align: center; - text-decoration: none; - text-shadow: 0 0 5px #444; - pointer-events: none; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/profiles/profile-info.model.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/profiles/profile-info.model.ts deleted file mode 100644 index f1adc52c7bf2..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/profiles/profile-info.model.ts +++ /dev/null @@ -1,6 +0,0 @@ -export class ProfileInfo { - activeProfiles: string[]; - ribbonEnv: string; - inProduction: boolean; - swaggerEnabled: boolean; -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/profiles/profile.service.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/profiles/profile.service.ts deleted file mode 100644 index d07fad7e7fa2..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/profiles/profile.service.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { Injectable } from '@angular/core'; -import { HttpClient, HttpResponse } from '@angular/common/http'; - -import { SERVER_API_URL } from 'app/app.constants'; -import { ProfileInfo } from './profile-info.model'; -import { map } from 'rxjs/operators'; - -@Injectable({ providedIn: 'root' }) -export class ProfileService { - private infoUrl = SERVER_API_URL + 'management/info'; - private profileInfo: Promise; - - constructor(private http: HttpClient) {} - - getProfileInfo(): Promise { - if (!this.profileInfo) { - this.profileInfo = this.http - .get(this.infoUrl, { observe: 'response' }) - .pipe( - map((res: HttpResponse) => { - const data = res.body; - const pi = new ProfileInfo(); - pi.activeProfiles = data['activeProfiles']; - const displayRibbonOnProfiles = data['display-ribbon-on-profiles'].split(','); - if (pi.activeProfiles) { - const ribbonProfiles = displayRibbonOnProfiles.filter(profile => pi.activeProfiles.includes(profile)); - if (ribbonProfiles.length !== 0) { - pi.ribbonEnv = ribbonProfiles[0]; - } - pi.inProduction = pi.activeProfiles.includes('prod'); - pi.swaggerEnabled = pi.activeProfiles.includes('swagger'); - } - return pi; - }) - ) - .toPromise(); - } - return this.profileInfo; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/polyfills.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/polyfills.ts deleted file mode 100644 index cf38f3221bce..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/polyfills.ts +++ /dev/null @@ -1,70 +0,0 @@ -/** - * This file includes polyfills needed by Angular and is loaded before the app. - * You can add your own extra polyfills to this file. - * - * This file is divided into 2 sections: - * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers. - * 2. Application imports. Files imported after ZoneJS that should be loaded before your main - * file. - * - * The current setup is for so-called "evergreen" browsers; the last versions of browsers that - * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera), - * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile. - * - * Learn more in https://angular.io/docs/ts/latest/guide/browser-support.html - */ - -/*************************************************************************************************** - * BROWSER POLYFILLS - */ - -/** IE9, IE10 and IE11 requires all of the following polyfills. **/ -import 'core-js/es6/symbol'; -import 'core-js/es6/object'; -import 'core-js/es6/function'; -import 'core-js/es6/parse-int'; -import 'core-js/es6/parse-float'; -import 'core-js/es6/number'; -import 'core-js/es6/math'; -import 'core-js/es6/string'; -import 'core-js/es6/date'; -import 'core-js/es6/array'; -import 'core-js/es7/array'; -import 'core-js/es6/regexp'; -import 'core-js/es6/map'; -import 'core-js/es6/weak-map'; -import 'core-js/es6/set'; - -/** IE10 and IE11 requires the following for NgClass support on SVG elements */ -// import 'classlist.js'; // Run `npm install --save classlist.js`. - -/** Evergreen browsers require these. **/ -import 'core-js/es6/reflect'; -import 'core-js/es7/reflect'; - -/** - * Required to support Web Animations `@angular/animation`. - * Needed for: All but Chrome, Firefox and Opera. http://caniuse.com/#feat=web-animation - **/ -// import 'web-animations-js'; // Run `npm install --save web-animations-js`. - -/*************************************************************************************************** - * Zone JS is required by Angular itself. - */ -import 'zone.js/dist/zone'; // Included with Angular CLI. - -/*************************************************************************************************** - * APPLICATION IMPORTS - */ - -/** - * Date, currency, decimal and percent pipes. - * Needed for: All but Chrome, Firefox, Edge, IE11 and Safari 10 - */ -// import 'intl'; // Run `npm install --save intl`. -/** - * Need to import at least one locale-data with intl. - */ -// import 'intl/locale-data/jsonp/en'; - -require('../manifest.webapp'); diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/alert/alert-error.component.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/alert/alert-error.component.ts deleted file mode 100644 index 892e2d828cb0..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/alert/alert-error.component.ts +++ /dev/null @@ -1,110 +0,0 @@ -import { Component, OnDestroy } from '@angular/core'; -import { JhiEventManager, JhiAlert, JhiAlertService } from 'ng-jhipster'; -import { Subscription } from 'rxjs'; - -@Component({ - selector: 'jhi-alert-error', - template: ` - - ` -}) -export class JhiAlertErrorComponent implements OnDestroy { - alerts: any[]; - cleanHttpErrorListener: Subscription; - /* tslint:disable */ - constructor(private alertService: JhiAlertService, private eventManager: JhiEventManager) { - /* tslint:enable */ - this.alerts = []; - - this.cleanHttpErrorListener = eventManager.subscribe('bookstoreApp.httpError', response => { - let i; - const httpErrorResponse = response.content; - switch (httpErrorResponse.status) { - // connection refused, server not reachable - case 0: - this.addErrorAlert('Server not reachable', 'error.server.not.reachable'); - break; - - case 400: - const arr = httpErrorResponse.headers.keys(); - let errorHeader = null; - let entityKey = null; - arr.forEach(entry => { - if (entry.toLowerCase().endsWith('app-error')) { - errorHeader = httpErrorResponse.headers.get(entry); - } else if (entry.toLowerCase().endsWith('app-params')) { - entityKey = httpErrorResponse.headers.get(entry); - } - }); - if (errorHeader) { - const entityName = entityKey; - this.addErrorAlert(errorHeader, errorHeader, { entityName }); - } else if (httpErrorResponse.error !== '' && httpErrorResponse.error.fieldErrors) { - const fieldErrors = httpErrorResponse.error.fieldErrors; - for (i = 0; i < fieldErrors.length; i++) { - const fieldError = fieldErrors[i]; - if (['Min', 'Max', 'DecimalMin', 'DecimalMax'].includes(fieldError.message)) { - fieldError.message = 'Size'; - } - // convert 'something[14].other[4].id' to 'something[].other[].id' so translations can be written to it - const convertedField = fieldError.field.replace(/\[\d*\]/g, '[]'); - const fieldName = convertedField.charAt(0).toUpperCase() + convertedField.slice(1); - this.addErrorAlert('Error on field "' + fieldName + '"', 'error.' + fieldError.message, { fieldName }); - } - } else if (httpErrorResponse.error !== '' && httpErrorResponse.error.message) { - this.addErrorAlert( - httpErrorResponse.error.message, - httpErrorResponse.error.message, - httpErrorResponse.error.params - ); - } else { - this.addErrorAlert(httpErrorResponse.error); - } - break; - - case 404: - this.addErrorAlert('Not found', 'error.url.not.found'); - break; - - default: - if (httpErrorResponse.error !== '' && httpErrorResponse.error.message) { - this.addErrorAlert(httpErrorResponse.error.message); - } else { - this.addErrorAlert(httpErrorResponse.error); - } - } - }); - } - - setClasses(alert) { - return { - toast: !!alert.toast, - [alert.position]: true - }; - } - - ngOnDestroy() { - if (this.cleanHttpErrorListener !== undefined && this.cleanHttpErrorListener !== null) { - this.eventManager.destroy(this.cleanHttpErrorListener); - this.alerts = []; - } - } - - addErrorAlert(message, key?, data?) { - const newAlert: JhiAlert = { - type: 'danger', - msg: message, - timeout: 5000, - toast: this.alertService.isToast(), - scoped: true - }; - - this.alerts.push(this.alertService.addAlert(newAlert, this.alerts)); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/alert/alert.component.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/alert/alert.component.ts deleted file mode 100644 index a77c3e72c566..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/alert/alert.component.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { Component, OnDestroy, OnInit } from '@angular/core'; -import { JhiAlertService } from 'ng-jhipster'; - -@Component({ - selector: 'jhi-alert', - template: ` - - ` -}) -export class JhiAlertComponent implements OnInit, OnDestroy { - alerts: any[]; - - constructor(private alertService: JhiAlertService) {} - - ngOnInit() { - this.alerts = this.alertService.get(); - } - - setClasses(alert) { - return { - toast: !!alert.toast, - [alert.position]: true - }; - } - - ngOnDestroy() { - this.alerts = []; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/auth/has-any-authority.directive.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/auth/has-any-authority.directive.ts deleted file mode 100644 index 0f8cefb28ee4..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/auth/has-any-authority.directive.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { Directive, Input, TemplateRef, ViewContainerRef } from '@angular/core'; -import { AccountService } from 'app/core/auth/account.service'; - -/** - * @whatItDoes Conditionally includes an HTML element if current user has any - * of the authorities passed as the `expression`. - * - * @howToUse - * ``` - * ... - * - * ... - * ``` - */ -@Directive({ - selector: '[jhiHasAnyAuthority]' -}) -export class HasAnyAuthorityDirective { - private authorities: string[]; - - constructor( - private accountService: AccountService, - private templateRef: TemplateRef, - private viewContainerRef: ViewContainerRef - ) {} - - @Input() - set jhiHasAnyAuthority(value: string | string[]) { - this.authorities = typeof value === 'string' ? [value] : value; - this.updateView(); - // Get notified each time authentication state changes. - this.accountService.getAuthenticationState().subscribe(identity => this.updateView()); - } - - private updateView(): void { - const hasAnyAuthority = this.accountService.hasAnyAuthority(this.authorities); - this.viewContainerRef.clear(); - if (hasAnyAuthority) { - this.viewContainerRef.createEmbeddedView(this.templateRef); - } - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/constants/error.constants.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/constants/error.constants.ts deleted file mode 100644 index 2ebea942204c..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/constants/error.constants.ts +++ /dev/null @@ -1,4 +0,0 @@ -export const PROBLEM_BASE_URL = 'https://www.jhipster.tech/problem'; -export const EMAIL_ALREADY_USED_TYPE = PROBLEM_BASE_URL + '/email-already-used'; -export const LOGIN_ALREADY_USED_TYPE = PROBLEM_BASE_URL + '/login-already-used'; -export const EMAIL_NOT_FOUND_TYPE = PROBLEM_BASE_URL + '/email-not-found'; diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/constants/input.constants.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/constants/input.constants.ts deleted file mode 100644 index 1e3978a9b3c5..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/constants/input.constants.ts +++ /dev/null @@ -1,2 +0,0 @@ -export const DATE_FORMAT = 'YYYY-MM-DD'; -export const DATE_TIME_FORMAT = 'YYYY-MM-DDTHH:mm'; diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/constants/pagination.constants.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/constants/pagination.constants.ts deleted file mode 100644 index a148d4579ba3..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/constants/pagination.constants.ts +++ /dev/null @@ -1 +0,0 @@ -export const ITEMS_PER_PAGE = 20; diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/index.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/index.ts deleted file mode 100644 index 92a8ccef73d7..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/index.ts +++ /dev/null @@ -1,12 +0,0 @@ -export * from './constants/error.constants'; -export * from './constants/pagination.constants'; -export * from './constants/input.constants'; -export * from './alert/alert.component'; -export * from './alert/alert-error.component'; -export * from './auth/has-any-authority.directive'; -export * from './login/login.component'; -export * from './util/request-util'; -export * from './shared-libs.module'; -export * from './shared-common.module'; -export * from './shared.module'; -export * from './util/datepicker-adapter'; 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 deleted file mode 100644 index 7eb35364b48b..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/login/login.component.html +++ /dev/null @@ -1,35 +0,0 @@ - - diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/login/login.component.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/login/login.component.ts deleted file mode 100644 index 46711a06192d..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/login/login.component.ts +++ /dev/null @@ -1,87 +0,0 @@ -import { Component, AfterViewInit, Renderer, ElementRef } from '@angular/core'; -import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; -import { Router } from '@angular/router'; -import { JhiEventManager } from 'ng-jhipster'; - -import { LoginService } from 'app/core/login/login.service'; -import { StateStorageService } from 'app/core/auth/state-storage.service'; - -@Component({ - selector: 'jhi-login-modal', - templateUrl: './login.component.html' -}) -export class JhiLoginModalComponent implements AfterViewInit { - authenticationError: boolean; - password: string; - rememberMe: boolean; - username: string; - credentials: any; - - constructor( - private eventManager: JhiEventManager, - private loginService: LoginService, - private stateStorageService: StateStorageService, - private elementRef: ElementRef, - private renderer: Renderer, - private router: Router, - public activeModal: NgbActiveModal - ) { - this.credentials = {}; - } - - ngAfterViewInit() { - setTimeout(() => this.renderer.invokeElementMethod(this.elementRef.nativeElement.querySelector('#username'), 'focus', []), 0); - } - - cancel() { - this.credentials = { - username: null, - password: null, - rememberMe: true - }; - this.authenticationError = false; - this.activeModal.dismiss('cancel'); - } - - login() { - this.loginService - .login({ - username: this.username, - password: this.password, - rememberMe: this.rememberMe - }) - .then(() => { - this.authenticationError = false; - this.activeModal.dismiss('login success'); - if (this.router.url === '/register' || /^\/activate\//.test(this.router.url) || /^\/reset\//.test(this.router.url)) { - this.router.navigate(['']); - } - - this.eventManager.broadcast({ - name: 'authenticationSuccess', - content: 'Sending Authentication Success' - }); - - // previousState was set in the authExpiredInterceptor before being redirected to login modal. - // since login is successful, go to stored previousState and clear previousState - const redirect = this.stateStorageService.getUrl(); - if (redirect) { - this.stateStorageService.storeUrl(null); - this.router.navigate([redirect]); - } - }) - .catch(() => { - this.authenticationError = true; - }); - } - - register() { - this.activeModal.dismiss('to state register'); - this.router.navigate(['/register']); - } - - requestResetPassword() { - this.activeModal.dismiss('to state requestReset'); - this.router.navigate(['/reset', 'request']); - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/model/book.model.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/model/book.model.ts deleted file mode 100644 index ee943a4127e0..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/model/book.model.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { Moment } from 'moment'; - -export interface IBook { - id?: number; - title?: string; - author?: string; - published?: Moment; - quantity?: number; - price?: number; -} - -export class Book implements IBook { - constructor( - public id?: number, - public title?: string, - public author?: string, - public published?: Moment, - public quantity?: number, - public price?: number - ) {} -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/shared-common.module.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/shared-common.module.ts deleted file mode 100644 index c6e52d67c561..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/shared-common.module.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { NgModule } from '@angular/core'; - -import { BookstoreSharedLibsModule, JhiAlertComponent, JhiAlertErrorComponent } from './'; - -@NgModule({ - imports: [BookstoreSharedLibsModule], - declarations: [JhiAlertComponent, JhiAlertErrorComponent], - exports: [BookstoreSharedLibsModule, JhiAlertComponent, JhiAlertErrorComponent] -}) -export class BookstoreSharedCommonModule {} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/shared-libs.module.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/shared-libs.module.ts deleted file mode 100644 index 79ac658edbe9..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/shared-libs.module.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { NgModule } from '@angular/core'; -import { FormsModule } from '@angular/forms'; -import { CommonModule } from '@angular/common'; -import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; -import { NgJhipsterModule } from 'ng-jhipster'; -import { InfiniteScrollModule } from 'ngx-infinite-scroll'; -import { CookieModule } from 'ngx-cookie'; -import { FontAwesomeModule } from '@fortawesome/angular-fontawesome'; - -@NgModule({ - imports: [NgbModule.forRoot(), InfiniteScrollModule, CookieModule.forRoot(), FontAwesomeModule], - exports: [FormsModule, CommonModule, NgbModule, NgJhipsterModule, InfiniteScrollModule, FontAwesomeModule] -}) -export class BookstoreSharedLibsModule { - static forRoot() { - return { - ngModule: BookstoreSharedLibsModule - }; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/shared.module.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/shared.module.ts deleted file mode 100644 index 695b16679316..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/shared.module.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; -import { NgbDateAdapter } from '@ng-bootstrap/ng-bootstrap'; - -import { NgbDateMomentAdapter } from './util/datepicker-adapter'; -import { BookstoreSharedLibsModule, BookstoreSharedCommonModule, JhiLoginModalComponent, HasAnyAuthorityDirective } from './'; - -@NgModule({ - imports: [BookstoreSharedLibsModule, BookstoreSharedCommonModule], - declarations: [JhiLoginModalComponent, HasAnyAuthorityDirective], - providers: [{ provide: NgbDateAdapter, useClass: NgbDateMomentAdapter }], - entryComponents: [JhiLoginModalComponent], - exports: [BookstoreSharedCommonModule, JhiLoginModalComponent, HasAnyAuthorityDirective], - schemas: [CUSTOM_ELEMENTS_SCHEMA] -}) -export class BookstoreSharedModule { - static forRoot() { - return { - ngModule: BookstoreSharedModule - }; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/util/datepicker-adapter.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/util/datepicker-adapter.ts deleted file mode 100644 index 524a38c83438..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/util/datepicker-adapter.ts +++ /dev/null @@ -1,21 +0,0 @@ -/** - * Angular bootstrap Date adapter - */ -import { Injectable } from '@angular/core'; -import { NgbDateAdapter, NgbDateStruct } from '@ng-bootstrap/ng-bootstrap'; -import { Moment } from 'moment'; -import * as moment from 'moment'; - -@Injectable() -export class NgbDateMomentAdapter extends NgbDateAdapter { - fromModel(date: Moment): NgbDateStruct { - if (date != null && moment.isMoment(date) && date.isValid()) { - return { year: date.year(), month: date.month() + 1, day: date.date() }; - } - return null; - } - - toModel(date: NgbDateStruct): Moment { - return date ? moment(date.year + '-' + date.month + '-' + date.day, 'YYYY-MM-DD') : null; - } -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/util/request-util.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/util/request-util.ts deleted file mode 100644 index 6579c3cb2a1b..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/util/request-util.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { HttpParams } from '@angular/common/http'; - -export const createRequestOption = (req?: any): HttpParams => { - let options: HttpParams = new HttpParams(); - if (req) { - Object.keys(req).forEach(key => { - if (key !== 'sort') { - options = options.set(key, req[key]); - } - }); - if (req.sort) { - req.sort.forEach(val => { - options = options.append('sort', val); - }); - } - } - return options; -}; diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/vendor.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/vendor.ts deleted file mode 100644 index e8923d5c66b3..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/vendor.ts +++ /dev/null @@ -1,81 +0,0 @@ -/* after changing this file run 'npm run webpack:build' */ -/* tslint:disable */ -import '../content/scss/vendor.scss'; - -// Imports all fontawesome core and solid icons - -import { library } from '@fortawesome/fontawesome-svg-core'; -import { - faUser, - faSort, - faSortUp, - faSortDown, - faSync, - faEye, - faBan, - faTimes, - faArrowLeft, - faSave, - faPlus, - faPencilAlt, - faBars, - faThList, - faUserPlus, - faRoad, - faTachometerAlt, - faHeart, - faList, - faBell, - faBook, - faHdd, - faFlag, - faWrench, - faClock, - faCloud, - faSignOutAlt, - faSignInAlt, - faCalendarAlt, - faSearch, - faTrashAlt, - faAsterisk, - faTasks, - faHome -} from '@fortawesome/free-solid-svg-icons'; - -// Adds the SVG icon to the library so you can use it in your page -library.add(faUser); -library.add(faSort); -library.add(faSortUp); -library.add(faSortDown); -library.add(faSync); -library.add(faEye); -library.add(faBan); -library.add(faTimes); -library.add(faArrowLeft); -library.add(faSave); -library.add(faPlus); -library.add(faPencilAlt); -library.add(faBars); -library.add(faHome); -library.add(faThList); -library.add(faUserPlus); -library.add(faRoad); -library.add(faTachometerAlt); -library.add(faHeart); -library.add(faList); -library.add(faBell); -library.add(faTasks); -library.add(faBook); -library.add(faHdd); -library.add(faFlag); -library.add(faWrench); -library.add(faClock); -library.add(faCloud); -library.add(faSignOutAlt); -library.add(faSignInAlt); -library.add(faCalendarAlt); -library.add(faSearch); -library.add(faTrashAlt); -library.add(faAsterisk); - -// jhipster-needle-add-element-to-vendor - JHipster will add new menu items here diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/content/css/loading.css b/jhipster-5/bookstore-monolith/src/main/webapp/content/css/loading.css deleted file mode 100644 index a1e24615b4f6..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/content/css/loading.css +++ /dev/null @@ -1,152 +0,0 @@ -@keyframes lds-pacman-1 { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } - 50% { - -webkit-transform: rotate(-45deg); - transform: rotate(-45deg); - } - 100% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } -} -@-webkit-keyframes lds-pacman-1 { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } - 50% { - -webkit-transform: rotate(-45deg); - transform: rotate(-45deg); - } - 100% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } -} -@keyframes lds-pacman-2 { - 0% { - -webkit-transform: rotate(180deg); - transform: rotate(180deg); - } - 50% { - -webkit-transform: rotate(225deg); - transform: rotate(225deg); - } - 100% { - -webkit-transform: rotate(180deg); - transform: rotate(180deg); - } -} -@-webkit-keyframes lds-pacman-2 { - 0% { - -webkit-transform: rotate(180deg); - transform: rotate(180deg); - } - 50% { - -webkit-transform: rotate(225deg); - transform: rotate(225deg); - } - 100% { - -webkit-transform: rotate(180deg); - transform: rotate(180deg); - } -} -@keyframes lds-pacman-3 { - 0% { - -webkit-transform: translate(190px, 0); - transform: translate(190px, 0); - opacity: 0; - } - 20% { - opacity: 1; - } - 100% { - -webkit-transform: translate(70px, 0); - transform: translate(70px, 0); - opacity: 1; - } -} -@-webkit-keyframes lds-pacman-3 { - 0% { - -webkit-transform: translate(190px, 0); - transform: translate(190px, 0); - opacity: 0; - } - 20% { - opacity: 1; - } - 100% { - -webkit-transform: translate(70px, 0); - transform: translate(70px, 0); - opacity: 1; - } -} - -.app-loading { - font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; - position: relative; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - top: 10em; -} -.app-loading p { - display: block; - font-size: 1.17em; - margin-inline-start: 0px; - margin-inline-end: 0px; - font-weight: normal; -} - -.app-loading .lds-pacman { - position: relative; - margin: auto; - width: 200px !important; - height: 200px !important; - -webkit-transform: translate(-100px, -100px) scale(1) translate(100px, 100px); - transform: translate(-100px, -100px) scale(1) translate(100px, 100px); -} -.app-loading .lds-pacman > div:nth-child(2) div { - position: absolute; - top: 40px; - left: 40px; - width: 120px; - height: 60px; - border-radius: 120px 120px 0 0; - background: #bbcedd; - -webkit-animation: lds-pacman-1 1s linear infinite; - animation: lds-pacman-1 1s linear infinite; - -webkit-transform-origin: 60px 60px; - transform-origin: 60px 60px; -} -.app-loading .lds-pacman > div:nth-child(2) div:nth-child(2) { - -webkit-animation: lds-pacman-2 1s linear infinite; - animation: lds-pacman-2 1s linear infinite; -} -.app-loading .lds-pacman > div:nth-child(1) div { - position: absolute; - top: 97px; - left: -8px; - width: 24px; - height: 10px; - background-image: url('../images/logo-jhipster.png'); - background-size: contain; - -webkit-animation: lds-pacman-3 1s linear infinite; - animation: lds-pacman-3 1.5s linear infinite; -} -.app-loading .lds-pacman > div:nth-child(1) div:nth-child(1) { - -webkit-animation-delay: -0.67s; - animation-delay: -1s; -} -.app-loading .lds-pacman > div:nth-child(1) div:nth-child(2) { - -webkit-animation-delay: -0.33s; - animation-delay: -0.5s; -} -.app-loading .lds-pacman > div:nth-child(1) div:nth-child(3) { - -webkit-animation-delay: 0s; - animation-delay: 0s; -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_0.svg b/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_0.svg deleted file mode 100755 index 1f9ab527901d..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_0.svg +++ /dev/null @@ -1,198 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_0_head-192.png b/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_0_head-192.png deleted file mode 100644 index 81330689211e5a082081222dcaf30c37ea6104cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13322 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 E2c#yGumAu6 diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_0_head-256.png b/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_0_head-256.png deleted file mode 100644 index b4739ec3e47edbc81542888fd0fe7f9bb411c5b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17812 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 diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_1.svg b/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_1.svg deleted file mode 100755 index 7a118f307712..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_1.svg +++ /dev/null @@ -1,9387 +0,0 @@ - - - -image/svg+xml \ No newline at end of file diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_1_head-192.png b/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_1_head-192.png deleted file mode 100644 index dd2643c15dd3055d1ca3fc057e0e4f7b0b93b785..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19660 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 diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_1_head-384.png b/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_1_head-384.png deleted file mode 100644 index f930681c128095fb436ebc8b486e94baf6cfc186..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48895 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 UO0?Ay3<5r~Qi_t*;zl9=2eGOgGynhq diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_1_head-512.png b/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_1_head-512.png deleted file mode 100644 index 9110dc8fe44bf6ed248a2723f15e900d87cec9a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68803 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

Wv|Q)i4zQT>0V0j?|=lCiv9> z?xCyEc!0NN{v{X#IegEc+2@6D*5_5bEChGezy#_~{wHX!J`~zc6o}kd%v9kIu@kgb ze|p3=f3N1yWI1!slF{?whYF_meP=Wd^$+3|l>qFzu<&hN7QQ>` z8dM->y#L*~aYGESBZg-<_nA^O)^y{pstw6WCpUIV6dJnc~%?KcKoavOb z=KR=psLe=KJ{70y4A~e{b(we?S~c?YcnCn@jkCH=b^SqMCVe58+jy~!8VNPI6+m?J zPLq*v;&m6qS2%Zkh(hO<%9T_P~ z6!Dvfo)QdFe2cM{ae9^7V_5$4#}0zSqdoBRuD|Kn5S-=Np>?(!o%_Vd*XHqwPo)jK zknTu$p;ar?7d1M%p~zwf1C_|Kt_EiGk5n|O$isx0lBwMi(!&jUG#m?6cZeLLgUyF2!)o%tFLk7A(w3$?3ObL_ zz$q{MI`cw!KPaF;>(zb#|dEHdaV2UkuCGXDAu?1%wZXO2Py^ml^ z82JdW|FT1OxEjwdIjDAb4Z&Tfd2YHh##(KdXf>$0LpnDOItdm}1(PSDt4FV} zpqYuMl7PNRI8b`i9Tl;3drZ%Kyj|#@SX5dKFRXZf#wRHljEw$LA_7r~A*N<)J*_hE z+@8$H=l~lF%VNTk^#^zr&IXJkxcojpmrEXQ&c3_$=OJf|QbBKORlFtU(2-;oWyc%W z8>!M4?;y2eF_pt6JToUF6~uANAT=FM*io4;pro1l1|PHU)=b3RY-wbuvjYnc@$q}} zz9TcabJnwB^e%rzB2YiBUlesl$QfQ1ivT;c%8g7UpT2^Y)Id7Rmc zds95aTTg^z8k?Ekk~SH5*8(yKA|?;N)j|3Y7{A z<4>R`@;R|&tZ6Jz^>`A{LL;W`KR=7wEvackOJ7>L6mUkNN#U*&3z#}`ninL#NFIW} zm3X}-wN;1IApW~T22dK`N*ID|qKI z*RZG)HMR(~#`NBXf70z^oq@I^)MCa&4yRbf9L38WGB2}Z7tZu>S!)eWY+{04*f;2p z>=?>gn$d{|EZvh)GNv*}t>MZI1aIoXJN3>b%S-1=El~3=BY87Ntg{=4;WfjAx{;z} zeoACsXEq~4dLksIxSNx2ul3>f$_7|Db3EI#!3(f_7cH=p}~H1C_@hPOu7$tNgb+FY*dd1S`M z`n;uiC}MC}1RO0D&u*K>T|Hd-k|x!P$8hCZg+eLE!j)6iR}d}o-OJmvZ^QZfRh6st zwrfU|;MhZ9TZ>w{g9si$^#0h|k!3+)EA0Hh&C1aIGxUxzv)%98FGHa)Lvn*>8hcWG z#B-_ppXNF52X+vOF&NHLr;+Nv9v$5Op6zkt4#4flN{X>?xKf^l*cdp2A!gX8r_|Sg{d0(!! z;*JaI0EuciwK+Y0Ju8x4B!Ffls(i zw!}_)ek2Bz0@4mMT0dfLN9Ej}VY;&V8%an==AYY-o%kt9bk3l8ndt4X2PV`w(nI}&Py_sK^8+u@VpFQ{5oYOuDID+McLqL2xIa^D zS{}z|>K=CbLr6c6JjOA!n1jKh78W04 zo>|xPAFt5MQX9I4hGZ`8e+I^&ZjNDzBCNmT2;5!G`95xCKXBHS9A=7;Rx%yEE7W&h zfI39sz#imusvE3YwUFcL9YLRq#l9{QTRE=`=|h*8?rkpC7_zdlW$y@laND(O?`+4n zuc=w=jI0r~q#G9Zv1fZx$o8klFHXKD!}AX8P0Tt4%SG!n*A*9IF{;13JizT57m1h6 z_@l0UF-AD`+`n=IxDmAWZdJtGSva+WlKlFgFg~;swGlpOScQd`9dgwVbeKEXcV9LY zloyRB&@p?d*=Ki!KG{oBn?l8tBl~|Z?+X8to3Nlletn0`*iaL)GQMVOB~*nF$+c2* ze5%-;2^;nI0@00vt-$t2XuQ8s!liew1+ItA>XK66>@F42&0Ts|qm5KoKdOnem~>LH zF@LtrfUY0@d#rku&fNLa>4*sUPEeo86YCZi>RYhTZ$7%9ou5;h@1w5pFx+3ZUfxpi z7R=D>S@3KK=VxHxRoNg9p#B9$rs%G7;*}bU8wF6($rlta$aJJSBy%{ACs=fu^v49r zuAarX);e!ieN$~!{r@xYAbFRO0X%$Cte1 zB+_kojn0}DL^(pX5}Tf>NA5N2pOPqLJv@G&$@%UjH+>cqJ$PG6eQ&(0z9`sV%p*k+ zW;mT6Q&EvHjYP5#3QNQl?dme2|1R>T9d+Us1_$4xg^NQOSIf=s5JZz=cF_IZ?K@bi zo|CB6)v8dtUViVx(CE1T#W2UMITIj7Sg#53y6>sNQNuW)v!+{^whjarQp(B7_g}#a ztSn36L$dfv9KvxCm^CcpH?jStrawMA7S*wbf6?qN)>O_vJU$C1mDMj@*5p>haq71AOEb^Q7S%N#LO?|wKQA?I z34u2IG*D8~(q;_mO8XpqW<$8yW{nE6fXfZW?0CCH6Bgi4+A&hZhJdO$3>H}VS16X2 z^o*R)NlVLISVhC(i=JkmD3$N$_|v5_Z1(Eh7e1Sv9G9%LN9i~72`VP!lz(k?#a!TK z<`BT8^=fIf&;B7)Z_n+_q-sbxzRD@YWsjmJj9;iWqTf2<`pb3)JouBzlNZT6buVhe z)Hf3ezJ`t0>+q7Q(YdST3oAQqgzoAZVI4-Oglr@r1)Tx`ML^`CAIt^YewIP%?QN6C zUiD2kcyid7OCo_sQN(wFoV_k!B(yU`f$me^8KK?xjwpTTgn21gK|CovV2AxA%+RwH zX(De1=^0tcHJPpa9Endz2*6}ST?v4u&sgTCB^lHpj;Xmr4?JAZ(ycX7h-$t~K`bh_li!}a_T3Go zyLz+FE6pYQI1jq|xYJd7bm%jsra$ADwfXNi;6c22ZX_r=xO#hyz)I|aL;U9`RA?MA z6-Mwn6+arz%=9Lv41YZ+k{*1t&`U2+v7WuwkK6r z{--Bh)8{{R1Wr4)Y1KVY&~;rj9;sxU+<_;szEJt$A1E%o#AOi7q{z_Aes8R0n?MW8 zD~h^1GeM632#{dEFSY-fzNn)ezB`K*6Ro?oBQsmeG%-Yx2em1W!JE`8?&ih=$IM9k z{O@!h9Nft}@Rt=>>AFePH`159u;S8U>i(Gp%Rzfg5`j@TIk_6pHIgezhA~t66$&0x zSG>WKN5SmA#MorBFUZ9iyf@>a6+ez>@9**5;Mlq}hP7Al#wc-;+;| z-Y^@JNLx*v-4Vr68waA&3_#wy*y&2zPXB9oLexhV-&9Ag&zgSI`zle>U6}4-U407j zIGDNNp0=~S^KH?5a3IuIctJa5sgl^&@r=C1YkUrGgAfiWYV+wW6-|>-%573z!@yA9 zcbHzKPxzjgv!;lG5}i7EE{k~GOVrhnDIp`6Y`P+?8uEE9kP&L??J4FHq z%<;->rajZ4dG!BIkXi(Y17^A9C6&rQj{(>9ZnNB+L|!$?2OQaKeGAG z){Bz95@m}TrFnr*&@SETW9*7LO{Z6#ghfl|D4yn>7nd~*XJUOSTq*Z27*tdetDS1N zT%OU4%C~Zu`y_<>NL+2YoOG1gOm(t|aDwvDKM1kpAeRk<@!x#Z5^Wc5@$`A~?cpX8 zscU0K6j;XJ$3bkv9NR`F|;ok@P1(fI8l6P@1x`E(i>brPl-hXOqOjOsowYE8g zo3jl;#K)hTzE4E$y@cP!+hGf}z+z%vL~SvwDW*}Ntd*Z%qb+I7-fiq$8egs1`vwPk z3@@OG^=0Y36xr#IhxK{b3cmI{Q`kokCC82;7KZ)0Q~Rp6Kz51IEmsU)cj6~%?b65z z2C54thUR)8iw0UKd5`<8@73n#ry127t%-^$sSu8SSm|M_^k2Tnn8~==!E&eIED~Ol zNYLz83tT}s*-n?g`~aa=Yg$FVLO^Rq@E(Qg9k?*B@RwG@2{XDYg>XVc^-^Z#?b%1a zZLApnWV>!WkcB9!28NWf{O~=kH(YD?{d-3L+1hOlGheErKLS~M{c^3{a}%-OuH)qc zQc9($)1~vG2CFh}Qp1!>Q?%W>!sysr{nh`o0E%UIAsfRptaapg1G4!W1?`1~j^5 z(C~BAzRi%Af%FMWO|sp}#g1!xATo!=mai+3@bS|ftFMQvYZ`lWuKR_i7owYQ8N<{s z(so)sTJx~+dv>t$qlu3$KFz**+HDL}g9%3v<8zXGhciYa5G17)Ss;g^OQgV3KzfKr zNIY}$FVQWNjc!J9T!qX=A?bYTEsXBKB_b4iTPrQ){rgyv1D6VR2=Jeaq9#F1gA^n| ztr&lSmO>d10}eV44jKg0=2S9vD_8B65j9ql?EDQe;gSN=Y$6IM%K<{5{0_tnLo!bO2B&w_M7P5G z`B~aM6k~xxYY^Iy8(DjGe-O!zP8Aw^* zwYuLLs-2#uz9yY_Yv)U1ac!aa)bf(#L=Js=6u9_9RJ1OOo<|8DAtBV4RGW;P92>sG zjm*TY{*L#%ST;g$X5Iy%W|!-4+JzJ|j~t#Jgj<`h!lUz6g_>TliirY(30PZ=%O6fO z%(stPS}yPO@%;ZK68Lxl?|X{fxzdfQT<(f->Z90xw81`+{^*ZXXB!kLNP2mN*i+MX zr^}7b)8i>j#Y4c;^Hk@7{3R!&+yvCfvj>O?JvJCOxEAxWTJ7N4rotb(Pb-<|q=Zn4 zDI2EFI{XM<{=juAE(_e!gzP%loIH&4Xbii=nO7DYvqzp1@0(1i`tcY4a&-<_@!tW0 za$KdZUhp^;%$JlIdh$$et4%zEqN0-RpeB}VRLwXtNk>oI*Ggq8%P)=`9)V!Rs2B%i zm4_XU8OZUY+x49)AHte{(O8OJ6V7y!mYHERJy_t`$KWalK#zJ6?OlHgM((AuDDQ-dG6RkB`PtOOpl=A|QHIIlYML3J+#e6I zt8`ML5Wm|{IW}en@!<98*tU>opPrs_UVR$pxBUp8^721do3kx^Iy_(a*TIp%aXX$`8ux$9b?c} z@u*vWGMpRd)yUYWu|oxgs$YiE`8rygp!hy~(Ae1y`s)er!XlYsU}+eMQ7BWwnuv<; zdBERSiF|i>N%r;Q>o|yZ9M63@9bJE45{SwtwCWdCLc6VEI9GG&<9;S|`kK|m>mJM~phnj68}{iFR8+V6DI_OnpAZ4_RZn7OtJU-O zfrBOp1Xhqn+Byp(_X2bYr(0yX={Nka{#z(n%T0~5b=)(nazIq{$BaOpJUfjg4dLFZ z>dm~`NDRHII~0b-y%j6ZA=d6HC&NHMe|R&ke8>9)o818`*dYwFm#5rP1yZZlN|5L)6awEkna2nSsfQAv+GRR+OgM z*?;F`K7XbtVzT7vUhMuLc(rP&alqjuD6H08S-h6_+t@iQHg+ej_|MF?^2{VJx!I#7 zNHD`$uq2L>f(p+SLEhMT^PN7HA z#fi>{IQz2mfm{MZ+>DDrVyy#(!%&=vY=)gzPJdb;i41wK+xz*BPvg%y>OFKZaF7@!Qk2QHe8~;q>3zsu5(WO3;}w3s z<<3Qch5Q-+cnBn9x%sYm0qw@zt(jZsuk*7Mo7=Ei*E@1JWP8f{iZ>pZn9M&dJ4A~1#DvVtN@8WptO^5)FYu)UC_7-7@t(|e2` z-4e2)Y)MJeShP4#EOSu4w#^8;(yW&^l40^m_SekUQx7vS#mx1 zIb-rXjZmEY`HAI)^AK?Qw;i=Rb1=VWBxD5atosnHG#|s@x7++&vn0cj|2(qT9AZv9 zV??iZ;wG$@SLdwKrV8)@wTKa$XJ=3&-z@hZP!4#aPP5@g>dN3wH%5Xe)enmQ`5F*K z)MTP~;z+~ke&!#|+>ZM{n6>JzfC-pBGOb_Qv+duu3BB@T;*&Wh6I$J60Hl7`u8f0_TLY(fU4o~(jzuG z1${t%#0+?=>MN~?ZVbM={mwA1>o_luOMAd;ZL})+Pu-9i`O{rfD3Onot}%K=JZ^hA zYIP~|1Zs6X-POp!#=%mC)(Pd3=9mY&X!^WqF@9R(?323IVP)!*mm#a&znF=l%$}=$!_f&+tUq7 z>Hl#s0dCgyLt*7K2$OUOCNjv!qhQ(@gRZ(d^9bt zkmeyfUa(!)Z{lYVsNI^qsKm6(aYJ}<5!1TysZ_GeO)c8c#~&@xsN{4omQ`3d=9Lx_ z1R`i4u#ZRGJU)fSP0*WKmVl_6D$=GUj`K|* z)GD)B_FQ$<-EOe{RpyO~j;h|-WZTY3a_EzkGyn{a@3J8#rIjf7OYXc*mt>5%m>99O zl~|ljuG?;1=F6s6vU1QNA)$F}jYZls77Yj=lMx06PJL}ZJa`Gau3e+!$xxvsEKHkm z#*OT;a&Z;QM}7OrRyMbjr5Phe4x2j>>JM?VhF-CE$?Jq9WwHu@!*K41+oEYUA`Z9L#XG zC1F$jETA2Kw+k;QB&2WLgaq_wCBz>8<|n!l_&}asnShQ9-=Gx@xEA5*+hrJ6%IJ1l zz&r+_n7~0yJq_Wgobz&N6auixS$808Zo3(nBeFUt^z!bG1j_F1c&6x z#LyejR1D*DJ~<4vnje7naxO(--RuVN-t5y2Sl0cBiW>3)v{=U?ueB0cqr zoEBUKfmPk><0vOW;kZV=(uf$-(_0}=H753e9i}G%1?sS`<*vK$ivjW*@5iR~=yCZH&r9NkwHrbiNE+Q2bu_5G3H^G5XeYY?)Yg-NJ z34UGZwH`Hhttgq>n{&MLGqK%Xpn`8qCTW^Y-6!v?4%*pF`XAQ8J6y{W1yFs2hy&f_ zot>mtS68g8SvuqFiQl^(Z~DBXzqflhABOtAJQskUoD~!pbd8Kot8QCfmGG0_v=nZH$L(gLAGu2w5r$A$~3kE(+Tl-wb2em7Q zxRU>)=Hxw;k&sX)1XQMHZU+IgDu1VN5$jR5sAvym(IE|v+@=aFVPNqQg*a_fUh8jE z$qLk0tmKrGM!?dR2wCmZT6n}BzHJoy6*_h^Bue^^mpPFda4rX)t0o^%QX}ed_bcZE z;`D&*=fKZ45lr&Yo9-EQb_9oKQgT*Et7~iI81keIoc}G)Y#X`PRX=X8$V>0v88C{# zsCH$RI4siom>BQCLgzP4sVB@dLc%SOxvK3)_`O!I26AZ*{tReOFz;9FkNGC8VZ z74q=(R8o0F@?lg@FRCVsDxXtLOeiB77|;?_Q0U2jT_qamnTB64%HJ@ME6yn5(morN zVCNEID(F=%4Me%v*48({n-YhJiuDW{vs{=Y)ZA{53&a%mkxP&OQuMRz%hoP4C3@IW z@q@6jaXocHlKugM`(JC-KVA~_g7D2CHkR=>M=twub&;TW-=8<$-)6Sff1i{@yw&X& zwqMBYh%?Q0&h$HY!k*rfoA`*Y5r=u9MKJwavpr4x>AG6`)y&N4bu!D66+*1F_0b^N z;=IEI9U$Xn%$xwOL?*XgL779u=dF{$B6}kM z&ns-r>`3vD3l9_65G|VlrD=y^3g^c9iG~PeIb9G&(Mi$nvSOGl*Ta1K&mVQGb-+8C zXJZKB1+3ACDdmUnZ%AHhCyV{|)WpNHTCZ5<`00L|{e+?&Hs?g1`y5h|1Cy5}+uhC`k+k{R{1!oFvrM z7a~QH?yn&q+65pK`fzo<*j@_XpXVOujsM$^7pMengd9EgId6#sYJ8Z`!SNk762YPR zBO%UCh!JNM!zC*VJi}&@Oc6G=fYHEAnZ$Mv*lf!o;dYF}+ow3H7qEtU8Zko8Lbn~` zNwtVfTg_ zk7kpS`ZvZfD}0pP1rt_l8zD>69`HSCSL>Ub_hWTdXX2^Qwe(-iFW6~ViBIr9uNVQO ztpCA!I}!57IetK_p}!Ag<75}hrQou_E^4yTOAZtQpI8C!xrzls8wzQN(!+LYvy#C5 zI`{@%9K*5wyX%~Xf#E+VeitzBggm0=qj9KYuG-3jx%Kj1C4wP|sF~)%c&t67>#j$p?XH+n0HR__bd@ytA4O-ufUv76lj~z zD3$pvyXQ4bFQWXj{Zl+e5F`ZCvI(K1t+2#suoh65B@A$tm4xgrj#0bFIeS%BktUCROoZsr$P> z``ss~4_iFJ3GS5+Nm+{HRM6(J3Xoa;5&-1{bp6pP@U z@f;GGptSGz)6|iCOtXv40Jk7=BSVvKlMhmWj1AQn$_BM&5XL2CMTzI+aJDuva-mEd z6PoY9AGhaCp@qC!)y{h0nl`(;L4f%A1>%ykxe{Zskx)@PmCmlmu|*L&pXRD|MP57K z|LOJ#kaU z$5DX9U#_5<#bDT|Os3?=N~1%T7JIFO&N6=tN=J+&w_1HP>6BP>|C>-Ne%(ocTvR8O zw`lbwWHxm05H!IXBC1?fG_7VjQGhCd()_8gL?4QW1$@QgfP3Qraxf7|M$*yZ%uHZk zp9C)-|Jb3UEYoKF!&}>xE+&v%eS1Ab)qSs=a)`FCOCAxq$74}GGST-bvAs0$-`j7r zhg$o2T3IFKl=9{I&j*lN+_cbtggDziihJ# zk9&9ho@X-K@BXs3xR_=(6+vD36+w!I18_ZtV88QwSvvE{N9axP^MMT=Y%KKk2NoZu zm}ZFqV5vxnGijf^wED1k2HD?*T*HY1hWe>4^yc=`531!8y)VW@{4fYQUp_ys_uzE` zz~TQnG{`ORrfSkqhFhD8JmeOdpYx<$8*3gb!507(S2kR?`j!g9DK-Bii(-mVr8b^=JW>t z+t0U)sGid`odA2<5X}z#{lO1&xM<3vdZkzO-`Z3TXJV3w1Ur@jfN3mjj;1BDtoJlcjMivPV7iI;wXVFUxj3`l_`^@0S5PhiE zv3Hz!_iO;wr33%m8ZuHLfi|==gA-2m6~*nm)aKbd>`E9O%AsVwVncBw@ypI$liT+N z>HPZO<+*X`(KA<}-XQY!{Qgpk`tG#QykzlrqBSb@&){EC#Caa*I*FU}lsR&4Zk(J` zyy5^Stdyj#Tqg(!8HfkCM5^v071p9KnN z3m?z^C6AtJ;+dbJ`o`7xxFax&E`IuX0SI*L*zyT;Xj{7g@1T7ztb1=cHyhgI0|2z1W0Wj11muD zMKjQuu~LVNf`Sr;O7|=E>K{h(gLLTD=WwS>EtnN*nAzyX1Yz!3&|o#hUgHY#>L2jg z{TLF$3L!F#{zF4fh#{kY6XntUk>@cZ_`?X`a>SgI;1K%&0~dj&kEv<6Qxi${ zZvY6^TpO|DnSSjz`KBBt3h=xIZC347jx=SJm2b$0Bv7W z`%7bs{852OIH!{cbSBTQT)POlJ+!Lp9ZH>L3QY47R4yM}HnTik?e6QJrkBPwo{l5{ z7w!prrGpk8?rzU|6u}u!-)7B_O*J*U7<8HW4j-=+wkB)};WvpKvKj;~=4*6+#1xr1 za_VjhU_kC;(ODFO@cQs_e(`p54?4h5p!F`#Jta8o(}Ew2iF#JYYi(S8ME(5vEr* zChdhBkx5f*m>AfDEU)EpUi+;^IIjCf#`P=dWu$$S*-xM=PRY~2# zIXMbsu%q*K7DZx0g8fipdM1u=j6`-Neov|sEDi!0E|dqe-=OB{`b)DNXHz5j<{w%# z0@g|s1`dv8>~Pi)H$Q6|B+bt>iRAQbC}85X%Z^KOx1x7zH7C4~Ph}9n>VkeQ*WB=V%7hj1rT|@?qrHjZ)F1OY(LhIxJhmG)*);$ z3T}o-^&vI^!GgW6cGL43Y4G%SLmj{?W(Ht=@(i^xpccX^qHHRI7RIdC1E@1jN~JLYz>`J`NqZdLo$(VHnDk;HH>A{kE55ygN# zu=W=#W^yzWoYw_=P!XGpyMmOdxOm`JF;c0lMuSYP_Kmc$Kj*9dPjlz9qbv+29C6%rcq= zw+l6rTtRh77@e&R_X+$LGYT*uN;e8uRsk49jBnt<`)3luKVgD^R$9wp=6{WnZl?~V z2PIe#;Q+3KLJ@62qFlO90u{ntcg<&9ZeM0;MpYyyMZ?)`Uce@?`|7zk%HC~TPAB&H z6aC%!8mzw>aGT1gdA#{s>jvvFm(Npx-$Gxk!DD4$aKF9UwD>>Di)$Fo z?TRuiItu@|Lq=l4f!AcgQ^RE8pL}w)g}2Kc57S~mxkLY9bJ>0SST_p?RZ|<*T9tdI zVB@QfUzC*?NZ}Qkqlo;Fn24fB)EwdgAmHTm#H0kfV#YEz#Tvuvms@z;<}JA5V15J! zu3==P^Z(23<1tOzj51epxmXlX5PPb{;NKbKt|FVgp<+hThNyl!w>b(3dHwHUgsY2nCSX6y%edfoxVNTcByg+IsAi#S3y-fWKyTJjJ9% zr7jD|_t~!$ik2E!7}n|cd@iA<;}GIqJGv24HfZHj40IVT;3GbM-15EVl&hr2JO>8G z&$x>AAtEUeXp!jJ!Yo>Ga&z^(w==ME*5$z~@Dm?$^N=UP5Adfjs65xHP?Z)NUUa-_ zw7U=kvc8nGbpBkFH~~gb1HoC$4yc8^sS=>F_J4^d6if)QZ&$?O8k znV!G=A|mMOZEf1Do%T0$5sL580an%Yue=l7@mEN@9_3vUt4dQ5EZ2{2x$Q%>f~_cr zeulVsi5ElFXjV?fX>mX(q+2+sZvh%EaYZub1(Hm}Y%~;`!U+B#Tmmg`jgbdANybe^ z@GkMAv-#&JGNh}$+-kfI-sU6@h%FrJ03H1l8Umn}wZXsp1~Qn7{^h|DaD#X9gnY`% z?wDnNW%GH+)#-Hcl0K5?@}&O?T;%?(RlFx>Hg@x*J4FLb^kwq`Q&s?nX+wySuylTc7WG`OR`Id(S;H=ggUz zJvG;~l%G%}BzD@0!>%nY&EUM-%@2-ff53Dv&-=c%1Dz{TExb6pI01X3 z8L6|xUcZ4ueBsxN{<*hDm$!avySezfYEHi!o4y)MEy~Ga2*EK57|+cvx0DRu%R|02 z0iR?XoBp*nh;a2!pnMT0^UA^Fm`Cz>-{LM7Dud{#qIfU7HYrU=;&Q$~IvXAw(F!@| z^vzvwORfty7?0hcETY~$XSQuN*+@)bCsgr1jqODL(Dv`%#Q_d_5JFQTuSCAN*;dk= zlBVY9%NJkSd|C`>r$l)|y*BbH9IbstNQ$s!c(T?}MAnL^VPbRT(H&9pz z)l(-6Kg4cp;4`}HX!j9ijWM%5ikNBg*P+#eEio)r%~d*jXmHvf*p)y|N^J5cIv#YH z&|T3xq0=jx0YCZ?&X-5-Th!InHnm3BY6(h8zh&5nrn$TE!L07Cy7z+^Y2h zt72ie%%{+mp3P6%biOq|#)SE zy6r&e)V~t9*@$BcE?Lyf9dM7B^U#>d@tV9_|#$aox(Ko-EGt zmSMYf5mhte1vB!EF+^s0#1|X~>S$mTYyih0?LUj%@&1$FjjJIf4jgH#lAFa+fIDyh zn9ayG2Nur^qbl}q2c!Keo<8?^V>ezw*aJZ$BJE3B@x#ZcQ`KR$Yodw4wYbmf6c*a2b^Ziwa4K7uDGnV}jkd}9;i zsyQ#X6L00%JLq0)wR01_Fy>q;djI-Yhsu6umY>?0$rm3htkURJEjc|aDu+F7eFD_1 zI}|6`LSXR1~Q2{RJ$-i|uq5lGvubC{(GvhrG0HxpSTFQi#1u_bqgk&4nK zMA__D{3glN-=o#~>IVrtnqOSgk`hah4Or%1lG|vNOGBN=2ZzKM&&`h5tyZA|pLOB_ zvL_wxT|IJ&Hh7okDt>lr8+Vryk%%;^B1V>dtF>r%a0Sqn=}}G>A#|3gBY>>WbdR=c zO*XH4!f$Sa^_^l6X>g4W6MGkmZ@U^{L+Zqu*TWP1EeoD)r}9+IVf{BxS!WApA7mON z5juv|RuNto_p_vz?wD~X=1F4?10R0qi=r~+4d)`QcwaxvVFVAYxQ#Bi}f(ZAZ> zec?u~2s0^QahPp$jOMgaku;yJaj+S#A|M_+vXILi61!wHH}>&x5SO^}|U_@4kxnJ2;gU$1Dr z{a(JkOZ!iSl7O!%9PsT5NL@@8rhELb@4iUA!2wcGqcPt;Z}t32G}~pJo{9Ks0bOt7 z9Dr05?xn9Ey!`BW50~Lzl#CDCvRD~%?7d&B{Snkh->~tQuATKhEHta3aInXj`f=H; zG}jHx%s34OnfwMuDW5MAGw+@+=QO-}jk2mPL}_C}sPrTNl2mWe~j z&rj%GFxol&>t2E7`-+GGVU|;lCdHBzW8NaT3sa0m;!2 zBl@|^iuElvSz4aqOcYQ$Q2p&V>A*KL8C)zH#GniKG*nPQM)Twqqi}mX%=hOd7ZIYM zF{5au%?r~Mm@_o*=98E#*dqob@uJB6;|HNIuy!D1DuALO4OA4C@APO>2f~P!OxSIu zpLzzwmu4&0d7vs-60@Ugso?)q41z%>^YiYOsCjhLCPx2iZTeR;W5A;Y4QwO)W~Eo< z{q_Nz2ht3wm7EMF>H)mGM~uu2xjKtxMIXMN5dJs|L_P4?i;2Uly+hvY@p#A1@t(Zi z+R(7`c{%xei|;{zJ+3tC6_LiS z&bG1K@6Mt-;hp)oWIO^pm~~JKX;X(ZvT4P{(i3}3q50$CS$;(7 z@6=U5VlPJU13O!A=9pYTOU|@l9;ZL{bSexDAMy94c`&w}B zj&M5)m$C8?@CGH4=(#|eF?78EV|Q#RlmA~4 z<-32lU&VtKgtx(;LZgB$j#zfaf$Y;D!>gZ8r7ETn4p*1J?-1`fUMQyO>K|}sDzhto zg+X_`w5uupj@vkiopW=Uw{jzqs8Uu^xcx%!8SV*~Mn?8ks7{Cno7Kg&Ua6KEOA9}P zNC0AUfm1gLK2Xf>#p8C|I}@vg`dHJJzpx|eS2PG-cFHa5?=G7`H%LbrqfqF~ga zRXhkA(czZqhr1lYLAvel2?RfSB4Jzy03v=IO;#|~K=B7y1Q!^?KvBpMe~DT}>eKF5 zoA;ywfbqvx*dqEO)2t6w^vuHpA633HI-e{Cmgn!e#-%}?iDx)Am{jJ#RE5x=^Sj4= z`FRVn$sgDW%@s4}2=MW>AVs{yy_!@R(v@jz$05CtE+RW#nNBKR57u1L-p1%IvU)D3 zv;3UWWyz9r-El4ZI_FH-p6iKEKU#7Ztzp1J|I&}VyfH!Q1gm*z30yKzbMuQ4u`J{g z|2ou9pds#KkF84$1ck3{TO!d>FTt8DMR#{)Z}>oI2}rIg7$LNRqYu(;zywf!qzu0G zlK!s8>Wl0UFki4&$0Vr7=jBdAWJ*VqTN68F&EkP!ZDUh47(Q&iJ)T!guYOvLalasPj7%*|*%|-pQ-oA>>$n}l3 zoRU=XK7jRjsT%#$TolvzZwTo;WunD4%=%lDdVrOcXPf{Xz3P6vOI#(i92aq2Ct~RB zg7tZ_W6cHsj2#;pZ{fK+xW`lE6XLPk_#2dBTVov`u?9eb@h))(V3j#?bcL-Kh!h4{ijLf6MQVx@(~g}u8T$ORUFch@$~mWIO0oioYPB+U za1!m4{?KEFXl&P6Yk~2i(hd^(@z-u2n<6#o&+AccJBP|{^-1Jn@mb$~go|_I1Fg(_ z+Vz7gn)@d>-~KIfun0?JU0S)rO71ghSr?3g@Q0zLSF_`d?xMz?GnZUc^Q@7Gng13u zvp{*kcD0p$t=>%MCSN`^e;7uW&UXzn4GC#V_jRta!|hC%f+=WZSRDm#zGp}x-_q-m z#8R}iu}+(~Y%b^Hl7jW2_kW#Zw3zq=jRcJ##`&#WWPvIV^2wmwpmQb~z1@X-hMbod z0US;-i8}1*>+qx2{JRm6Wy&Bz|6J?jgpROY>Pm|#4n@TGB;;E(po~lnQeX_btbzX+nPlmNW+!4U zoOciwe62@RNgsZbV`VSAl^06xM6JFO3?O&VYCB~hvfF8$>w?dmJ6 zbMO5`Sbp?Lh1hs=YkfmV6iP#Hs7ldfERat5Bgh47?sQ`K4rO3kY{H>TNMu#CT*)&Z z)S(l=HoMG}m$$931-wHcV;~Fg&3czTd?jE`vz=yj6B*A4 z;iRbM5$2&Gg#OSS=zXN~NnPm3Yi-YKRgY#ZyiC!a`gO9Ldr3pQyTxN2@%0@_kY@|r zH}h+OYYfyQLc0rjxa1IeQ|WI>$lY@q8h7i1E+#fM$n0UC!08*DnCg20vct^GlrK4B z&f%fei$>qdb@jv~w9v&|Li059&Iza3b`v$C>c3z1l?ius&CW83C^L<9pCgB#pLJ8c ziuWCoNceEZo1LS3Y&s%hrdJG)W$k|BWKIj`Vhjx8%UFLXfygzJHMFutP062_UHyqQ z&`-wuPVI(s*3i=ke^Rl2rhUwkp^{01;!fl3tI%3^aSVO9q{-6(ZDzIYK-$cVnk}%! ze`l7A^l%5YdG&VH;Krpe`iAF5|3D=grJJK4*4(1TW48`KMzCeWJRD-Aq@>#IZX>|k zB#Axj9|_5oGT8IdW6#e1lFqwOz`und4V>>qXRR~G3x~xE$GU&EdEyMvM@0i%f`oGv z3Sbh4U@X|CVCBUNruNDg4{mDUVJqtp03X zA~Ms^1emyg&6r*Z4DUpwHA$+?Rmkb&Mc-5M0(tEgIe3 zp#WHYM?-5%f<%ni&aDp}Pl_bV5JBCd*Ag_}e@_)&RF=agmeX`CTDBAxSX3evP8GeN>ZwU(L?GLG{J*z+}ay&|}hHw`kfri0izT zB$6+KQTXNN%(0YMTgOA^lai*bk=9@QW=Savto?@NoT?I>X zhJoE3+6ih$S|0?^J4ivGt!@7}jenoq17{*gjHkIGW~@w*)+3Zfj~Myw1r@Im5?UhT zMSbq&4kCudw+tM>NmHGssV}a58?F~Bj!0!(EyUGQvfS|i^ZatVaSoH8Un#&D8WFAD zlNJ^@_uCE-Iosk-(vPL&)PW^5cNymhZ?1TQql*b^ER7t_4qL1c>i5e+Ya|t_;^sDl zYxESd?tL1L&g&c`P%4s>{hSlGW#mK+`FuxC_4A-9h4@rzX=tv|RfvRyhQFx1nPIq` zF*%+sPIeh7D3QU#NmjfHnNgrmX_qg8?$a&&b36p=CX5 z&TsqTH|Rjbhg5!$^8bWF-#dR^-ScRx6NIuj3)LuLpfWd2RhcTA>7Ad%uMhkPD@fw` z!0YMNYJV-D@_kJ+NkaUI{o@bP{`M^;AgTGdq{xk`K$lzUF;W&B$e~ECH&~c*qs@7` z@(ih;kzsfFumSm=IT0=}JD}|iQpf0UrR8p! zvb$SG-Hm(o>D|aly0o0EUuwuR0g_OVm?HU2PULOcv-75z3b8xv&!}o~3IhXY%+Rv; zHOci0$|IkC1w;3lnR+?}m;H%*zZkICKx&MIEAM&nuQL>Vew$Afu*e+?X`&j_q`+G zE}NjEm?q@C{ad=?jnRaL!)oL_?kXA$imk1&;h%VFG#a`4+s7T29okSPS_N~(_APXz z=s}QGW4Wxe)(lEY`k^%&OZr*IAMfwk(e3UQ%uxYCLc;GmJ3Ax@2nZ^oL8}SBbl}g= zh~OwIoW;IWzIE=Spej*JBjn3GSn6{<7YA zZ^3%zqph8Ac7&q*I!XJAeAucz;|*d*yu-W$!Is6cjvfw zHjFlg$b-a;MNHO5zH6#x;Uw9Ub9%6{?#4J8{8f4ineFe|gM9g>HPy^H__Z_Ef2^vp zXz8ZY`rBz6QkZ&~WPcb*uBmDA&h7j7!1>Q~4I{P4?y9TLlpo7Sd7NyP6lyFyNu8a3{BooF#G5!nnzl1h59FN;`$N1q>VGRbezHilU)orb7DD(x%9NGKd$g9cL9MOek_07jc!7DyFU2vk zmFa-N`VF4rV^KYW1#Cg6UjZsxgo5C3wB96rP2+s~q(`k1+ZP1ph$Zh#h6g^!W>RJ$ zKa7jkz%b&QSi7XyCPAV{6;t{`&0p6FsB>Zc7_} z+}}m)GU$yB>-~$9zDSQ&;#}U_N$2IE>}y__{SZ+GJtV^;BH?9t+bRt}Mol?&OgOJ< zj}%r?va6cMTeh|BTNro3y>tkUUxi1N8kfn>|FEncIl7uCEjQrX1~;WMuj`D-n0mh%KCb6URJ&cn62Vln(u4to_O z;nTI7u(-VVhv)tc{q);6p47CaHgzZLY{m4SZ$>nsL|<(`N}2DG=sql=HMLM2JMoyg z|4$1*A@2P>Uj}0$I{M$&4WMHq>AdBLh+9@1-qwhHgSmfRDgUHK4a0NUM^{W+Rwnmp zj1WcPm;>c@=kr&aI;&DO37J>!Vuua{*Z>GGdDL@vca(tzwwl7?mRFK58r)G-piA{~ zzdH#zzftQYBnaHdUJAe-hzlD ze9Rs2*1=Tv4wYB&Bc1Yb0%yfgxhP!NN zlUnG_%kV&SQk#fWv-UVYU*Phxz}3flzk(aQw6vPnZHf*uZ^;C*{03qQ$_B-Pj)aySv12^`VVHD&=^J*ml6jzwPAKwV_h>I zn>RH$`F*K1C(YM|+l*0Xc6y7vp@*r&X*46CC0>!QU#w~$WmRzhk^6!o3@smy93069 z;}Yxl!_x@%j%1c{!;^_f9zP|%NNJk0ft+`P?RZ51NK(x@8H>({kwXd;(*QK}^+`O= z*Zn*)n8xbM%4`y4hcFhZZH! zF8Rb-)A-TU^V%wA2p3IGerpU?hY^A}@r520;E?6jQ*sRB^V~;^NDtcsI!$eZe&^-H zN=wW6*PKD10FJASQ;JMw(FbmCB9}HlhP7dQxX#@?d-OWGV1SuE20b;;FhpUjkHo)1 z-wdZku)d1#%=!4&YY&&8WGFzxtRlSqmH zyjSb}iQSYY-Em{5ruS?0S$CRNj zvcq|bN!ih&^mTb;ZdbIXpDlW-s|)7$h`2>Y*aAB5kA$Ek>>8w3qnNf%C>~#sJBJZq9{@Mj&ghaDVCHEp~BlM<%m5r3=P)XFzGITPiXH>BEQG zyWgKtfNL%x)_1=YF%Dt~bL-k-A0Dzq*Q>Xu(yhAIbmS_Fw@48)z92zN{5qFx$@}PL zfuKN&!sX#tj7?ZrSp4xgoyhS^^PLw;N)i~My!;h4&jRC}qq`QqTr zpO+{iD&L~Hy16*yh>A_OF~Jc6sMRi`=%}^coxhm+IgUvi3DG$@IeE2s`>llNfHp25 zpc@_7_ng&QYREkwe%j`KaudjSFF)ltlYU4u*%c6>C>sF-ZVYNrR#oEk=6YRJ?(Fil z0>GuI)ke0qXN@)Z9xSXSk^$lKnLIw!8x+9TI&C)@vl~a%V>74EpFcwb!^5Mkp7R%f zm<2ysI@&ugpaLT!BjH;PW$D+kYs8y&JhL3~gti*$9G7VV>CDu$K~TPuIa=?Fnrqw{ z4qIQxqq~D#O3l*go4UR`I$p#0KFI5Zbr2fgf&*zy?2O$H{?ygNfN#PI;1QB~tWI;& z37l-y7}T&{bhXw#Pp>b|6Et(Zqio{#-Z8crc?VJIp*fee4&Q|D#+?oC?>q5T6*n#p z2b#FStIh#)q!+_7Z=8N8thM z4oy#$0l<6u&q&^m;BtZZzn@g!V}yBAVuW~p9j6uD5{BG|JkJ@VZX#m7G<6FC!=Kv2 z4=Ne?$-3Mtz>t-o9x)8DKaxbSSjd8+qqn#BG;|QLxoGcz-RDJcXa4ai1b254bD&Cr++2abGh z-lDJDAj(iAi+1>PU(qVECFB|+XopUGHgHBrg!gUGqtjAb4yk%TkBd`Q+0lKeLaiK z&CfsI!bC-7s$8bi<84~|JPcM8El!i^^z!=hIiO(viVAr#6ZVC0yb)?0ToeH^<5Y=5 zbr5)eDB#6XW705CeL>t_tkdu<92ySph*Ci^4e*_*n>jt?pYi{7{cdn#;(`unJ@$Dh zEGZdcQB0uSy?TfMKC9?VWz7~2#W`@KuFs|X-V9MWJYVZa90 z+QKrsoW;_kM1V9jIGa5F0p>x4Rv~Sk56hDd1Hehd2?Bo)#)95L5^RKm0>&3+7C3l# z_LFFbmd3U&hFQ>n<0<7S3c2lq#&{nqu1(V)xBJmKMnGk4Er+I-8vS4CG1lfr){l$- z9^~SZ%%v&tMoZsyu6OPcOFw?f?CIM*ITdtKI$X^3+2)C?wD< zSNd`|cD3cmsekqFA63v|9sp^*%*;8MUV7W)cWrKR>^qlamvQWK|l_2o!)TJ6jtY`>CnP90Y$d zN51sxtgLk>P0ji1=x(WUC||MPn&4aL$STOH^YQb0yp3@0O8Ivge#XYZjvx~D)^$7H zuVM#}p_M~dO^sSwL3XyWsf8HYx4az8vD<}cEy}0Yur4ND&Q`n%rw)i*qB5(qDh>HK zI8=R(=c`z!w8i7q;??P8=(TZiale%9>5aU+ytE2v>GR0Mc%;Iu`YkLhye=+kXHZFP zer2q^0elCr-Ny9Kj=cP~c996rUbKOI*VzdULBaP?rk@m|s0Q*Z7BzL1mv>H2%bQ&{ zjKMREAAH!1F?Q0GTW;>?@WBIqMMOAra&huWQ(<`gvj+gQX)9eFotnYX!3Z*$7%Pen z5*8K~_ULk!;f-%j)T76r5q%5_XDo+XPbIFxgmUxqy9N^`%H(cba$a_=^;Mgw#Jln_k>QF5S<7D$bT)FR31IMX09hsS=#NZDEV0C0w z@#)j2klHwo_|()T832!j#Cvji@|bcYK4t2^2f4VpoA3|tt+l1pRCPJ*w*N*iRE}55 z0iPM-OQ`dx88tA=i&vJHZ&#tGp()Kcc0mvOBj{&IB(We4GH`Tsgc%yubzEKE$tx98`d(Aq8~#?j*~o&I$JHd^aEd#(o*7wd`|^H^jOLQ6|)P+wb1^n9NaIU}ZH^mp`1i$VlR2ru|!HnpPS z7)G?_HKAfv0gEVxl*RZPN~a*8bN0w>Vq&7Wh6ZkILQFyk05NaV z36y-rr^S^z+}Q~u03ehb30EW#%xzMZ;*z+|y^z^@e0&^z3})yc>!2kgGraG)z{CeC zo0^K~=-+F#x$hK%HkAqZg8knQs2fO5hK9aE?$?EnnuQ=^H%mJ>G+5MA5@HFy99k!p z>He|fVC;_Daj+|?Ed#e+O-)U=bPUxy*Z}a)`_QqHMe$*~g;IBfTrTZ68XITJ9@7g! z1K|BsZ1HF*yE1hn*JYlI1{1w2w}LMf}Hak0; zYu^20`dZc2%d5>q!5Jm7E$Cm$h8c_bC+#?mH9QO`x$=HwT8+f)$HO{tmq&}`*ohF>YSCuk8WBB*?%HZysTzIk(bL$ zMW(BwPE2HZ5yO!F4qYUg3kV260^lABri3+S7g<@^l<)TT3sS!G4OgBxkhSXpfznj& z^f+N}K8jU)oY4h;C#dotP&xL4fNQ{T&yYJIJ{kK{6m(?%S1&LZKvGmx1b1ghK>8{d z5xr+%$i~3L*Z~*q(LxwH7*`jy|6Y}#h~}xbNYBsD?^}4#dX0DtzEyuMTZMu{`IRZ; zq>TtL)X6F-YqNcSnA|a|O5}kAXlQ687Z;b_k@{o)>geeBAiyL*0Bj>Zs9IPQk-uK* zh{0;eMDzrPyB-}Ll7Ozb*&MvACs=GmJa)dJp`nOya@oPv%DSN)wFlH+W)FR4)@CnC z12SocuJ#<7Q1Ty*u0S(`Q-Ts8a?mscvsx&i&8tljbOa}6$_w5kk+fKiFP8{*gAaI( z>S9q;A-XcB=rL4fUsLiK7#K6`c!)yFY^*p^X8iy7&jbetbJpt%fI(P8N5{%TaElK- z$n-J3RPdj$&TE>aq@gg&k=EOs>Cpr}m&{mU_rkQEn@FKqvnAu59sQXqS2%Aka5&!!DxAS*`G8))| zdEC)3C?^s2_GDruVh#G-OLN@3aNSE! zPv0Rs|B-(%B|$AA$jr?AjI_t{5%_m_j7$vEy7G<9?BJn9W?S&IenQev*x2sv4qUc^&`Ap&Uc`g`HRfJC_~(OXJF#Je zs~(tM(=IKtHPB?Ddyic|j$waV{nbkX3xrfrNble5G9Wl*0cmU!EaM;*jW@=CdW;S_b+Wvx_iM`f5& z;%VXv>@=9MECyLcH}n{>F&ADsKVbDy$;kI8uQI{elOjqS##2Yhp$v+S`{e>% zeu_v(XQ}eXj~_fK`FpB544K)R6t8)o61SO*Mp%X$Rw~-gl48?MKqm4GhSdg$Rf$zs z4smSBSJItl#tA7fHa5uxvL?PxgGW;XZo9vFeR>{)>O5XPmL3TpX#1CMfY?bCjSK)) z9q+NQaK4WAXRMvy-I-6d>4nROM_`2XM1;F$atIbBr>A4@$vTMh5TPW30Ki++J2Ej5 zml%@}6M^-kwyJJ!=zmArAfH>Ns8eRDoE$v1=K+Yw%gYC-m#CTNn(JnNwT!wK*|qNQ zzG*IN%USW0znkQc*U-@5*1GtS@uzKdSrHz&AC_q1+g!yH=UpaPnfyNF4?et&yR8@$ z6gbo^)}0L@x#IEm>SZM9{xbucr_J>>`(bA&@z$-n6-pOHLwbtCt7X%fF{m4YP$FeE zh1Z)-#BrX3&BD2oH2i&8qXREQx&E4>TT6YjKN5mQ*UpCtB{O&$eGdCI(Ao?Bbu$5kLErwPrr7JfRe@uH@t z{^v0hq5R2y%}1cU8314hiqqZQjj(vYHywTLRiC}lbnykP1+Lv%1r775{r$plIR<`9 z9Jn|f;qUg&$sKkVV$1-ziJ=$?#E)ZXyfu!7Z+=$*D>pZ{nu7H2GJQ8(vbrN40lnPb68nznd4X8&UEiL_I3%A8hijjD}>VwskloVR` zfQ;`S=$|?}_q;sXdNbc)^&>L>v0=~fxI5!yz(Vv^a8}3-d5-&salp-tM@B|QdqBQ? zesOVVW=e{soxME*kVIgsXb|}_%9R{C82SZ}R{SJv6-p7`aA_-_4v(~ih%9^x3Dk5~ zoEQFvNMzCT4|>zNOmi+tqXMzUS0#eu|1shG`$i0a$Odq0*spqD;S}M9PCX zY1tXJL!R!oGwbu@l#@2O_*+0fhQedT(8 zUp%8m0-%~Aghxc==v3*%Bksq?E+BBs$-~oVKod{AqBP}dX=^L&^KiK%2juEk%;8|+ z{F0LV$P5bylL;z7cJhi+775gxzi`cgpPdZ2ZaY4@ySU{&2A8gz&mjWhl;X?a_PoIW z$bcm6(P6nYaK#9*oER+2zdfrypfqVc{U6xdaTo~|0e#zQ{E!9(P($(A9?bG23`Me% zrH=>?o7}1eXc-w9(L19ub(y)p=#3deOLOF%9vt8!q9O^mYTWtuULV)Sb7%~jOto>= zaUwee>PE$;W6D@?Qo%#s1Il&6Lh$qBe2vkT07$yz?l|y*))7Jm?{C72rwV$49P%#m zP?hKcW5CeK#;FuMvqUf(vv>I}49z<6y}t&#CNT`qkn)jP>V-wO0>W&*Qa3k^Sfr>E-hKTw9d+nWVv1sP&$o@KT=Jgtx_XjM^2ivQ#$Xwo zZKi}hwsCF#ht;0R#&Iv+Y{l5v`fEg^9`5I{I6OT?K|=Jjn!omtvin@= z*S{qJ*?D|yZ7XjR&U)oeV=LA3w0?6m_vAp`WxbSTGad#U2oi?(h zfg}0pSF~0^T_epjXyDhKLr0_U6IM4Ki10X$rYEPC zuKsZ{Iw_1d|6K2f8Hbc6qVo4vZut{m)opjyv_pb}HCM<(_e;vkc0kBW_&eN=6yV_G z=2VcEM{kN*mX2-ytO4>!n}^56Aig4%MeE5Rgc|24BZvP}d}^fEJvkXuSJXF@LnoVR z5Vb~Fd;d(=Y2(QMW@grxez;n7QMHF0j$9u@6cXF?O-*!y8LI-D6B|WeNg{Yx$oVO{&*f3JYU*m2^4^(n5Ls_#Z(HVL87D&n zqxQJ)&|>uo;!1H&?%K@@XY3#Zq+w#RHVLAz%gWFH85^J6TUA$w3?%7SUR>CNWWXN; z|H^!jZ1HYs6*YWMR!*ZU4-u>MNQP)N#Xe;cI~7|GLOdf7;+3A|(L;tVxz1F9AL2sv zo4KQtRoJ-AH(%Q$XkmRTC>-Dwjv|nPE zV_f`TPo$O;%tCeawg z0j_~}((vr;>@Cki|LmvMsrEtEfr?p-oHDh=;QL#MddZ4~bJ;M<-%Jz)1TB-)efhqH zzr({+#6(1p5c#;JZ%)FBV8En>|C0bRvS5c6B}$@r)$W#ioBrJ7BHMF&`Q6gLGo~Ji zC)ov4=u*)?3K(SR9|=8Ldr9$om?5EkM+V68u3`U-tk@)i&1Xh_UkcXthL4Abnw$B& z6%-<37tUg3h?jO{9lD)UPQ44i$>zT?$iT(o~rj~_uY zj8!|^vNOND{5-p2Thx)MG8_qgBo#^01ohu7^5$rKXdZz`3Xm~{0%Buh6+DH6?gmmc;tx<)odHQ{4wf_M!d#&S^e*E@S=|p`zl$Vgdq==!_I^{9j+CH9l*y z5}~7Ch_OtV!iX#W_a+*;GE z=LNc!m#!c%|8jjGl2_D;PKq;Dx2#{K?>?SHRPYIdRIQln{_5Hx9twgcQr}*KKA(0N z9M3FP&SUN*Apl6pZ$d&s@`IN6F`1i;6$#wyD6dyY0RYmv%tukx9!g1)!~!V1%&Gi* znz!R&Yq;N^_u-RtaEPjFYQ#Z$RTJC5&@gLrIGMea!mhQtdNL^^;hSlo&_8hfq|f$c z4&+nNf7v^OlY{F92ZuvpI%ke<9ziC=Z#?IB7)YrHwOa(7;amHdw3L;V`B6itG`p}J z%EcvE>#Q?K`XIdcLU+39j29>2alDL|o~{H(L~xaOB!VvQY;Jk)i@BN3$@P<|N`L9m zCwm$D)UdFy49*s=vN{3}W@js(&Mt9~E5FB(2f={*djw{Xb8FFvC<>Iw-Shroo0?dp zT;x5RdeJ5_bu9!CgK2%I|J}RTvL(i;0$)KP0Rbk~8=RlMe~i%JAu35l;C;`iYm?KG ztldFsj**sM>Z`f!9yIGgDX1{Tm5JCsFYn6p_6{v%S6T|~tX8(swp>goDLF#$twIM$ z3*#4|bkH@Qu9Yk-E^gMe`M?Hrfvm0ongfq1IS11Ag2g;im3Gh*@_dl{H2{44fE zPoVd=whGK%{%Y5=Z^^(-tYmlle1`` zDD}9IPKEMXp+m75EDg2mGVgtIpfX4BUsu91V`8R1MMiw5%|qh-%m9pImC^Eetm)kx z-jrwwWmbG@PQZdYPKhlEOTHZ~sK-|JMA zjz3#{u)6JOfJUYlfOkoloFoQ*7EJ^jQT%W~)YAm3aJJP4l1j80@;`e)CCLxAAHH^L zyfPnB88W6^!+S@0>*VC(22$z~JoEf%(7qrG_82mNpkYydjdpZrkpg_nSjqoPw>vmA zG$S(?!?mEKMA=Q5uDF!BDE&Q;q;$>vW$V!cd~fG}sf<4vG?oN@SZJ90%kwjiLWY1F zHn8pRa5z<85DO-%&sF`PHdR&DL3TO9@yyWmYop~}T2Eg)`e=sE>~k3zFK{t((0j9? zzl7PJ(>Jo+P$i_~-J+YBkRn+vn4PYdF3)1n<`_3%`dYf9rRJoD8PxqdHa14>^w2>G4M-&)Pri&yRddKIR~2KKJVm0KETASEL2&P5AbtL<9m912K(uyvqR``&nQ~ zP8Vbb8o)rQ59$nt_ubShpq?aV*X`SBEIWVER&fun*WkL?;;-8^K}g0{*Jeov$e;C;o)CMGBMtY zDH*P5d`^Q?pN^eSIBJJVhEhQ9dj!@SvP8(xAVjue`}kEGi-9bNp1S_* z&cOjMrWY3h}cGhlf$F6i$TTBn@*{=tF$2uP`eJ8z|Yl@P5s z2vDq?Z4`)uh}WQ5R_N=WA{h-BXb5 zF@$Q-S_c3NfOVWe03MWH7HT<@g|Ck~h@P)R(Fz8`Z#MMVwre4gkx z_9v?c?m@y@gNL7=rMIsqA7VIaJ$p0z0ko6y(6$~Wj{Vm=SNb(r6C)*~Gw-(-g8JTW zj#ZiOLbuNZ{0x?#425AOzg}N;^J|l?2Ij3sj671;QIL~&(cNOPLxn#*Ww!6TZ7{?R z{*xbIcG3kl)YlJRK_dTuwcy{jzC+@PtB)31MdTl7`bMt|S%G!4D@w->l8=_|G(VUg zu)Scy^&{h2-%fO}v(9QDylKCD`C{$;w6qp_*RE~j2ZQrm$|@*mGqPcK3vpglR(9j; z?7W*6%7ZN$a0`Jf2v0;N5^OQ!{U4f#O zGiS&8nLTrEe19_Fw4sDiYrj!lJ2Ue2pspd&1rNCHIJ5-|P~Sf^wKqbD=;`Tg{qzhN zO3|xX{SEr<6cGB)@4MC4mZ~PZKCl^V@3fHuuuG}q6H{T+*K+eMAKbHpdbz8L)G4)Y zQP=I7Sodpz0f@vF{#CHQC@Cf7apKzmD%iF$3-!C~{H+><<~W+?v4-EijsCRScE{&| z^$5*&1;aeCZ$DVJuh3=2m5}`CKF)ChDv-6j3c$^E1YfSNuJ{1}%;;+J>%Xvn_@HFM zSX&3{I}jq{X5d500v^dvD}wZ?#l>bxeEP11@8*Gkh*Dg8cC|mW;n~K9Q9W*QT3Rls zDygWb;3aaqImCW{i8hh#7bJzy8}s7P%IU+;qi)OF;YsMIWHDwz2v;`owWqTa@bvPc z=jZ3g0H!TD1;HXZs00Y;Hc~DI^MvW$T^bZ39>aD6up|{%7XDs<$mSWoY%w+80-QD1 z2?{fq?37BTlMHly!9pcZ{$E=!8)6E6Mk07#M6e@(-cg=;-LSLkZWXYF^@H`N5Ni1E z%TyM8{r0W?Xn+4aYUl5=#rQWY(Wb=s_yaz?whml-5B}qzxcs` z0C?Xo`eQL==Yu6C*xM6)oOK;mPOdQMw5Tj8fM4(tc!|Bf(<1FB1AzvDCTc7MXn_S5 z{A@teG-r8v*-fj}y8Y!ZfAPr9&KBF***ODn@95~*oS2vh%1Fxyyj5^ZrPXTfz^MHk z0XX3sM1MS^4x#f;-{V#Mjrf7l9{|Yt_84~h{?pliYb=v40@W#9hGH z*cgn)y^8?#TK!840a{>z1%DU#!yo=&i)}*O^$A|;`L&f%?FUeNf~L774H7g(5}=6> zWWWW3A5i<-37R1B!tE%i?@*2YRQTw6I__7M!_CPN=h7s5TK@w8jYd=V#h<@evk;&K z7Fb}xci{FXagH_wWw&MPu%D(lz7$1y(*!9dDY#H1+%~w*!CYEr#i1wxhc<9X+Q{Y7 zMgpKnE^Q(0dL4pE7(Eve#_-lkWe?|1iV#IMjHUxX4OL8R*aCWrE`OF&tfQ^j} zEH5wb$zA|pU~r&eY;0`OLVy-nV1WgD0h%WM@jw2>Lu9q(Vny=2_>@6pMW{R#8*3Z^ zL3;_U`9e~ocBVk^44WIS0vlU_+WpX)o-ztlDh*}SZ1L^v?Cb%6rYIZjmV!ROTOacE z@%1q3G+dencWQiOh0^vEWg9N1=Wzmii8_J0r;< zXnMCf>3(l7Dmpcr2LKw42IJ%7Z>d7R6BI?$2L0P_4FnUS6Esax20cYu2^T<;@5-%e l0H^_Ab#1lF#l^+?e*r!59D4!FVj} - - -image/svg+xml \ No newline at end of file diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_2_head-192.png b/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_2_head-192.png deleted file mode 100644 index 2699ab447391d7a1dfb0fceb9f47e30183a731f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11463 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 diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_2_head-384.png b/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_2_head-384.png deleted file mode 100644 index da964fcb2e387f81a934f2dc669462aa4a6c85ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23850 zcmXtAbzB?G(+}CEhRXXkcy=Pp4{M~wiN8W#Wn5U9UVHbCZ2002q^HYRe<;n~gvnW6hAsvBV= zmk?~bc;qpT=NmI0WJdeH6=h5JMg@72%2&nI*U-bkH{gS}Js=<;fZy5O#mDx8r#-)i zw`0MHEHwbY2vAp6Faj4Ibq9iJ=kiZqK$SH?vpowJH;8`M zet$~(Rj}*fd^U3j!2)}Qp}7Ewq}Jir5WowewtmmuztdJkg7^rVh&i-C%NAA{Doyvu z5%EFH_8f2mTQrLw8}FBwXnIXw3r7obsUu zW2eeAuuSUt*@B@ImlMkYs!*Ihd}yobB+17$_+FdGIz5S7yrwsj&1+kjg^wTi@z7tA zM@|o?#IFA1y=4*;1m^5QyK}70k2b(0xm%KTs=Ag{ukGliHiW>d1ITeB!sj?!p`EGo zx1^s;7BD$qjkvBUkXT_|0_Ng*sdzBbh2Bdjj8Q}V7vjBvkM79g%JCzwUA8XpwihTgb)|iG&A#w^8ww}HZJZ^je?MBr zDtLr%nzwnIbcCFSSLFCZcfuu#upBx zaMP26#omy3!s>3OVA2nuh_1uKHmT@vJQzwP#d0{_)(wbbiLl~57VMW=}*;ZJM zZ(8{Hsl49Wgv_PVO^YRovzB-^->}r0HCHQFUL<*9l<59F_|((&-<)bdjxBjR1gp_| z$3n%cz8iak8!3_|$(%FA2A&iuK?SJ^b~ zrdI4op{zBM!v3eZv@@*{rTR$L9f~`CL5r#%->*;t|tHt%JkXk{#MCJ1@fD0~>v zO{RM6plADraqGlxNp$(%FoeWP*Jg9fh8NV|4vh)@&7;71G?DPd>DVDfF{uB1+gxvG zN(zAbDs|`uyfriC!rRNe=BLqka%Ixi!@C6hDfCr2eD>g{iI9$!f(>e%9=3YC)OmP> z^|n>ebMJJ*@>@?&ojxfnhCra_R6kW;e;;MPN*Zy7uXB1s$l=ZVcPcbC97h4V`9ovZ zP!F_5SJ_-*R7DgGczh`iJbs}FAFI!dS;M+8S_pGQwH)hL%HsFSim%_!;pLMD6~_~w z;Ij?y+oou2Cr$z02~_hOr0JX=c@4pKxGEVN`mAHZA9?lP5Tkr$JqLQWZ$xIeW2=Wa zBoL1ge`MCwBgIvRl!~5%JO>me!*GF<^&b1!ZH3ZJzqWHOF!$CY0dH5mrvm^NWGwY! z+?Eh!ewsbMgLHLKV_dUW)Vtq{#H7y z(DshOa{0c8ieg%VR^XoItw(#2XIF%J*gt&_Hg(cZKv=KPt48P$l`i(Zc{mj-lMO$+ zD0@sqVK8^{GiX=LTTTKc6W&RQVv8>goAE1#vr~F%E8ecvc<*%by>EqMn)5e!`4S=Z z74%iQX<05v)JQjG`!6u1nF!jH5kmnxG7p!yqT>^18c~D93UNImJeXNJlA+;Tpxn_h z(TLJdQ3kIwNW_!n0F*R=0G)&8^lvgjSMr!=PwEzZ3X)5+4W0HdLcp`y{!}?>I&08c z!5+Xip+GbPs`J?P3mZLMwNurId5^eov5zvYLPW4g+X354FS^UA#_^Kwa9>UQ>+OJY z!)yk67OQjPww7Z1o)8N`G)+JNKqxD}c81`oaJ~6Vt*?P2YlLdTdX|9| zQU6`b7GguS6oBG7ah|m;HZ{2>f6rMbv)V(zC}vAYk_qe_Wl_-olELfkkh{HM9kj)6 zD28clKjSA(?49^(=&}F`w49|9ElNSKznP$&fMZ9pvZ-oTDXZ3Jw|1!b<%%A;NcnB& zePCdm_WT0(DBWS;=wnEG*2a!h%h))7lg{?p%U^m^UDC*yfk;Z8!<*vLI$4P!u>F7~ zq03haMf&1(u6>ZZkqx9I0brub(|aCweEd+cz0eI)?gh`X>oN|6VU#8tpd!`qDj9r* zzc#J)A^&BwCc?My$icnrSz2Z6p+vzF3Jl_AHsd(>DtL>Q#_vp5rCHs_)W74z( z5KUnsHzrEjcgPOz#AZGh+>0OeQ!eK=%GNd=Qv!?;M^5vQp>sa{_!_$e7>zHEc>JZ@ z;4G~qTESF*aAJB-8sYVNj(AO8?vGyqwt8m$&z+nUlXp(Vp0rH&b2Q>cz^DR#xhYEd zn?WCwV?(6LLX#(-1*Ray+rEj|{wm-2Px!l}B0`iul-gDv4{Pf`$n=TBrbR@?7dLYy z)*6L5{-Y%##oYC<2ejs4QwLBg5VX0y34QtJ7yCx*V?{@(f9`oQ`!lmX+5MY8X+R*s zy=|0sb8=USr_Zt*%{QiBbsLOA#_~5xo$Yo}tomS5Tp;A(i__xew7fj)5_|J_uQR30yId&RyAzAHC{)|8Fgz+evehy+LIidvi3@`<>dN($DcZ{{#JjlIAL%S!oi@T>;As?P5_&u*IN1}Nql7ZgQpReMong-@}Py1BtFie#HBbodw9&-Qp$ zGcnG+ZJLyu6+`a6LiG;nXl}h43N|timLZ5(R8H)G)Qki^x?>3D=R%9Qh?HcFO zS3CU*DuguN0d6B=a!ppp#rVaQAn2B-?MsC{rV;a}3r+T>G1`mPJi603NJ3FqnR5CT z<}u|W#jbl_yshFx-o}6yZD^np;^Gs98!I|u$v^$B`LEd)1%OAy}IfysGeji$52rrn1({3o`}q1UYzIGsfPx zx!dxUUpObr#zl-&3Z*7{#)sK`qdkONr(oTtV_JRk|YR&iMVNUtNKjTh`3RXln zUnb~I`JS;R5dxVbXD;PI*`z=Xg=&26@ls!e2S(FYxF znxc1-i+t6d@;eiXX4aZ^?^aO6W*x>dJ6F2CEd`_L$)a%fD1v1%40j_-_jx;o zshpu}Y+mL@ylJ)i;%or!CjN3x*b%t}Xjp8rPvQ$V-z*M0rXw`RYy4=NCUk<|?{Y54 zJQx~}f5Svh9Z|7#K`%%;CAIY(h)jz8sY42irC_`byiWsGrmw6%NU=&aOw4g8&r7mS zw-0`eW^x6b;T`g6qRE*UCY@PRAStI_Ze_*#R6#!=6aG~Z z1^`*i+azv%Jz0Xa*Jf)cIu#ze z8(M1MM!dm(9p%^{{x@Gb>|$AY&M35%J~)eod?X9J0h|T0&73p!Od0>!MH(Leghnnh zMbJ}y8)023qH81a(TtZxcqMN0`E5+Jh4thrn1#Yud)PCaCiY?ZwLM{?#y5RaOT4rO zy%uMxvO`(369Y(-BU%K*I}iQ;ViJoDT-$H+iY^0^oheT|hV`bYhHROjyOP8e!$e0? zDb~}@x408}=0bRpnN+RU&(g3rZ(~PsdKtt?yJtKuuCH!NHa2pTpWWtYMcvc^u>IABt;9q86T(D>KqC@#uISe2Y#4U#->s0IA*yKz__(a z0aYAczdO&_r;b{!oblTYRmS|;PbXZH?jdNQy{(P8q)?6C&<1SG-^=Ah`3iG|ByVgd zz~ZhG8=aYBK;k&C0Lu{G@kzE1_&05vN6;epsVnNN`Kdcr3m6^bNVs)$E+x@^QxNKZZ`7UP3;4 zGPhR|pL|r@-CZABJRlS*jLL|V0&z0b_LD7`qRKSoy-aFZ-M-tap(zd?Y#tU+8)R@LHwsDNhk*ECp5^H zf?271z%|dQ2Ya&~-Y;bpdM@;h4rD9cIUN#zBEk^WVeFgwdVUM;x)%35#U5X^Q!M#z z=knj$Qy;HpihAS@#H#J2-v;QtI6PX1Ky*?oJtTmTYS3J(P2sXpXj^)TF8%q&5o9m9 z*J=pnha7z46=h?~Nh;R&3vBYQBMy}nj{jHD225)om*ya$I#39nb+00StKSm$FZu;XKIN*~@|I=u0}n z-2)kvLU;E(4G@P3q?fEI-gP4e(C}@R0teKpuG{vGC=aEZ#psjU2hup7)Z%6a=7m+) z|75B)#&I@(X}QTN@sfom&kUV!pKa|cL_cHvODw*`k?r<^cP8?qe5B&PQ){fG zLM!6H?{&xZ&^4;(6YA>c{Vo}-%dZ~vmvPajzWnlUSk-wW)4Y$D+*6VE2*-`V%G9T` zz!C8rP)>L@4Z7GUzTbd1#J8?K&7{yM~?iobZ})RjqV9@$boblzuv-LKEF z@SCH^t%)p&Aa(e9~;VTw9 zMH?GByE5^mrp5|BL~|$$Vp8F2lq((g1X@XT^L=ily0FlWIt;EG$$atu?*NyIw2! znLWGe(@~uuHBo7?S11Jy)+s8ctShO$n3mCehUl(~s~EC8Ef@XEF8hRF7I>tG#deb} z4y@6kXguNmcUik;-QG*qU!O%)GVLoCYV*0`oU0$?ckGJDt%fn zWdbp8Va6FE2H>|dlCXQ<@lUEyu>@bGqDp8c>>K=0viKZS>Cjjs{J}+9 zu&0N}G;d53wvY0LIN$S4oDUrmk`nJ<##ZJtHb#+CwZif_lTG{+yaHPBJ)M(pWn}GN zIU?)cazfZcj9L-gNJCU`nr`=jnJ_xPuu^Nr@mMMttl|C!su%hlo-!Ub{}x>^T$L%r z8NyS}iN|UnEoL9KoHnP6ZYwQaaHDJ5H9H?j3lLl=2r}c>8J@ap70&Vz&zfb`5CrST z|6N~<*$g{>$WAEzu=_EZ9*ITFP4fg=I#)j=|DVx#c53_@3$%;!TM4#>A=K-FPFaZ} z=+RnNWPl~f<2s=2OY$3>cCl~1IuS^Wzb7j*5MV%;!$|2kZWu*pQtNXFwel|u34y4h zMpmprUms@1*Qn}_pE1AAC_TK(@QB-rhqUz%%%@Je`@ zYIbs#^ThsWn;N)i_x6Z-S|Y@DXM>ik13C(j?{T;>?Jv6W#sPytBT_kvETo1pa!s}T4DEwT-_$%I9F=Wh*xb>-+jAWHVjw_)k_b;+F%t?Yx%{2Y)DR zAC0{>(A5KJSYz*H^vo?opBejIws1HL+!J2gnuFRgQM1;MNNn+)vy7yx8*pW1rYwU1?!|9 ze4Ws^?>d{*UB#;*C&e~@_PiB0Vo%O?88MV;HvIf(dCfyJpoHvY za>U+9o@E^`xB23Uk1w6k10EOSx4ddlSw_VMK56y_1}(cC zO2`vfivT=F1ZT2OVG`Bn6QmOSg|VLv7#wo$&Z13pKQPkj-WBJpVgGxcr2)e$G|x6B z%qWbeesf;+^JvDW;4cU6#N6=WjB%a^6TcjrY#6eV-m`+qa4gLfGjwB3%Gw>KK0fdn zkq4eTwoR+u=;5PfNJf1i=#NjdmQ0OIPec}>L+!mZH!i6C2%;aAzw^w+a&PTXAlDr> zb==^->YhYq6*FXJeifE80X5JWTPlm>cY609%C-!l*i=75Ll0tQJ?>rH*~&9wHNQVT zHazT{vN+@c|M|ICr9CXn<}EE7`t;+tALrQw=lQSLTH%L|0*A^U_KdV@g0&F&+O3rG z)rHPB0-`Gjc8aw*RuAtu{Izy9!)cNKuJ;bbps%*{{Z#5lfUD4Zt$4Uq(7t0C(nDM& z!iO2I){XXHmMX;1z4f{(yuf?5{838G@l&aa_rhjmjMzX#BczHGVXgX|a2N%{L*i;P zq3xaLhAYtRiAWZa723WxLH)RM|B>_JSG(QkA9(+fKI|x)l%w7*7F3>ZpNPQ3UAn^D zrJf&I@bvZJ3a6g57X6$-v0GCcNcPo{-GYzy<| z={tQ{q$=CT5C3@uEM5-y@W}w4bqBsU(ZvQ0dLi&fXF!xnR&P}H ztVy2+|AQ0|83+OO%XGW;g5`+HYYbM2@voD_m8;+`JdbG+>8D98OmqQOW+|v8QOs#E z$gMSNYNdb4u;>l2GpiSV(y4{Af-55r(G*Ogz8_+dU3e47VRQ;fUi4 zC-gqgp}2OxIm?~q?w1coTzHKuuuvsC!3jr!_%7h5Hxl&W-BeyhWi>-_%eh8OH3thm zH4Gd-g};RZ#|9mP2VS_Au)jkZ@Vf}CJKoT+4_Gx*VqALk(eaQ+|B1;xp-Z(5_mM{k zdGVq27doR%)^Ur5PB=+cY(9x7ptEpeW9R%O=cuTODocI^`)`Lehr5!%`7qfsq3HZ0 zd`7cOVIZL%m>OVdsscg+IxJFW^{-Q&bhKv|#VNV0X(sxcL++-sCe2!~BZs2)PgnC( z1^?n>oK?;hTz!J+TErAb`s5;yBv$;k!dz!VS=A;vv_dQK8;IllN0i%H*0}wM6n1fZ z?SM#zOaJhFj5^V=Z0hyiGet{3KhiHyQZp|O^Y_$)YY9iX_(89>mWuOge!Q@FU=RX= zVYwStv8Q>6hc?w5m`TRrg~1tMOG zGb)%j@eYM9(3Ql!4c%JjS@qybU+TOVP~i(59KiJ(iZ9;um+_}kPuv;%1qP<&xDUH> zJ)jeDRYjNw5NzM?q)!|wgs}CE#RFO-O}{V%jWRj$1(%kDQkZMMFy2;$Q}mF$O9P#6 zFBdhdhxAw9pIZ`-N+cE!l6m{QooDT_8S^uV&Y6$C)lfjQ-w2|WT_L1D`1sEYh$O`L z%Q#hj_W_MQZ6%okV!|%ZlthkAdP?OyI0~FQ(U2%JAx=HuP0zGg;7_gWvpyURg-(!5;-|Wls3Bv`r zdWYsz$zkbQ6*1JPD3!QAQa@3X;>xsPdJIa3cKk`k1UEeJewmmIx7p%~5Pl)&^zn!a zLXZtzKjO<4_sqmb!N^Y)Xz})P;V3JB*Qktk|5fh@rPrn(*1C(BXgKd?TMoU)emM?D zoBoqxhW8wGc$>J{dnK^Zy-UIcvJWJ0)h1`q-(=h8P~pOxXZ9SGXeNHd(8JLfbi-b` z)Gf95qw4;e%x)FEwo5w2%|j}_K6IZ-SULZ0%^@`%zcQP6IIfQ_oG@^gO!WsolEsY^;>Rt;}JCH17- z!F2n$*CfL#XREqF6h}C-Pg0btr>hqQ8%5_dGBVFH5~_h7Kn``+QkfxN+6XLKd#Xg&MdU_gHVc*t|caB~< z={DKP_frYu>adQka<4J1U;>p-<=XPI9O0Kz;qpWLSFg54<)4MZ9+uZ34Gn~!3?_>~ zGy&_O65<|f_$un_0ojKQ82(R!hq&V9Wo%-lU-PvO_D@eoVQKQI$Zie`C4Q7a;{Rr= zX~bRox^LF-)HO=Za~-XcZX@@6#Fi~Rn@p9P-v$LuL}HM)I#O24hE{C)bCM3MKmK0d zNZ=@bZDnO6EoO_)p<6r@&~r%_a`($hRkk>cx9~QRDSLXVN?Ro3Q23V;Mzlf*jAp&h zP#5&kS`eG@yd#Z4KGh@qVfpsJr1x{iUTzJ!wBQhjA_D1~9)1hC0@PakhB6{ZdA`r! zcZVn_pgdn$y^zVj+)eA7Nj-ytZ%&47(?B`UA5Qy|$x|XE?}S;(FEunY&K7LbHaX<) za5OYVJZiqX%=16qj>_wVGby@B1!d5Ll*Pa0Bk8V~?W${;F<`xTlhfR>J6)3YyFh{? z^mx&+&ecBG z8?@VtJo3wu^PfK|;!hDys-t6oLN;dCI z6^C4?Pv(nYop#^Q7l+;N<4p5#YY0>rHJ_>`cw;=Rbghx5Ikc`KNOWZ*JAC%GiUQX9 zTiup3iOXI?1h zJMDX4oo{#FNJC4j_0VBbYl@P_@stSS{hOsN9$_mVh5A%0+=86!d6Mx8@n00Yui1@ZY=%$`|)_odENC-mAwDVpg zMLfHOrP)3|-Z?jv|LDQ1x9=UwfqwbCCr_R>8a+xMj9+s9w^Gj(-1A=sFly&lE=*1S zp6KB4aMn`oR1%y1*DvRm>P^A0*tgWYIHzI_(wdXrC?n~@8I|8=bWVR)8R+EL%RZhB z-cCBoMORd?$0#!Wou9Y8N9hb1#G)PaL^jUBXFCGnR7l}~I)##v zZ&;%in;kjmIt#Jur0$g1b60)cqIO^nIq}7ZUHrN}V1NO~1%UDSWLA&gEdSix8!56% zQWHbJ9a^29?lV)lkK=fEyMa{x+*Lu#e@DM<$X0LrDK_3;jZ&4IUfwl=y{=W9WX17+ z?5BKbP%-{_;*cej-Rw9xzk>g3KtfYlSLy&v|E<_3)ze(5FYEEprvGh~npNx{>l1_L z?``3QUU$b@OG#<>0rq}R$54B-1WV90?kANtrJAv@j$_yO-Um^zE9broG^uT3N*+7u z_P+=xe_c3jBYTG0hi4<+EGq1;#k3^L4?d07-<*%XjfN2(Ps+{K%X3Mpxd!YKLdN^< zKNHEfgbvKJoOe-xB$cjZvbH1GAbW*-p-=oGuKC>z6lKeM@;>%@gXHbrN-W9mEmj`Tbh_WcP^?*S5M#zl;^RrdMw#W{ z(%iC~^7f7gO3?MJXPqMGUU=(N-UTl9KL)uy7~(5M7qVC}Hyfp?2t**m+Kt+u=?FAH z_fMQMt8luYy^O-;WQK*o6_I~L-FhgQaLQ!>#5>&y1SwkY4?I;Qg)NDa zMh!ap%Q!IS8ht2b`6Za?F4qW%(i(%R?xo?T@b#_43&}+-Pno$t#rDClGY8xG7@)<_gX#KN#4I2s=*{zV z7tA_mszt;CfpSn#u@~5;d6B!}bglu&8k;)g{#!9$Cf@x@kE*4Gyrl|vhy;*_Nl$}G z4?kIsB|8=gWBFS=otR+jRmcXhq$W6O$GFpll~#nATQ z)?aT=&Vq(yTUU$3Z7JiLWkH_guSGTV3GJ?6iL6*sUgI^7>9;sY?>@f>T5EqJtGY+pw8WpmrfHucnq_Zm1RMnIA z0s%Z9pa`=I_qWL>?YG%3fArrpHyq%nBTjLI<*!A4?Zw*>B(XPaG;<9%dMatoGGu?U z{=Dc$sq*DY3Cd16!o1`9@6ro=IRfs0B4yo) z^hVK^0U<+2{o4?58Aq+-O)U8B-|9GA)k}t=gb3ZAr&7s@ zv_xj7hJ%>D%QiexM*`i==4vn?9H~T4)(d3aMe#L3OU5Y|n5ulstxH!3GeOGVFM@y6 zV`#T_Q08Zsa}*@H+Q`cCqUi@>WX5L)r62)=!S98RSfL^Zthyy7GIQ)K@YtKyfh$DT zpb>Ps2u}duQW0quL9@1u$8oif5*JS&x|6!(Ao{<%n2%U>r>pJX2^k}ZjQx^xu~v?{ zS1J8JRkpd$;TWn21pBFFH*{=vcVnv*u?8KsMk8;mafdeXlW#hl9;5H&)HAbkPlpJUOV^}&P8qur*6rqL`PodtLi3p8^RFnC#wncjC-VzEAt zaWy>Km*-sbE)sP==iQizE>@Mj7>k+EQ6rWA%79#VHDn%}(l778jc(27_3|R_@m%xk z%&U#S_t*z8tg;Z~FlEI3ih83h8f+S`dZx7qRpt-j^lo6pbeN_5R#gY$pTns(S@#$H zY|W|9r8diFay2Z^-`E?=pSW~wEr^DmkI{grXQKLeGI9|MgoJ$$`u|z|8)fgt8SsFYqZG-= zxaWOyGEysen*7FbzG090KCp88VjkZ(5C~hNE^gkG> zJ#xe`Sx6E5$;55^2Sfx&_hZ?d$$CpU8TV1ksK!f9&K?%N+uheD10|^oZTY<&zyQQT zYIY!MM$ymi5(tUqI=2AcWTo|Gj8KpH4y8Y2**SRhfPvIYM5lf6+TSy|-7D#-S+u^! zh{^9w_4HroOnFwre>B^jAwm#DG|4o2)El=JeA-w9ZES10Rlltly_98Qu)Cgp+91t)uKi8SPob zLqkn7^o0-LnA*7rWi zgSfgLW>&-8vB#oyvjT(7&io5MjAtxeQDkfjXGi7{( zx3?d6#ClKUWI-frWs3igG^Vwg;K<0+yIWb9`Px{lw0W2v-*B^54s>7ZIvD~bi7CwK zB}~xT{u+tI*wGya?16s&6Es736B+Qep@8G7yGlB{p(HA0QmG zOmWWiN`ZoPSw^=^4fz;>zj@ChDHj$$oTUna-)K)3}!qgbdByldoqajc>dnH+i32~g9Yhr9X$UX z8k_9keg@_b$1su=FNi#pY@j*#ol1ew&Vo2IcvXCsmLSTEX6-#=(BUr5d#rwwuxGjA zi^A z1y*^=hECY$mBcG@zzg;9)clrGYb_c%Bz4v{O+P?rDaEwFymwJPue-@3&%go(#2_`@ za5ON8Ui2pcQ}RkcA==B?BT>lV9gEGe7bWtj>xuGtH(v?%mfJgTn`yjubmDq)dX0qG zcS#Zi&;vFKF&wR1Nkx_+N4XceDE~SakJhLU!$Y-eC z-iqZEz0Q0%sr;z}%P8r=G7d2Mk@s~-ELPwJv5JFn`Z~&Sdf<<-nl=S!wwh(|AtB^< z!_ALPpO+sDM03v=vi>a8^XH2%KM8x+N`lk{52}>uPa8W`W>o~FT69aeheEEbIpm%f zWGGV?8dTTo@l}mv&!Pj)mNx4V95UQpl{vB35oE>1@Kyb1G=Si+oqpCz~Me4J!G7_dGN z`ERoFlg!s$ZWdW6wI-At-1ES$QGJUr1}&`m*QB?D^UIJ`vyt|piRUars2?y_y+2ReTP|GO~@ zxsbnM{xm2Zoq8~fma~rkFMe%H1+~_?$@qg%%4Wt(7{!a+@WGYZum5`QlWu$jEWJ~A z%QO+Sb8hdNiBa}II`?G}2qpjO4cgm(mufRq$(zs=g4Ba@c9wdf$HgoL%2rGilsKhN z42MUwC#{|O5?v*%s(-`fpYORsHqS#->(}s*;NLFD#PUmTl`cIr0|iMxB)}6$R6Nov z7oQb49r)k7e|WJ0LorZVz0>wsmTtABW=zUMJsB#$XI_>;=M4TFX%-nRC`{JI9&)R z&Ji@uR${}09TUIyS($zlX`N$OAzJ0`y=P;X)SoLNy)ab_F8Gso07k|bj`)*9!#s4N zb{uwo#x4WFyRuL;LEqNgic22}ky)y(|7Z*Mrn^E$sQ#Mb7qYpgR;!N0UFKcf`G?)RL$9f_5izGuhX(^6?b*_iIlRfgdFq6`mDqBTKA_OTA>I;oJA#q5 z$VbSbmnZ!5E8~=s%ToU+p;%MdVo}0=tsp%q&Xzc4=q&Tn4`oDA5jIMruZ$&6Y3zFV zc=mv#nz?bA^Yz(%p-hnJeXR7Pd)3Fx@x+C9U^&S5tIQSwc zoSjQ=F<*8l&8i;7tDe)qI4BiYe`wuVd~N8$PM|1RC0I!nRc!tCcM}?VEzm|B^6$S{ zKf3Q=+RqjFaQ*2)s<;a0_-_e%a>hw9fali$EE&4C(FCYy(tiuWy3>*Vqq61G9||i? zz8sbGmKT=*Q4=&uiM0`dKF<&-N;Jy(eo@TgO~+4U7?H10SQ7@6zM7}JNj$gURsdoz zQ;!QnNm5^7?N}32-UgzsjlYl{b26P_ zpq>SF@1+LXHAlU1Tv3k6a?p2s-?83+HW&+3htJ>eUt-wmyMBS zDeKZ^j=>70)@Nlzx+G383*T;Ohi9gofn|~O(w)4$C>}@+m;5y7(=xa=_N!x3Ww`}^ z;iH}Q)oeWiyK6bIZ=ce)|F-D_W{lFJ(L#dEj4NU*+iLi}2?|Hl@e@#j#bDz`N99JO zpD%$vW99|cnu46J-<6TkC&YisB)`b}ze4NQ(XJ){fly==&xM#xYw)WGK zTvvpl0sgOU{=UUD0_^%;qg&e#W&=N2f@RkV<=;o@#_DDO#X`6QIh2#kt18=? zmnVhEcrm#e4z+quuIMJ9IQ;O#G=ia6uH2xY5jEPhRD$`Gx9qC;>k7<8ZRHQB*k%x~CQNmJ7|8e%upKfHYW|nh#hC~|Y&w@;Nqv0K)+(q{)E)*sb{(2Fvqcg!@7^q=JEd)7fACx#Z80eef?hr%)iBC20XrP zbqT0R>dvc5V${bq(DUol`P@g?k5`Vpr0xti_H6f6p#;r>_$<%N4CVZ+2);) zQ4kXBKDvzK!d-F#xVX4_2JaHL{urR+;u1e0WJzQJ<}v~|A;YE@vYjSL_pz04nF#^d zU_7kd_p9}R+c{%Dt3OCTMgr{2Vp+%U!VJ@3OC7WLJvPq{r&2S%Kwyty^;|JMEwJfd zo7wie(&nmGQn?bsrX$&Yw7#t+;!hNmk}&?XUX}qSr1eFQr;k9!e3+jO$mB>lJnI{< zYIrV_&5c+Hmf(TLNXbA9E%)!^O{gpFSOh1*lOsG(^PIq!K^bnG9uf_K%wU7FwVV-ny9p zZ*<c0tm&d>s>>5ZDoXAp1`i zD^)^_iGAtS>j=17EU$E(`#dlEd-D5Xu}l2cp*7xGt`ThlV<}6v@T7K}I6lST*IL)~ zfI^ZjUB%18+}}e4c$G9BNx$!2`qV=ARL}LnDWaHGc1OWs})}> z7Hk5@|B=E-B+P~PZ}xm}_`joPIu@fSzE_+rkZ^;$CXP%Z6`wPJbNsFD0@k)8VR(;9&DGG zW+6`#{$o>EOQ3c7L<~YD_cuC~FRtub4FynQNEY(76So&?98&2BaC6-vP7PVD_`GZf z`OP_CuIpxBO4zskFQJL35H0${)yn!j>AjaGjP3U5K-1!TngUI7+2vw6Wr#;ef+`9V zCo6g(@sUXc!!^ctB}1mbP;Am11!LRz7)&Oj*a#D1>(Ersu+zo0v1Z6`fT}NuC_(w{ zvfJf}Ako~ZH|DWEh=AhPjfXLJ;xx&u-!*jtR6n|DhYAglo52`4u)%9dYf5aghVK%b z(ewr3@J-r~_;RGg@Wn7xwqGuKVLqTwf2#McY>x+>!ViGVzxzM!c>z95=}WRJK!kAI z*!J-9h`&88c{;8m5G5zc;z{B*yaOwG->o{LfGeCeq2<=-3%%AD+PcqYtYb3Fb?*L5%;x(c)6~c%vFshrpJh=X}_!YtHh(dwhzXSlE=Mft?w4Bt3R4Y$QT=vSp$5hNVa_JfYG zPu$c#D6vh@9O?`9nn!%!C2>Dc8=Z|KI-GD9(t5=>AcY#ksLEx@Tad9`*i~5h!>R>^ zg2j`-{wb#YPq^)7VVTyfUb^xbMRDGkB_YE>WPk(FgnQn{KQ1*2+mA2wh{o6xx6zs2 zpMHNXZB$iW-i`a>tE;>Jmi;S>vPR}MI2=y`svHQo7sMZF^lcRQR_j#jhfSwTr#OwL z&H3Iesfp&03FD|cHPk>-@JxrMGYsSf;Wrdzt+00gmgf{$_h{HXWp9EgFWkpzL)uaZ z;6iS2xWCb^D%{|7E_MqZcFr1PC6n^!&;fEZA`Rxguzeo^)}^G=Wl)8imVB6(-9IlI z%zDhRmOWLLU->6vS8%bcuiQyKC3VUeGfD0g&Gg26bj9-k-%r|9OKts-4;~D|$ED%c z3p}K~-TOpsSN7ers4PGYFQ`=_(q&}V9zi-R6?>9qkAet+H%8bA!i+JrUAw$`sQtG|2@klu*bPIa|rX~e04h)() z&K*KiPAYEpPk$7!%x9ny-syyjL_0m)DIi?s6Pi@N56cCas@$}~q}UFG?RCJ|r(`C{ z;Y_`>Aku~xNg%n~h-6Hn5se{{Kp^Qo@zW0P?+BgK1@D&m#d z)Ost1kK(lz@{0ie{MU#(aXX37>!#B=e%^Z-00&A~d^9ck0+Zg|27|llpJX)#vWrM$ zti0gbtAd!i4n2k>(?6;7|7I>PxDd}hR4SSk0XX@aFB)*1@*DE^OFby!4 z{n0k^Tiucfobwbt=r?5#!;6sG9#ZsScIggH0Dv~_fByyO{2_wbF(q_s$$`0k7!$6; z#XUc%unEx^bTB|xQ24x=?@I*^Z#|6tKi|dRo_26ujL5u9$M2@qf?u>)L3pqO@#wG+ zo3bTPJPm>3oEJYW0>Kp^PXJhbcN`xt)?bGb^Y?KvghINtHDnX zvizM}zn&;~gxF^yh+ODF*$uTQTU7_CAoGWj9?{VA;tBMbq;lpW6jjVJW9xy*UcfxjKl&)W_U*R|x9{Ffnv2V?KOQJp+a-Ii>+^W#b;#cGW?umrmSl9C z+LwouD9-a);>GR0QuGv7A~L3^BoL3FFglE~NDvaUK13!mLGiK~s8}-x-m27_Y78G7 zS=eGAv&k{p5cU<~#LPuFKI<|x)h-k*^f7)H;rzNdrPFniemt(X^#}%g z^KV6L&y0oe&Aky7)r%2M@#7NCP!S%$?A{jC_qJem-xHNu0|*KmDw0m} ziT6d(`K!YiK4k1ex1+ok2j(uvhnFr#bM<`i)P39ZLs=eKE_G*o!h~l7WB3q&eaUdkcy_G zWaa0eR4vHqI@5=Gu(Ar(owxpTuHTFG| zWYwxo)2JN(2S(`Uki&Gj$Z#JzPVSlP+bu;dn}zb*{tCn!F!Z_-(=oUEBrb0|jH^$- zi>e{>yqV;ep;QDAJv*55wW8ht-f3vW-bIaQuAXmzb*YJ*cpGP*{cF?P$(54IdX(2J zw6e)x?!0m7gPD%|PfGMRthslMm+4Q%L2{lHuB$P$9Nv-ZWlV?2UR2!uEl7n)D#Z+@ zzV{5SJ-r{xoA;qIWZYyHAhCLHu6eq)%6ja)VjcD_YD7%2aK04hXny=NQ2WnX*XAUc zUUxYPN++5rXbuGU$2Wez^)E9yH``7Jx#{M6{vN=8=^%zo1*4LT!JgB$ud6P&Y(0GS zS6R|lFi?Vn)eG@*LnA(%xfrS>qiVPt9^IOXxMb*5#=G;c$J1-Rh;2815@%-2%{(Dz z6ofzz^&)b1(ur$JD6d`sDp@{^yRv@vqP;E6htu|dGWPV1jg7K|;-AE+^k8nbji;?? zH)1)?QZt*1d;T}%lJTp#ScSqgTyf?DTz~Q%T+w<6#G;2}u&^9|Sh@~xEm?!X0`ZF% zN6x&Dv%mZ^(Pm7Dq3i(V?8 zAyn`Hpi&uo>aWC}`YTZx>cdUPcHyR`H&GllXR=RkNfmZnc_-eyd@a-@Gu}kut62o9 z_`y_bN}sdE=NCF1dPaywO`pLpZ~bF5*DM61_L>q!sD#Lw z_o3RfNT;a07QO6(prfByC3%3tk9pzcb9oA-$}BPm|7f(HOE z;rbT=d}E>$Qa;94t=d>EQT{3?#w6_~f)ik<*S_1^6ZQrUyx2fr0<#&{@2Wz9m6T#J!%XF<`` zOTO2A=upxdAf>05B=&8c5Yw|a9*;jUBguvte4_XuSv>rb3q1wp_{BB%VcX^Fu=?oh zSaalc6eg+uYpE%7z3IMMsdvQY1 zuexR9m5eh}5_jVu6dsQsajQyGvp|_X*A7qatQqna;JM51!1hIJaO3eear@y{Q4#7# zU-5LjbnSh3>#{ZAH2*#q01!&ypS2Xj$NnJNlnd|$#E)*AgYwnLR`eYFFF>qw0kW^q zo}#a`XMa9ZVzLJ>H#Fk+3szx{9z##fT(CTRh+RyeZkg>w?r15wRE^Rdm&-8hsO)vzVN@$-x#}R@D0DrxGMpH%+JY07H1gM+nwWN0d zm-!|RVrjXR;w`kYxeOstDlQRigmIAkS$QTMp7L3ci>8S-;~bLWg*?G}{eq~O=!K-B zr-ZCA&z9sUHXOE-OKS|DTq6|cXdVC%s9P%9gmc)cKc8U2p_^o)C*Zu%JX@0Ev7x6| zrq2~^f=degHY%9%71}4X2LQ$5J|FIcm!pdD|$N zS75JQh;^n-n1mlEdPOJo=9)7xcI($WPxQ`;@8zOOC?(=+C?r|2Riw%}1J|?(`^!nf zdtI2j_4w`c#Zhm8@JTjC!^NzFYAW7pOBbt1iZ4)Zt4c)?R*s;jO_I=^?E=yfK? zMXfLH@!F@WmyIPDPz06sf-`U3M;Q_2+17&vDH0Aft8N_NgT(a#J==RuI@6>mYh zT|q2EE_0sfo#*EPPt`mSfzy8_$peqiKF(@v(w=~2Ci;*hFVQ&{vV0XG6pGi>34Iyk zG*4e0?ZX3ye~q%JeHSa43{>{PQz0z(3}2zWvi4j*KRiz;Pb&IxRd+*#&IJ<507w0{}P@|%2@Cl?+&ndk?VMCYGz z4$gJU=Lah`=pRWos_C8#9$m%eL$6@-ftR67P?%NI--d5&{d>H*;0FBShEJfUsM2C9 zjYAQXf01MlJU;uBkMnV>C1>F2SFHHR%sA9@yD>7IL6WT%y~k&HG2l2P8?5>|S+3|f zhA-`T8nuI6Y0o8`W95;ZxTfiCY+tq>TbJL5h{ql|m28j%Rm1r#*aIO`IAdTJWoik@ zpij?ed=dEhfgN4fAW4d)V?DCR4I#Vjc1Nh?JXRz|j`&qx&qy4}3 z&OJD;>b~RObMAXryRshE%d#zF`5_}-#xHCG0()q9m5>aCq+~*xLc;_yWhT>f3hgA# zA89+&W`=1e9nv-vk}^{$Fi_H=l8I2*Pa(~L;KtKuMJzW(H_+ z5NRwrNiz{W@fMb{u|q_VB*1+(@eMPA_|SP@ubB!{XOBOxNP#;JzlU#q{3@(G=iyZh z_Tj;|evX^>zlo>YzKxECmIB?Sw90eY} ztiXt#AmmhubXqMkiGJO>EmZ*0{!fGu{)*m=7G}I^j>!06QLdW_O$yw8_+5PCz#E7Z zsd=a>U2NU|CN>><58JM~6|bzm69b`O1U#MoQ@&o0F%B~zNjXx=sdb`GPR0FVrPtI| znJmSmiSM7E%eeww4;8IDt{Cw5k7z2^pE`ht_P&S)4`h~hCloL*uNQLnf%*=VU|^Z2PB(ux|o|JK85HdTQybVL@E7U?KLY}G|@Zf zxdJM?)~IVtUr0s z(;!`;(1e3qK6)KD?|%y)F5ieZuD%VQ`dH(Be(&?+CfKTG*mKc`0+PKbg_yo{lCjL9 zXJ9Q;ok2;{BD^!%@7e-*Ea*qJPh`W54TW#Pj-L%?JmkbF-Mit_5KV(E~IoazF9yBn6n_ zk1t~sS@iMaI}vKR1zPnI&#u9Vu;Ju>+}*Jqt-VJ*yN=&1?Kz5vxBV0DfA?wpwsi~M zy5bh}mZ!}V$r%y5fbJKbfJ_XJ9ScS0V|WJX$N3PHtvaHa<|oi3(K7&OYilbTwv7Qy zvl-910!=rjdPzY!(f$tH6w}Rblt>LKZ+imVEbIfwauc|zb1%N!z8wn({NHZ!8)6KH z>R003mK(5h`9=)pnTHYYZpZ2W{t4U(0*f z>dUpJf@vlqtM7ri>;|wbd{j<^=Kd2{ck%$X9^Zr7!E+wo4S7-6%B}1EkgH^ou1umC|ZNsrfWPq ze>NoI!_&Vg3H6n8>&R=bjhO{105D9>xzB_Yu5Y5(tze|%k`u?ku3uwt--|GtH^XRX zO^&dhP?%%62`m^mgT)uRvAVkh*PiY`c_LVeK0zZI8^GG5yRr7@?rC2eo5I2jMd!n{ zXDo!AD4Q3ImgrNY-KK+;Uvz2#bd4TJs+U;HOotmv@-K>C$Y3603W)ME{bXVg!v|l- z@WI!?xB?!k0yjeVl@dmEYyj1MoFf5X}PI-of z#tP2^SJeDh`YBSsLy`G`$igE~)&)i?AHQwK+uGVp09oxz&18SDP#6VjXyH}m-n{gK ze@l3P35HObc=PBsT0Wvz^$;{Ib6tM8A}FT4%sLf8N{pNR#fM#E1%Rwl?T9kg?-m@R zKt&yz5%#3tU&WjpArV|^)2#NRX19}vMHq_AhoYt5j^<^;#AZU~6qg#` zL5E9XIf>q{#s!8Ioiz1^DcOGk4Bm9wT@awbg_i<#6WpoQBReRV8<_?bz=jKF^Ai1N^grE7AE{cH z^LY!2bo0_$JyPmw`0fw4y|U|rZQoqHAX>#ZyPkob)QK+6dCmk zM9~}Jioi5!&C{wjHgCRt%v>H*z;n+%Cjh($;JuyA&3|OaG@sboX!=Bez6s&O-QRQuU?eW3(zdJ;j4~{N|tm-Sc zszIO7&Rfw8$b^e|wavbjkWYu4c^Pd+C?zW|D+iYW5_|Ul1i()K;P0+o`~5D}`pdq! zTl2XUVXlWCk~K0yNF7O)RI?r>J!0PH=%Yy~01hl+9IKg%72t>lFOx%ot8b<$} zR|UZj_wIQTz>@&*?9$7dFIHOr(#fq&9~)7#ufU_BR6PV$x1bs6gD%rC`rT?){s}sN zt(d4U?av1aPK4Is0qlxYLe(r-Ws}oprF7xi2?#d<;l$G>Yn4?rARMjnQM7SE z!Bj@$1)3g)ZYCQbszw-(o;!_OhrX!LTUZi&Ah~MrJa$Dg50&Ixg>I?*6u$>89`lwVGS&8Oy0)5^Kb^5GfnG|w6exh2lPycPXKp4z+P zEP%&Ge(r68W*vjzcF2dyeEz6nJ8E;m!MO_|f}2b^`bs01&{Q zzHZ%@`*rit)6iCTz>M}OdisX|=TP;~*uVWS#jYAEb;Fr0s3g%88^Ylt4?ryx1OJaWR-u4yMDI>^nFth3mLe!dw2mt_iPJ)=&S!fI}o< z=a^-f36T)<_U?V_Lh<|mq~RO?v;BDh&jY|c_uQkb{=EMVLzjQrCzQ3Hkx_Y8(R{Jr zRFYU8D>b&9O*GGu?@Nlpr?+bw8UO@S^r?)b2fsA(0|5Bh+KpEmVdZ-lrLv_{>I)8Q zmhOcgw8(yT4=l|W)njsb=0T!CYB2E+y*iI5-jHEKZyvk{}Nj8_ts3cC%9S6Zv*$XB?fK zzX0%y(PMvp!`7BcQ$9Q>_|{&jF6tsZJe1|A?aNA{pLM82sB|5i)x0eN^AfKrR|%Lq zqEE-)zw=f*fbXXs`?q!Lu8W8C?+i%whI3L~a0;4rQqOD=ESn>y;-yBN9iP>r7x~rB zXM{$!?dGiL)A60%yFUc*Vd}A;-_q8~6y;9_9J;y3Rhzm<5BDe<*GQr-nHFL%#qhp z!d)URBxAT4hmoePevLVO05XHkz#5^Atr;u`G=?^P_5WxEz8X8%( zakUH^*K&omK*%O(i+UMzD=_F-WQ(~`O6C#YTDcB`S>|OF6Oxp3pTF!b#J*JW=>rG@ zB)Yr1(2XttFQ zY%yc9K}ytdA?FK+D&U9+B}5r)VaT|v!4`pb4J*73h!qeiJ&xL^K#bLwL|+07AoTY3 zptrXN!22_K&!^4JMwKyKi|Toc6_qa*U=0dGy>w|lBdR1R%Sliat}G*0hTuq(Y-zxD zRcQ+jL7qM|DrV8P9r-jn0sy!~N%SRhW7&}-2>@L{cNc(nvwi=G#zsrG?Wo=qu49^6 zLkx8=wJI=*KvES5Q7}ZAL_|s%VuUj3N{b89$(1Gv(jlZu3851Mr?{&!0OUvxNvy(| zJ)-w(CL{n5qlQ46XeCPI%9HEYM_G)jND6*gmAdGhs)eIm&eK#Ly68|8E`>FnnXZd) z9Nf}XZUR8ekx`~H3yd)V@Pt5A0Vx15L|kKnbO3M_t~!LYY1y1H#`rW19*7W&ODpb( za0fTW7GL7YokmW{kN_jN|Y#3qC|-jbBX^4G3zY>6LoV`00000NkvXXu0mjf9@L{5 diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_2_head-512.png b/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_2_head-512.png deleted file mode 100644 index 6337f5effb4ae653bf2daa4af71df885205dbd72..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32300 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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_3_head-192.png b/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_3_head-192.png deleted file mode 100644 index 35b91257fcce7a1664efa2979af2fa4ee4afb97a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13573 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 LNkvXXu0mjfv2Czq diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_3_head-256.png b/jhipster-5/bookstore-monolith/src/main/webapp/content/images/jhipster_family_member_3_head-256.png deleted file mode 100644 index 098fd8fb05ae1f40a2ad8cef4547c2cae2adda83..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19239 zcmV*pKt{ibP)`1aL%Tg?hqDfhW7Da*(MN$$QSOkJ3DhVvw z_UUuWIr(E2Wq10_otXuJ_j&M;d&@cB&VF;scfKMxPeqPyTR2bo)-@W|3iL`eD}hxS zA_4{g0rUe!Ag5s*$O#zNnu8L3P$S;dLLbnkcyZbNhsS#O>zs9nUJEc=IC970s5XuF zBlJ7bTnAhnY!CXNM!W#x1u6K!xRLzPhWmFp!S?a?;ha`XeIN43D~o?hDC6ff`fec6 zwax`ut$6|=9+SfV_TmSQyweK@jLP5e?xFtuVtCyRRs47p}u-vN#BNw zdEggThQn#KT4}FeYcU`N18AWX+L1zdS}O(eH-Kw;Eo(KD)<027|GncD{%Y;RW2s)t z(+kdO#nd-r4h<~10_0Cg^fe0B30MipsxJw4qG!!0Sre@_j^~XO3eGdW@*bC3KfK}b z%&uO`)eX)%#nks9hhAKAixl$Yx-i*f3$KH?s3XF45XW`N7YZm}9aLIBqzv(wmp+z$ zqt|kEinB&B5B$Q)u$}V%73g0>v#RBWENcSS?GI42uHrZj`9cw2DXrnVX!WO?cVr*! zwOm0n>lIVqhdlDqvR@GBKhUtK-S&hXMmvQdMC%<|Q*cTnsMZ<~k80olcblKczS3*a zf?`%H=CQk%ZS>H8BjAdl+7zaV_Pn5)>nTbp@`VCL#|7|&=1&Ug^zUwc9=F%Bwactj zObz15Jxf1>=Dz{qKpPhVv<|e%UgLNk*<2p26u@)7HDNJ8MMZeLceRn_RRJ!b=@{SSIonAFZ(Nj{#38!I1>%Hu8Zq> zxUL66V;Ba8G?0eGloBZor0n^}R~OIoNM&+>9z)10H*KHX*K3&?p{Jkhk-L|ESi_fl zDZ^g2*(Kj9X(b`nEF

+u_yv@`A>EvKGth_YSGo< zV(8ArcOd0M^xz9|p3@YI4w-!ZNJ6JquiC+^bhYZ5f*jhmbO};^v73FKr!t|CO~|$v zXGQ#9^;(u{bVW(@eMsr?C16fB`fCNPHNH}KzK`p9IIc_4aVSjvD;6Cb*TwTZeBVcv zJbBJqVv#V0H2%Zaw)M_3Qwy^jog966$-f1DsvCW^hDK?PR;43FrB5C;YLwD=%18TC zr#)vN0BIN)QwDd-G%!sAaTaW-gb+kxk)<0()a{V|=U&S*la7CaN470qu06R6haltiDj5rmWgFqy+2;7LB3erz2-Z^>w7K7OgjFV4c)!u8zA1_ z>3({J(hAQjou#{;i|SQ0Y4PPld*Tr$YlTN#*2-y~qa2PqujyRRlZ!EoRXq~u^S+j8N*jHF@!$_;XuM3#p zsXk^SQV2}bBxKu!><~f-l=9IUd|y#?9Hf+`W5QX25MplnL~``ccBh`{wJay;*oZlF z*V2z8_(G@JKihCzmwdi}KeZ+e*%r}gbT+L&Gbpuw$v2K1>a`%yA#>4lpWI?0_?=F) zeYRp-7Rh9SSTuqZlA`01PG_dVZ)XK@E#)8fT8NW$L@^hgIQ|h}MJL)mn-M_Bw&_d8 z3EMWF?~}@8XN__S`0$~-mR{LwIiLfIskdPW!G8$4-M14$2%^yl@mLh46q#(U%tqQH zgcSS_JqsMj16RzW-qJfYtPZ-}wZ z5Mp+jX`p0`PbOlxo`>i8y%q-mp~Y|ZT82RXQb+GyzCpuHLADtra`6%{yK)NK6ha6R z@i>m-%$6yA%i(*L+|o+{0#!_<)Xy^u)+g1lF1i?N?S;J-qas2;BoZz=IqDTsi(l<& z|3NiWS}^Mm2Gw5Bh*%tR$ujKqn-R0@4cakUbk{g8O<3`7?pF6)+-}z+8JeiLkxtGDIZO zLy67~gwj28z6nGz^)?Iy+k$AT6NI*2F@5^BEkf7cFsp{AS&87%W4A4c^`h%Q6m!U5 zawD)Xh_-^pT(Jsse{OJ z?JKUr7@Sx2zA=9x=el+pQug(t-#`>oA+8UiogfiX629@4nrlg6n1p`nRz$3dbG-(8 zOJG^H&q@^jiC*;Ewqoj%m1AoV!UTqZ(DgTAELu|cQ5lI6dB?2?J5+YhA31?_(Zz(e zTtU5&Q^XS(3l<{ciCJroYJv0;bEqdtxY|AjIezzod1!jFK(0pU@+&Y`HGW(#2j&vF z?LFilc^K^!Pv1}q|Hu)njh7($2Pi)M19U!Lu?=Hz9^sp&;_b9X74qm*3NDpS|Db_20?(m^(yT3n_6x{&K)H3-a9Bf_Q)xP@ejWRTnh+9C`{<;>#){u z#M$)|yaRi|Emba2sY(3d;~4W6)b69NAKBLrQ%9pZpT|Esgm>sI{Gr2WclKlmEIQ7n zsgz?~A9>miJo$I)lbZ$N13?JWG6F(ZUW2`^{SzG#3S+KbgBl)2XEWfs7>kx5T8=j#=e zQu{vsk;C{$kD$gzQK?CEA%AN1CM+9anTTi%5sM=e3FO>CjJfkLS6+azVkO=iuj9P% z+;q!92N7DM!IqBrdEigG(&@>*+il>;-OI1ns2>C&Of%S*T#kL|<)t572Y3HIyaW63 zPaJP)Z6>6|ShfOt^QFi+a|4r8=kvI`Uc%kG2VHDUp=7cTWBE#~3ok;L7R4VuiTBo< zfyr2nsSy(`^v=!OGnaR~!!u}GF%R9lbgfi$wQixYWEqin+y+|X?0yyZr5767&5BS6 zEW7mo%17mL6&?cXqV?EYuc|%8Hh{b5b&Aja7%IqirYv|K6pLjhs7k_FYt~|Ky#jad zKAh)%OeZ(Y6R8wRmD-o+jT;`%?CMx&GiZA%FXX~+MZ*O}mr@#vNQCfpH=>oI`1qrE zLzUz6MLdqVY&mjZF0y|Bqrd;OB21xu4>dZ1cjyrQ{=KMN7Bsl8y^5L`Cw%LBT0X^b zUVH)Pr58?LFior#t1yTVINaWx=mPkeJI>U@lux8i9%h zM6|_|Rw0Pq`O~G+ec{%tTFYn*dC@woi`Jnt8N7r0@QxkBA3laorNDJCSFgbu9l_oG zla~9b+W+*~V#TXB$1Y(<_Qh(?2T34`DG)DdbjK63+M6yt_5YDu-`%l(gkeCdN_n!4 zfIZ|zJdU;Tl8VQz_7zv+9e%T9ln;=ZX%l_qyMV4JW{+~tT+0<@3HP2io_k1l2clClMaz!+GH(Z3iGih<{#vZE!ryylJZ z<^`*9UkldMXc`jtj4?+Dt_8jmXeX8W4WbckimN@(qhpGhOtx(7HW#cRwCS2h0>#(Ak1l2#Zq}GLADQe6^i16} zj8bXrDTLBpIROgBT%`17w}T0xWTL_!uO31W-f%1S>T7B~V=lUw*!{vv$j&6fiNs0Teo2@XxvMwC4?Zd<=)y#dFJEc1kvk0 zf=o1SqX`&qW^v{M|1-uei2Nh^rF<-iEK@2w+fvFldzQXKb#xfc0#~7IYhkf(t0q*+M zcQZ0ET)OZwJn+~*^11)`C2qZH`U#S?bYn*p)0n>+VNbU+KK0TQeB^gOh~pMd{e1tU z|G+>0|KDTnvgsqMxnyJGin(k>po(c31}>)+Q=>a>yK7&AoYcUyA3G8T(74}#F=u(% zwLOR4;O<+t5jw-8$MZdY`!9a2>{%I`Q!?EIj5((~G~@8`L)>-qPfxp+$))+vpD%af zF)RFD)sXWS1RC2uvnG*7)DPHileVQ7n9~-*PA8)L&X`8(A;RVB@^@bOE`IkDf56Ay z|H*0BkB%H+X!vm1^D-RV8ts%^p>nxCc-x2h)6f1nH(owHdGGVPpRMqItl@ACVHk)2 zott$rb1f%>Pno-Ot=G3W@0WRNj8fk3`R`Kv;AfEGxKN=gov9sC>C` z`A4rj#a}(}=WKuWd(*DJ|E7D0%#8C<3Z0*>C_$ie6J^&PeEfd??pt4A=j+c;yZ*sj zf3ECVRpI?wH0_UCuRX&+P5EY?6>H3}^vlllT-Ob>(7ehver)IuA1E8~uH1MH7c5zW zaYnrNZCAgS|NKjTT=u>#SU~ie(Ec7jDZx`?Zdp0L5q800yH&9_3*NV*czeHt58tzMt zjgtH3gYAerjZ7|wbH-ZV)5gGMJ0_YN#+#t+5p%=+IKbG<>xH7z)S9Rkx=^SX&{d7% z>pRd+d7#`&Zd9^3Q#}710{TA3IFpmG97u z`O6zQK;hNz)qijXqQM<}!|0hm%8pLwK`Ca%Q-DH?anzMi>E<>h-pE0+PyQ_`SKrgd z8{SX$iN8h{D}?g~jC1gL^3Q%9?bb_2sBzwWf!q(jQgM{6N6^W+W)@=Ay0aUgfVR$h zJBUxsyz2WtuImM|L)YWuu&lX)zW&4!GLQW)>{VN_mTto6U&N_pwes1p#3Q}}tHY++L<6a!IAZ)}w2(^LV@f`$%L#j)SMgidENY~S z;SXmq?*2Ul6&t9vo@T#1jW|0L6JXQh>CXdCR=Sr9VAS-EA8oshw>_SR`;(UgYpz(m zRQ1`Tn4**b@E3tHTZrd*ZHHc{W9JpK9?q_pt5()%7ENjMT7_sJom3%kkKRijPrt6w ze^lvSzD>KPKRVLX3DCKQnw-FW<)y&dE948P>YK5))1=p;Bd+F~Zp!?DhV3)2yN*|8 zsBH?R@K5xlP}i(S`yPewZx1Xbq3`+RYdd{+G)$o*jf?wGN_ZaurXBEVG+vuwzTWxi zydutzo<@xaW4qK^lgZ^~n6Ao>IM2Qj6X4SA`5`UDM_{_Qrq{&zbtTmK4Nw`*OE2Q? z4JN6x2GZFa{)}Dy%sfV%t%?b-d3)+%4S#axwRT6$^Xts%cnA06y!2dP?d5X$il)7p zncwJe0@sd*Gmh%?Zv&^Y!Flc4*OUtMxb194jg3-x>WRQqB$vxmtgx<}8Co%QwPU`R z&;`Z3We1)#%%5dyy;(B+w)aV@@$-gutrdkQpC}a;XtymOo6l3Ive_{W1Ak`W0-?`t z#RS;!==fVwb2n2-a8#S$aCLsf#NE9skT0kPGT9u(V)f;bWm%{h-bF%-j+#fhmYHC~ zj`WjS^Jyse?Q52x49I6I+V}B((taWgr4{LPrs7%nnV5!Awi!a`%H=`=qN^!0Ht$G( zQNW+I>szhc+}WS)sKale^6fb_E2T(fvUqjuo}~f-6$TP5-ad*6@akat*M*SnZL2$# zRqiaoJKUa5_`c6%I#V`1SHd!_%F3(Nt8EEUhpsE;6|t3;5Uu(Ao}}TLj&D=^;ntUT zS}W4oY{Sbb+cNPgD6lXH&QqiUU02L#S}mr{uwgl8PW^}8#^@&FpUxzc&7Ug6R}Ucs zre)%n?fi8vKapuJ(7j2zu9&`RzfhI2s4GR-W+mG9TlTedT(_xc0@E~5N|kSXkWX)Y zp5U`WoY_Ms8?S`YdQCg;%f5b$c@^@hpChyrmYdJli_Dx($g=P%datV|S{9-~f=e*e zC_=ZD!`s@px#6s5bW&Kxr^g#2z(owq>u6_eJJ%PR!tiU6}L3xWI4GYHGX zxcWlG(kf2bc?WfP1a)W>weJ{u?@{z*1Lhh-BIYEJE9N0q%tNl6hg>!Y;r6O~$atb@ z<9aOvdL?YTv_Ey-vK{&1_1jbBc@hJrtBR>X9D&wq%V|wIlfilP5eDD=-oQpp>u0XV z`}Xq`|I7VgnaIH;^hLq-(FGUA(&$`^4$i(p4^QF`Pr`FkNwuWJ{*~L27qy;YMGg!! zshGO15q%~h+rn{O%59kXpSn?jx2uXdboY|A0{UBdH(zw{eV^PLuQ8EG(0_e-KJ%6k z0`q-ak!u&>{{8n+N5Jq{K8$a+&h9 zJW3dU*F;k-)9uaA)vdhb`~I{L;MDWal72C`S~dXkq9xe(eGv2BYY@@k3mnLGOR@js zPh(uwT-Az-Z7o>X)bmc0u7=@o2;cWBxxYPk$@a+?nrf^?x;kPC%~j1>Fg1|P<(WBq zj6bm*AqDZx!PP?&rh$3uC73s^$A4xI-uHK*54Y|pAq?(&f#MxU$(d3WY+IBQY4;@fZk*Zwk0rSIEM+ zVLiqT>(M7B@n1fO-g6XncoaQaBPUSAMlKvcESrn5ZYlEOB`xjv8^JTohF!>K<{hd< zC~Tw9IOUtAqjAz-X}F;_2{>0>b#`srVE22IDWI9Z)XU?Ose@YU_g8;JFy|e&65qI~ zT@f22@1WCpC^+bx1Gb5Xg&-P2B)V}_su_LkQJmLbCDBmUV9oeMs-ZQe5YV4Yk}np^ z!ghrapWV1U_1{|(xdpm5V)l6x>p(Q4l)l#bqlL-Tu23@Z55T>ZAJdF&e*{%5klb=b z5Te#5Vk06Yb5Ga4)l+D#7=QE;vajv}A<(+Mal%)+;f;@N+i0yRmdBDG_07oVA^6<% z)#%#hMbI&lg{ZYDLX6q{2bs7HWhsf=l?l<9h^%b+xPaL~%1eV)fB3-#|9s&1nO8n=KmMl2(;oxzziYjjdF3TW{^dJp_4e@DRD}X3 z9=xBzTW^-#b6l_Ph}fumTPPGFTOl$)Nd4Il+)vj(%&sY>7EM&s67r#nmqBlQJoOpS ze_reL-0QC~^389c0|?aWC4M%`i3h$$@o42(daX5X08Z1kRXXJ<-@S{kZG0>fd|}N7 z=;9iahFyZRR%OKo&S*z(d_40jLi1m1wUIw~fa4E*4OMK;qh_|?rBWRK`d4vAYA399 z>Z~(G16wph%1X(z@`jMVUiak=(YrFaH88YQGo!x%y>UnSKM1Wq12gNgoyIwKloR*= zBYqPFtY!o5*eECN|0-SsWpwH$kf@`VLWqh*9E8w+xPJRY`TC(tbWt%y!$&Bd_8J;p zH}1&%h1T2)R6PQ5Mn^dQz}N65I~oQZ7{wz)9RJ!^@fu9-@B4mDkMw%}n_5>iC+&}^ z%%7BB?jGITl{Z}3$q=k<^x4fj(hq5&-%W)gSSRtu$2s=Z|4Z>m>s27SL2mCJh97*O z>E%bQd{BmL-rA~#{>@c8%5$7{lkTlC1r0BvHTr$cw7q$I<_Uzn54yx(kST{cQW$rZ=xD70nMcLbS|bsa2w_)n{LcJ(6kT%(>293jp9Gk;L(8);@!Kp zZD`7ycGLFBeO57a74Yq9&uGtM^x^LW?wQmMS}VqPJjVFa+QVsAP zqJ59lvrm(L>BY9%sTUt!AyZprd4%4%aeKO=sjk~}byseig+CI|Sb|F_Kh#PeB}07X zSA^h`RLBK?x_u94bPw9=%~DD`Io#1V5VUV=^_8k=XqOGHGldras~g_wjnGxaoPYmt z2Ke_4KK{PvKDnjk#0VR=r#~-!|61TcrTan(v{%3x*@G%nEKk%SG+yRJ=}X}|r;5|J zOO0IVjZWnSPaFRfh%f=rbvx$b2M>P*&HruS(Zs^xV_VzlYr_+{ou=dp4gXSh^JMg* z_HoDG#2woYerFTHDld;SvIjqXgi`}kP^GhL40KX7^k@EdC+m+lOHT~!13DX(d_uXT^5M>pM+zFi3YJ8*j56k@uYttzG{j=YYSJy9wO6Chf7 zc&Q=W;WyCkjOa=ojPqPAkwpVjxkd+9?jitsqL{1i-#@9e_@JP6HU}YeAhEjQKGeqT znLiLxT#KOOq9ekXi8HG40w^Cpbp+?ctN5AY=r%`C?G^D-L#6hz!&F?p&B$%uq-p0A zwe0APsJ=w@?3AYxJv)+I_R!&HH2hi3hjg&jw>CbOde$n2wg~u~3`a2H3$O>*BCP42 z=URDq>7zI&Ud0{VgO@&vDomi=d`VfAH~pXXOY229i=Q9EOC7--ehp`McS#{@3}-V( zvyk0d%z3R7o<>#+y2a?#PSJ~m2d4-Z!hcu@7d{5eukuLX8CoxXY9tMOYW$P)-T|x@ zRup^iLj3G7e&z&PP2Y?tCksxtV}4(9M#*f$keH^?ToDB!YVN!nbA3~*8}G35^wf!C z?!$Xi)EG5|){O^GH;Ify&(H{g5u1-ae|>3smmRGXG7Vvu8y><vIMHI^|#nwZJO zgchvFOfCVVy<9`J5Y}`B)LJ8eSTx%3M#!!+!ZzqkES;j$mU%8ndajtyAK6l6Xb^wW zsZ$8kWqCsn3IiiHkI?*en0+e{R`3O9D=8+FrsqT~TGs|?nP$x+$3mgla6V0?MNRzK!y^u8ev`>8YcI~!D-jj495~FCGmKSa41w}5;6^0wj0+P zviSn(Y_=(-v`iBWaqrHX`&TygOLT~ykC;k`6=M2~y?xO`hac{6w`E_3W)VUlA_K_C z0B9e-Fp0`fpo(c4U4ax1mnZr6+^NiLTAxxx0YoEV!XcY{u~-VR)ul?t6R9+zsm+p7 znnJPAaE|qpn5Kzg8n~VpvhaQt_%}^8&;fd`m;yb0ktNk1b)nl}rz~M$MCM>b=74hX z^OLCJB&wL9mXhiU?rIuMu~4Asx+G#Tq?AZ0@jMU1G>JtbMC=f`ViCu2&{~&bc3Mo~ zDS%icd@86-3lUI$$M)#CVruk>laYJ^_AP$k$fKR?Fa1yV%~!Nvpr9(!!iWuG#0Ek6 zsA3vbOre}qS>Y@*5v{0CMb{%5jxd={6OBX&**1o0lFj9j0wSRh@n{6sw#eo4O(o5m zNjMzBFbp^yZP{Fo!w%7N#S}^pF||(8@S{%mr=+;7Yc7Yi*nK^ zCrfC_e6p_{EEC7~eKeYAI7~K|$Mt+-k&-exj>BXoi)C4aLpFW!IJrWxVx(g|Ov4}& znwd^Yv^e$#OV1Tk+43pr;RA+7G#s$jDgu3DuRLL;6#*+!8cosIbBpBn9wUG7t+Hox zxjg;J1X>7kxjc^J61FWO;ShaEn?j*TDxJYJ3~bvX77ddxIH(3qLsAOjvFIu9k5grz zJ6u(_QF^{BUv~fDF#*q)ep2lfNNfNN@9cCRwfNzllbLS>!VJ@Q{Vf$8FqGD0vN^)G zO)?%w2q-uX6R9-0Tpr6b=uajvO@my%KsML-rbkLaA|9V+z;{oc&Fe0vbgMzn6%#-s zz62mTd`O-7#(!A=bj*mXwC3fvM#&XRYsraRk>CF6GkoH6-{-_+9;G#Z{rL1GBlg@u zl2=sD0Pc7msZ<(iNcxg-EXzUzMaLnP$ugPFptU9%2@|qyM4csy0K%a#$#`O#QC_1@ zXY>$s)1AL6J)g<}Y(M`c#|ZzSMlbDTKfZSFg@zOHHqGDccpU*e`0PP`>#oaq<*hM3 z{!x=vZ1{ zJvy2MezsHX13dZKQ9gF_MXX(r?xFzsZsDEDyg}T2ua~ zZCm-*@7loO@f>fhzov$_uclZml1in?74irKu}GA7ELz%8pM0u9Z6cAH^ldiE!(amKG=!o0T_sd z_`&X@T)d>8od-)9alZ289=^TvErwHh79=CATQa~qHZI}7aGHI`C;6j?cJk?Wtmoz{ zE+n$Lb^;PbDY-$uSR|dzlFgQuy!x;}0L)i4+3Ul>C1mF0CCu`=zJ(t-CHGTlDy?uRg=NCH?&LRTps4;*uHZ zJE=XFND^R2dJlCpG$Zb(U?=-_!S;c$eIU8+5v%jFPK5|2j7=JID|j61&Zru5=- zD&avREPm+FLm1U_5VcHx@^s2VA(2Zj!MyGh$ko?^Y;Boc^nCuu!>{nn-VJv6Q#{gCYL9b$zoYHiCC0;p)fs-q0nEQ4N3{KWb<<-%N{r! zNP%{(wN=PwKLq->HRVaVglS=1a4mAt2GrgsP{*3fY4p&u2RS;PjPa&N_DUEHJ^d;g54e3m7W{GGeHJ@*x!;UbkM$914T3h){<|FxRc9$0XofhK4 zT9H~J(uc9>4$P~54l&Sp(&KxsT*WR)<5hWs6hKT?Yv1nT*pieq!d(t*kkNr_yr4tc?~h-lxmTdI(qHicQ1NhA^`mv1e|b>+rOW z;9Ij%DPa~X<}ZJ3SA1nm-m#=Vvh}V_i52-w>K#aPs9c=HoqS+{ub)>9q4qq z=Xv={0=e+yl-*d83v1y@vc3;OP;`of?9y3-Mx9!7`XQfOp@8cK5P70`qWwlX!>mxu z-+JKHMT^b!hcZR+p3yw(M~Y%_&zqC>ZeO!uag4h!?c8ZiGsuDE$g6)Ib$kzM&kl6H zf+NnUDf@avbWT(4hu4*&XC22uN=YuCClZMurdFO>YYf965sTq?9{Dz$giXW1Hq9%b zu_6TBrmKpnckQzCV)%C7wr|3WT`H}}1%LOlyZHW>#;ZD345wS0x<=DQj!))D%!puvC>%3VHfn0DQVsI7e&1caEpGEsF2!R;90Auy_h{U{xTGAR`KbGaCp$xl@ zkRPQ)n`ol^bBCZ-X?Fi0d52x)9f z@BYRRhImRAvR{d9zV#ced?KBoSd>&c%Va7|BpN1cSy)qR z&3vjr$hHaF7Pe(gdAc_+y$eBNU=G4_!1qw8>|$%hFR7I7StL@Y)+mnE0WQndiZ;PL0*d9~>Ty?Mvu>DQ0*^y|m5%~!Z$%{=b7d>PkVIKQ#n z^_ZUOUdbWSIAD zS;ie(mN&gFbv(tRyT^H8=P<`6n~&}K!SXv;mfFkJL*FHv%j4OKL^Oiy+vM`4>>7n) zDF97~Qe3!Ynz+7SakMlHgIGL)ndpN|X^A5S7o*2dU@ot7LS@GcWATO$)-)uKh$Jl$ z+4QTq;|o5X+kNwUqw8+|VOzgo9okaN+|X-(tdom=y`4}ULkjw%X3ce1BZ~RTTb&72 zQA+dVYsYxQYd4q74SEI^GNM>|EdVUZpmCzk9(E?8bWM|K57 zVt&7l4m_28D^_sNRV(@7{uEz%=6Fr{TjgN?x{BA8QaFx-n{w0 z-O>uCAq-Vt*|paAUg>uiKqzG4xjwlAex04p;nJ zp4x+LS*1X-2A;ocd*u78JwW8Ibn0r+MVe=Pc(Mq z)c_4EX7<3#cQLT|V?lL%CWGKcoa?CT>Mi{khm6Jz6~_q~d4a3|gjA~7!}!t-C$`o2J-A{uH$A3GKk z$@%{vI+Q4*5nJX+rt${p&{&pqKKPBtY+z2|IPMv4ZsCwkG#W-4wf}5VNP)g`IcMqO-2V3jQtP}S#mu@R_Y;n{>-|ub!A2Cb$_8lP(H^GS z>F|C_=#m$DK7Tr8b;t_QpGXjkMyuvtS4vSR6!BcQqLA5VzK1FXUP7tFyo>J2zWlvA z+ij+u|t4)m8&#TSbX(MXtlzCbpYn@aOi%4=kr zCZ^f=mqQ>x2%JM5tL=sCTiBo8_5I&#tBqPWGY57p6#YvA+`d((-p;(*8uQphho+u<6_cq9 z*<2p9Mk&AHaw$-`K7eU_HgGaOcg?C)HrjM;F6MXaK5$=EPMB8WQ53Kt%t0#8RUl_*sebSi> zp^!}^9L6vV9LFJFbQ&tL8=t=r>EueOX>y&n{TlJX-vGYQ%DYuZ%*kDkuaU8NU8^lv z&tx=`bt-=LojQq3ge^XO+r@nGU*FiUQl2DaN`CtC`TX@q*RgHOd_q?1roD{a&lflU z272n0=H%&4CYxh2m8R%8bx(y1Dd}Il9Q$MvF|7$LSk|&kjUxIMt=3OJUB~!ZnW~?d zX+}QVtmjEP)b(WdHIo&L?8!*5Q<7y!K6u?K{_(T7@ZsxMV>eN3bSCjoY5n+eU-$Sfk426}>688a-hbBdp8>D8)t!qLEw z9&1r=DhC+OIP^!Si@bValH-%@Z-Ar_+_G^YpM1x~ES?i=&B!@1i%;ILgb!|Az=J!7 z`S!~r~Z@n_Y(0F4W?sM|PP4#6+LB3ER8j0X3pKLaVQi{l8o9G9A6JdAkykr_8 zl&I{xSBHv-7676p(DL_TV%#$$Ktc%DXRH8uAF=yrsSH{eO$A;6z!aM6mO2@$-A29@i*Y{Qq4!(GRbChwN+DVv=B%X z=}a1}HKE7}lE3k}KzuNpC2SbC0Ds%eJCzkv$_+sX)GTvjW=+K$t`TBk8j{;DTgL5| zmCPXNf{Q5y5qnl-!D*U^ExCAM$p_Q%BOInQMcbBzjz&r+Kef<$S~ZH|u|s5E_&&*7 zKh!~~E2D&UHBBmJ#jlSXSb1+C5;e(SqTaD&+QpOI2 z=u5<>Dxx)p`_}8YM-FyG###tFazV52lqsfR7>y?)514wM?5?j!Rq#$irOf^4Z;>xL#3B(K*I_c9!F5~&l0vb7>-kl^+GCMOsS-wyvYQ)lNi)w^ z`Yl#hxHf~%tn?Z?{W&+Ma)7=&KSAP-kCV;iiN{OjQ8Kw46R9+wuSzlIs@$6?5)Plr z21i@Pty)K;E^FrbvLQ;NF05ZOpflgP#_|}Qn^XBo20!upNGrtTKmBh)A)8RhrdV`v zDxMk%Vu?7Rso*u``-JASUD%^Fw7<2P$19AOVtG)qG>ahxeUaMUJnbf{dOMJO-^Wl& zk7At>IP1B@*&YV+93E(LRt!-*X4G`Is$*9s)-lMNniF!Np;d6Y%1W=jkN3Q~i zN24SYF{COjdsH-uTC$dKUq9B823BgFKpOq|e7<4Fpfbf2LNu4rK49v{{+u5%y%UEK zqVhJzvMg-d0u9;>k;!C9A0LAB80Pw`=u~ciM$p>Z(&)3(6jN($X{|e#C8`1H?aW6q z-Z^PxKND|a7}GEag~~&BUC*QFIAn7<#z#&dO@qF^exkSjEU|ynv|D7LXiaO1Stt}1 z)8lGs^+wEd*~oqpT`ZN4jzq#`<{_;$xm+G;+Vmxpga+mjy7QNay#G@Oqt{2YqTvnD z%n`F^#`TlTjny}2oa@uMO!T9aDuqtOW@LgB0y|{mxh|=6n#rSwam_IFTq!}oR;_hI z1K*4_rr)z2`AHhHWuDs`AbZ)`Qay8}u#8e6)Kh3pvFPBs&Z$_S><_=)BT37cQz#Tx zHuB(f#Z67a_2x<3*PqAT|4J7ntWKjF zplOOJgjm%XaT;eZ)>wI!bDh4sK8fRaXbqF;ET$oeMj~aNaF%V6NcQ2*no(0Uub7~N zPn_5!Vap(D*Y>hL*QauT#Lf3&Em%q}pPxFK%u_5D3E4Kr$-)IwIWmQE@pgW{w*pV0 zH4SZmW^R5~c0`&csb^$A*Ec@^!nBB9{ce0;Q7DwES@=p(C_4C4aZ`~<1Vbx?5yC%y z5bYFtDKY>8wluN(?s&E4l+XsarsJJAvIBU>50zaLKs=E^C=V?Jsqr!7#Bsa}E@?VOsB_fc0G(1y zDP_-1MJH)AE5|vFR-|`)z3j4WTbNRy5TqtkgzXUdOq$RYxAj2Csx&@gf|@lWW+RF@ zdXDeR^G`eoCk~fgcc#ksO-@dtw5I4dxSk@qxxHdjK_Ybh4bUmY6r%UW^^-JKk@wu5 z%Ke=?NW|lW?CGDC){x2O(7Kcb&i8#n>$V`1J#`wJhK9akF;&z5?#x~JtWnHX^BA2= zWQLC+q#zcrA0cTkyQoW2HI7oo6}9f4R!lv6M$BZyoL1eo66b2PA zB>IvSQ*Z;wNU&)Y13}TCVlq37>oAqas7~^ObA9t;B#zpsyQI9%qp znA`b-hEid76(Q;?rq()4597%zQLpyT=s9j=53Siuq3Ga-B4lzoiiHAbO(Yzi?rj9f z+yu_k-|Ug3)zFt~t*ic#C4iI3tfF%KPrIGB{ARs%=I}XgWRKr?CkR32#BoC5D4ypt zHko34VuD=$^wFabf~e5AFF)BsX)6-VX0uh3w@Cm`%8o=R=~U~Pe(UYb9Z!)ioVz=7 zd&R{hZ~rJ-YtpGnJkQ0LSp-W6;?XD+bLdW$=xYNZMAaHnvh;vzI_XhEn60N%ZmjU> zxxLOzTyh;JBVjz>KjpkpLXe0?ky7AUA;iFfp2%1WiK@EJoQi}Ool#8LddA**9!79p zF^x#Ps;S5{B)LMK$#jO)@Cm&B*{7JA>KmYvVhTE=m{#lQNE#}9S|!8qIfEU-idGJ4 z^?V=SKRtq4OFHu>Zj(*bqH;^S@`myiHBUQb;m)6z*GHh6ZWjOm3XDlaK~&gbLg7f= zuvQuGCvxcxU6H9tjC?*_v4D}(S_=U^52={RoS0SD8RlH~WH**x0d5MB^@wnbBLouo$4AU?6m!jH4DFLl#)0q?@{Ka@XA8(|o6P=W^I(qfw z_+7Yu}9;2eCNEg~GyZm;b|L#xYxGobD<4mN|xNhkS8|xdub~5NA4OCUr zJl0_`t04@d+|x)3(IFdV0G!Xt(HN19S0h7_sd%%JiO4h!La5TIuvdR((Ly{9^dwr% zsNm2c(Ymu!xe&QlUu{G&htKg15P)_H(@H}NAxQQQaMD*nE?il^4XqD>KG+!v>-1gW z1W1DDtYT_C-s-E3oc@fS<9?X{sfWKjEoM9si-BMI!s^5v>{~uiw+$)fIEYs}CS*;@ zH$YOO{|}uV!be(tv9a^=^BbVtv)`Ncv+H?evw3ob0+XX7SXbOyw+$)XF$6tQOcv&H zxn6>dSk_V{=_ho-}+*` zCUiU=pHQM#Q#s6>&Lu!7k=PxN$6pRdW48;$?-AtaDa07il43#w#R9VDM@%6N20r|2 zRqu~}{&&egU)`3eAuWV(qtWbcI#tA}KIJ3kNrVu7Bo_O9guEW~{vdkOs8QNb%=$+5 z^NIDcsUxX5<=!sn%{o&jt1j;_)v@!`}it*J5X5TFdfWCJoX^hT(HP#ytDOe<5UB zNGTD3VHg#6;{HTs%bn&7#T24vim97XOn`7W`9>rfy9Ui~0!?NAYw9o4RW2T^pUs~xWq^xIYL4hMMYFq)gq7(RU{BBP`d!pLJQq>!vYpr zMuH9MqAa4Kib^I@S@24z>NYe{N!v7Oiu15NZ{PE=n3-h8b0;2;ALC@^zq|LIbLaT_ zuk$_6_rZnrTj8pZ%IEX@q01r%B4Uj(N1a$W4&1E7gH5N?*F?ku7rXhbv>PYUMwzdp zpLI+py@ObGh^4UEGhu6e%SGh6l^z=!j($gjj#-`5%Lq_4p<_+eH@0odobil*Sgalb z{v9#os)*FTSXbg)fE_CsK>aMr0o(@;QYtrdE3ECH#&wCut71LA{f@}_+Mr`rZ}c<* zw02_F;ReC$u4f*sx|SL;p_RFYAMD;TU$I$0e-qRH@;3;>kaFe5cL;4*-7S-e8)Cg( z%)CLz1W;_xEOTH2*0ElZh*;P6kCiJ+_aM9k6c8?7AD|oO%PjV}lii#63d!M7@`XZ; zgo=iiL@b6-ZL5ohTQ$N9X3!>t0AJo6TPFJpUO*#zgsT!=nugOG1B( zb8%v9f8rUeRq}-*wwAbFFD7kk`e&G%kDRaCY?v-B^-{;gDJGK-Z9s*$DvU87xxRm_ zek~hK%sw`Npj!RSz5ff8$|cH`5&*WQXWH6MS-J3DiW%I-=zich$l%T;^hB1 z0~&FPMx^BfYj1p+IfY|l^}Cx+%sR5!>=oCTU%8(7G@_4z{#cAx?~)-+TW0 zwW>0|us|Y_KwN5WLP1AHCUPc6?~NE8UDa3V zO3%y-97ps=PAq8`170RC*S?J_|vy8EKI$1 zKIhimBXf&oKC`p?h6J}0;$!15Hje!IX@aRoS@_fMN$kE8_x{P&!Ac}CMVRg6%%sAs zD6cy3YRZ@sBC@Jv^2qhC^##4ap$CTF0KN|J%HKbn{?Es`AD_9DoBZEmWx&d1aJ+!b z;ip(U@ke%i`zO(f973chx0cy9!s&g48Bv+RabELW_x*KUG^|*@`dU_&`^_J;8+O$*{`TcJ3x&dn+VC96Sw;WiC^N)jGp_6Y zcS9G=ZTyeR<#Kz0X~9k-GKCWKdQClrYWuV|D0{|lvCLIf3WdU6&-1#@bLbYgEioIR zs_{Z$VL~)ErJ_?P2Z4duM;5`pDR63==YL;BwoDhqz98musH$5mE=~~2K@~j+@-VRV zIy9{>&I_Ef=t&VyI*vV=N~O=%j=gL-^d&K)P%IWlt*uOejEk~gVLuRkNM>u}BEs9E zdRm3I9V@eCYfq-r>7J#rb%OyhZ-V*x`JD-o1J-fw7SSDnpBTOI>qb^%p&^7;I3sy*KK0>fbUIIvrBb|{(^$e?5qvOqna znqgT`Lt$R3)%7gsHIR9PE2vx+>}9PMjJT*O=YS7Y^#kAcyKifJi{SrwYC(6IuIHx! O0000(7bNQ6ib5D+MGvXW}x^D_hlWDo)z_>&XPAQSim<0>wvfdGE_A(%&jza##T z)pdn{fPee%4SBU7=La4naFfz;Q+Kj-^E7d>fbjJ6WVUg%b2T&hVZrR=VwHU%NC*Kz z4k0Hgrs0)y*5&DCuw8)Jt;%v-Yo9sNC8Kh}GI!T&kF#ub)vMtz zZI4&-itZ8KNObbbn9tr|bd^pF(^@@tba6ZNU(cB0l|DGk-n+JgoOd(XpAc-J1e23p z9NT_*GKor)xxSl_hrU3*OYhhMrHR@{!wIU~*?y#w`)^D-36|ZslXxL~)|5~_*a(pG z5Ri8eu;fK1vbdi-p}01xR_MD3SrU4n&8F{n1fhmswX%sES3*_$u z==ZKJ6{CAkV5fn4aGz5-Sf2vPe@xP|jArN1k?m)sRd^ zI;dtNH%gJR)|}~BJw6SP$=r7IhSZ+hK**tN;fSwiPDx$pJ70E-ufQ2zG)fs+<$aVe zRBf7-2@qRYjRf>1Zgg*RH-2y!OUWL>#sry!eMGPfZZSSR%;F6+AGwq;-F#bltv*Py z7VMFK@@Yah_H zw7q-eIalr>Zgx;lZ5|!@VJ-tu^x1ufddEOToT!Gh zjUGj2y}-kBAuod6?5-Z&JPLGvdw|tus0tt$gb%8INi3Kr=RXPD!j-W@s+JMXA7P0h zF-Ft#(_O8racuuIr%}8ug-Y)leQjas6e|)&>1;{bL!kGsN|_yH(<4CPO^{#)@QO4* z=ir3Y(8+up56eWtOK{edwAo7;eG$a~Ks3X#7o_~ynOG}@Asjur-A6*T_Wu~MYC3e4 zb~*trZ$x7idNYk#(B6c$uw>coZc%XdAdD6aQU&<# zRqvzq*Z;+7tCS3|e+|ipe?Q_h2MS??>92BxoX7!RM4#otEv`*mB{mciZ7xqk67r!ZbC*gG+zAzWC*z5mW zh}dg4uWyTO5vrE<^8wGAA8DiAz)>O7E4AgJ^4JzC&`z6w;iN-%&6bJw2mCawTbUBg(dFt?;}H~`ed~i=of{~yWH_b zD)I9xQSEN$#qG3(F~-Ln;H>)sJyD;fcPDS7c6>K#wRAPW!GGV~%;6Xl^_GM84#=R) zx1vl@Yt2hMdVR`^z5MGuU>`;|JsEY&(I|-!BO;OGOA_{TboWy%YIl-Z?@GHo#gsQy z?DQ6m=Y0sJW3C6I;=7XQ={xnvkFy8w<)VX7(XaOUgptGdeg?n+S0TYq@hVsfmGRS8bqXp7Kq|QHtC@jUo5=nak~QAt2$YzT3^m_yTDp zxEZhsH{y#-?tK08VN1h$o0hN*@PPL}#f>v*>ZTFY;L^VG9Msy!X2krOIGU~H&G+nq zcr#t`2p3aO{vy)?46G6LOUG^cgdzkkTOXKZ9P&l#Wc&P@HkX;xgncPnx|9zTFi(am zJLuMYZvh$>H(h^Wr2-2rrwE~J>D-f))d8XkksWhORBM_Z8tD^g_m9@_MkDNIsW{9G zL1Mm$O@+9 zftXLvwddCJSu1H$oS2ZT;U<0*_P!y-)DQdbYj~RwwnxQ8M2$Ak1zcl_xWHR;mO7dDw_{&}OZJ4F}gx z7xTb?cZD_n=5Tvua?YmFL~+c@NlJ=0w->Bl+JWY>B+i4q_mzk4Em&c^ zW|FF)rELbXt&UoxtG_ys8Peac(k#pfmAZWG5ZXGEmvc^Zoms-8YaErbF1~N}m~D!u zJmDHgIw&xZOU`C$VB0#^5X4H?IuOmXvV3hzLGMyS0^ZW|qQZ_y(Q8i1^eFx^Q=Df_ zbwUepc6x{gvk_Z~Cz)(b_)~z~5qT}4JYs1G^Lw@a8&JCh??H8)Uy=&L-tHvd;9E(= zuZPCf(+fWfd2V(4ip;l_*P|{pic19WO;PB^ve6cql2jhfrRkV3d(7vlbG+5DdtS2i zrEbnh6q1}3NH54Ww4UH~QdwtZcIvN(kD?`$K2dr_HGon2#1M-1YSTUjVV)%DOtLk! zVRnK4MKb!r`z)MEWWFXJ9bAmac5mGGV&q_MM@v#3@%Jc}kIrbiD(AlZSdm_kx2D94 z0wCL+6=0}y%Ac8H*3s2jrzkRul%$=jfj+BSxUA$oO2Q~_iq?*5%wrmPD`5C)YNDZ{ zh-4TEDG2Mv4$G7^aw06=g^)eM9AucnC|$~*shMMI{4so|_$Qx{2e_%wO=sz#N|)-g zwmti~f8#>owQWX3qmv=|tk?d`HNs`s zp6iZpx19OHYqJ=%L(%aYj*KVU{gjcb=+hz{5w5{vpTQU$Yhe2f2qEQQ46`t+GT^## zdX4!j(MY3H`p-zQ$VudCc4)TtJmX7njNfNM$p+zjH~GjHEV~W3FcO027B*kh!`%`J zy@gUZekzF%fdOt)c9?HB8Gu$4>#;JErYKo#->Dac0MfP-+pyU=TK067kaLr4RstxT zwxvSqK)K|;f3=8b3Xdg}v(Zh@G3bo8>I`}yqJd@;b{LwQkH@K4s#dN)*Zq8HmdnI zY$Y3e*zJibs9BR3D41grcuu=f8?C1%YaRZi^-40& z@W60s>5S&ttY{l(Uf&=7D$zOR(GGYY*F?bZ$xWQdP4k_DyNTz!%L|_m;u4F)!KK8c z@VRBu^qr>CuO8HCEUu5ug?ix9r!_Im_W4~bjN6Q|h#57CveqN~r%qf?zC`R`VF{AkhRvDM+8u9=rxc>C{H*`Vlg=HNY9& z^-eOHmsg)&ZjPC&Y~s`%GTO8(*7QEkNMyHXS$V*~b~r8L;cln~=u*;6nEX`!Osb9l zlO|foj%_-tf$S=n=s(1z!=R<)w*wQU6Sq=zN#VKm_)8j3OlFf9web`Be|Aa2D4!Gmp41UMj1Tcg%?_BjL?zqq}w;H7pViY$=t{@{EhGO9&V;gfan}<=v?LB4b*8@-Temq z&vQQgoJoco__wdMTGhjP4X8z)xc&7rZH!)<#g`jr#T>AYHE8>vT=oJL)IX)}>dyVW z$=P?pr>6OW(~)(n803=zZxB0qjEL^d>=p^Z;>_}@^?66XzHHPd;szm9Dz9*sd)b$< z5d~6=7hw$w+(+N+gI2e-sY$V<%e?d3VcP8ESXLXc7Mt1+l>J+Vk1V&}PE@B=jrv0| zxXqYi1ven@b2QPNJG9H=9UuOmwK-*Qn>FIn3D;1O5KzX7J!tsya>Sq>+hkFovbnW~ z=Wv=~`s(%-JtA1SOfMkf(LXQuO zS!Z~?6+M09Vi8A>GuQWrsrDx`Xesp_^$G!N!{DYL&c{xuwc$jKCVAP^AH(fD{Wp6Y z)4OR(pZT?@o=@nE*tEt;8fAc6NWo6JIA@7%h)XAR@H8TeJq?UxbqAu|GfZZ<-tUOy zKYbh^HzbiE6F4(w?UXaGEy8dji)Lsnh6LE(!(G6y7 zaW;HYr@d0i9V8)84r4`4GwfHBtR}AvCF8yh+x=J7( z6mf?7oFuri&HfF^sx;|+%a&fl7%>__>{#JX_IX9I?(bBfd`x3Mhksv^D^9;56HbjXBbXrMW$IKGbM2`Yz)Q{&2KU~qx7Gv6sF=n%!2r^CF zC?ans6P+I~k=MU}?eL8<2*i@UtP~x-eN9XXe8X^~AsO{L!VovDHVE%J_!j1{*ZG1p z&7or0IE0w**GG{}^gg4m=d{u&@a`f@qp3)4Ql$ry03ANoj!rXE@^s(#W8Pf--mTM2 zRgg^rNj|ty33Q<6<{}7yt0KF3i_SB8MeMq6w)k9LxSw~&&OI}>UQz2^TU0JnOA+wf zyg-rI+ueo|DvgpsP;PvVFv{v|c+?2X*#HUr0WU}#5^O!xN21@Ef&S!JH9r z`w3E7t6i=d0Uc93&M5!LE>ftVV0r(Lrw~T)qw%tVmuNkur}XZ=ci31lma zP~vTWLwYwk-EdWnPB>ej*lL#BUfUNE2_%gtx$TnY$_;Ge$k} zH?R{^XXZJ6-k)+bxgU|T|^tMjp~n?oj~rL|q(0q=Uu zK1n?R4p_M2nF_yy-BfK_jVKD*PFEfLW$(v#`r>J1AeZbu;ZgXJ%o+E(fDMUCTzKk7wG0rWp!pCQP~!Ijd{v`sSW! z4~xsD0Dq;;=GRej7LBff~REFzdxW!r9Af!qB-~zYQ+KBsQ5!tEJ9sp`-1vYEE8|E5%~rpHW}4Fhb3zz2R5g^-^u@&JB~$Z|ar0V; zH!@$MM44we0gkegZmFM1$5q=*5%9yNi?8Y$K5;j1CDa$B+o;|X$L%_%mQ$AZN9DyX z6+Z$oE?JLpF!jZtRdHKdNz|BfIm^y)nL+wXD!nK^c2k&L+CWZM4yau}DffVC*W8r< z;ikoyWi7^cANHo^T=HlH?cV-d@t~0pQxXmj0DL;Mz9}b3j{S8h0a8;p(Dpk@((@=JzjQKtH zuD%H8?_L=Sn5F(HxAivwn0?ssF&@V3zraV!Epb+8{ip=;Fgg2(Ne>2WZkMwt}i!cw2RRXB2rQzzo9;lOzmC4*DtL>EMu4OY($w9-xs zuZsEoR0ap$@_B&tBQd4jmeH#}ZdgNC-K3g=2gWq1DHN1mb>hd>9_%xG{2%pBpX&+! zI`YIk{{AGa$SZ~)f@9UXI>^~(zO;q8D+;v2BsYTTJc;K=cg7Y|SZ71pR9N$N^-~75 z=pog?@EI;|4k6NjZjLrBpM~~uhlpRo^$)i`t`9D8HvZHAm7_Vo3o?<3eakQEpVE4xeuj8{VZBi=FqCG$;s$63H2_mUu7hFH;au9fL4PPM_&<-6I6}EqpLCG zc2rIO{BPnFu-}#68Gb2rLt=2*AL_f6#PgIY@-8L(82D)&;#*VgO~Xy3rC7uX#X9Wy zqFZyJ%$X@cO`gOsMSWTyG7r<>9iQPUFQEQ;wDm5`a^YXSf2z{;29y6e0#yF-shQkd zMT)=SDqXlTyz9+O_F9y0!7HS3^B(v-#d0;nQNqxUAP~XUbtnIalIS%Ak1s`7{x*Eo z?Hv{hqs>?_DYBDAyJ>2_KZcSr+8J;wn7-!tZ#p;72ko-6+O6VR@#g)NhrVKyy;r1)aA9NUA4*DNQ(>TDOjO;;;`Y2?};#5E8)^S z*_~GfJloN#e*^9ej~yh0!XeAiVPfKCj;|w-!(!ymGe;f+^#KVg_e<4+Zreipu_S3l zashfFboCN@Pio$6R_V}qcuD$3g7%@OafE)IbjlTFqJ{333nld~>bgrlTEWt-i)h5p zR7-?0ud;7?Q4_9hMo1&h((bWeysok~tG`WB3SwX&?2+TWE)m z3-3_@&r4Nzf4A9ww;3T(O}7^`^Fdh4noDw0qP;2Dg&NVUU)shdrc8Q~%GZpk{=VP- zlYYs9Wrw8uXs3hEZx{X3Wowy0F^}XiOTVQ%HgDQyuN!VCWr~$PoprAjw)=V@a354o z^)`?8p)z(FaJZD1LLzbS%K}gX!&lUN`!HrYsxYt2Wl%cdP9g6YbQ}JI_y<40?4(G` z%SxW-P@g@J0Pu2%H@p!GeW#o~L_+qtS1<7dz1PD-_tqdI8c!Bsua8mu^X7k8aEf~=>1gM^HN37XTY$R{x0+ntz*Q9rvA`j4>ufQrPhz*@pF+%@cktDjPH(LkAb_UJp^TfNBhTR zI-!;4F4EBqZWw$3cP-` z?n&szI!F%O$y0cVSq!NS0Wz^zbVb`&__i-iX0$f+>8c#nkdV~Dfu4`Yn3nT9l!1_{dQyr8cDtSSJ zSp#jsp_ZZ*9NDhCz|yh%Y92Wz{Nb+A-2B=mV?_Qq3A3tCu|pCVzuxd^q#w^+GTL+H zzb>(NCtibrBR)i7D1M+9GoiAty)mCJ#cHB3{*HIzgd7P_I#l~aJVb-NXH(qhNj6()>ZiWl))1ItxKM|FDQbs^SIXUV z&#;jn^~24nf@OKG%#k|wgGli0p*o6xP`UZJevR$5LX^RuLw;%G>aQF(!oeT+(bW@2 z$idMDxdhgu{$1*?*UINI!|iNGmEs=Lj4^$+v*Dcl`TYW}2$y%+=;CprQ*>lUQ)NFk z{g8^Rm=7xtMhEXqwerx1;4oJyI@MoKdLBv9fD%@rfwE~?V@(C+F5}Qx-et-cim}t` zsvmgU&%${}CUC0J>LtnG%xAWsRxg!kn2$AJ{Y9gXj6XrdP0)Y{P8oi4uJ`f%m#>Sl zWjS6yc`ZyTb;lU;Aj{%q!vC-UTN*A7++;H!@}c}|8LOR2Kb}UQb(rEzLMjH77QgY# zFmi6G1;Q$V&Tj-+YUidtGV7iB9rPeBL9@LhIR$~DBb%NWeoLB&P&m(}uk&SL=$>GL z%mu5R-(PRI`wHNIaNUISdV4+xxlxY%q{_DIyfAqx0eaLuVcR9q)whCZEJ3U5WY%4l zp$^R37rsPNXa@T{m&5ZQKnaw#9C|~Wa@h&y$R>@Kn{Z@@Xa7}f zySf}g^Up$?hlAf55v#2n@2pWbI3INUJe`PXQun<~-ifALy#}^@VEfJE*M>zq+1hyH!4Z8>0V^uRrzKM_yFo zBz22s2>EM(W zMovA7*!X>VKONn#X5lm*7tGk1%pa#YE%foX{TyCS7btFuRb1tY&E}LbHiXn&!{T$C z;gDI<`%sM@`#`8YT%t#znjPwZPApnNpHJ@OfsG!#qoE^c5_RZI`|7jIRtklQGNI&j z%r2rai7zh-kK&5*p-J{x_e0N7mnx zpexsMy-9xu`gSf8GP(5RR?caF+_K)P;b(9pGZq~brxE=qkMht*F`4RPY9=Nszq+Q{ zuVjAIM|=uA94!)?D8g|GVuSE1l=wKGWjvQRrz3Kz3QOXqx0HO#`--=KpSxY>^Vi$i5KCyiRc@ z`ayxm8RVZC$i1Q^;J_?(RbIBCu0gTl?z~@WltJ~vuYHw8Jr;e zQ6+;Bgun?JcX#=-W7bHY_c5-8|=P$~{JI_eJy^MvmD09VNU@ z56AN-)sro{*>R9>eG@^vCumBvU(0ZrDpgKpJkw5hNs{kChQ>h$+8QwlT9T?9kg5g; zI4x5u@QOs^@{1GyEy|yq>1Lnmkm+?`8AuU=GL;>ahVdNZOFu}N6eG{SEZNooflm+&?F`|NBp;XG~RTQFg;9}PeI={%LL0ZpS zOF|=g*ph3P#q=C?oTr`U6~dq`Th#K;u~UlF7dZ*f%-AgHwN)gwIB{U0fXq*Ml?`*e zp@J>4p7H<>0pd^K*sWI&Z#m}bE=_v6{xBqb)JEODJddFuqWB!pna4K zItEr;DZLaNM#n`9qlRvF6?U3K2s*FD!ye%a&w7S;Cj2S8`Gz$?QqjTT@K6)d8Iv|Q zXtQLtyT9jDX7p5>>S*yPXqM33554P=*Y*=};rBc!8EbF{IXELt^v;9Iw*#G{1HH>I zs+%B6cY{1+qkYt?u=?@VuZP*!8DfoDIB30o)@#?%S>{$Fj8A1E$^eO*TYfj;CVI6` zdj=;$vN9*~b!1DrGAq&f9w{z9HipB2FGW0GsVE^&jEq2(j8wGC8#A~3=8KNq-KyKQ zk?-)`Q-aPYc)D(a(V>Q)6NlL0TcYOL{+9qbV7>fLHQe+Q`BZ;v>$i?mcH>+d0+#u@ zwbzG2U8Boa+bVqd(z;h%)>B$1nbGa^8t{hJYu?~}=+tuzt=y@O?#TH~ttWy)Vm$<9 zk7h${c$39>TK`UZMOE`Ykcfmv@qmIs-sauci6D0RoJCg7oNw8vdi3Dlp$?}wGk{#1 zKjUyRNO`Kwo2ReYy*!BKA2??JulrVd^BD#wm@>D@*j;m#Jm57TF_>OsJ;-W-F)zSc zZ4@lbr(s}fbpuM4_(KH^3N4$F0Tv{p6#|RN)vdk6CY;&6RFW)Hq)*wb|W!mA=IxLjEz_IF4t_F`?VZG5{W8!Ef?i^qM+0^ZMU{wgu^>|08hUN zJy>@|mLtrPjC`ben)u&2L`lxOtw4&pN!A748{#k5I6mnNpS=i5o@n;3)iZvfzxMC3 zx1fxFlQ)F3hhVCsUDgBWJCXgIi?P3$OWE3=S1}pHa&v4e?1t8gs&l6vE*YZqk313p!pOtmCWACfj4v+7M$S zT?B?RdeQEb&rLJxm_$d!Uueledrt&h&8%CVl>u@(_GZL8-@8l_Em7if3*uQDggH=^ zsmLsE2vhq7(J@XCr>H+EoflB z_!q!Nb5Trzj-vnJ^EmakdPDn=M}NMFEg-|sIOSEYPB0%SN>u9y8MHvunUeO~LIKVi zk5xlQProlNbADl*khD|!J*j3${^4?O2CcLK__{v7IJ-t?eH6MJ zslz^qfRB05A8AOyG3hX7*l5l8M`rDC6Y>{J)4M4ctq2FDDQx9C*O!Y9Rb@zvtWkD{ zsPXT1Sg7>W%?=?;`!^QEj#(^#YuOjKW8|z*Ene}z$)opT^FM@}0<2CL#IKwyWZ@U| zoDaJ%lYKr`Uoz$nF_C1@Tu&~XigF77(40tUCFn_!HaUp?^vq!o=Hs_}`oOa#q$Af8 z+jr-iz>M0;b3Z!f>@^Qdi0F&-V7ptPx@Rq$lG@)~2bN#13stC9s}Er4Fe&p;z$E>N zUuu7=%lw%Sc$ICY<~QeV8h!Pg)JIt8n_?i%_I;fF?mTqrS=t>klOJ?~iS$cFWN7;$ zms8g;D2@8|pWPR~&khh<;e(*l9ES@NW#T_>C^6=Inetzce5I2sN3=q+yUW)+G$i{MD+Yrx7(VQ4z^F<#!@p|v- z!L%`MtSq2C7>syc*8=$;Xeb27y>%+_(EoLGzQo7?>~>kiuOJI5u&XCeYZ3&Yo66(B z+UV>Nf|JBC=AxRMJ4V$U{_rXl1LQPNOBr*f0sMh1FtYy^c2c`k__(jQw>`Gi$lx3@idmT+kf04&|bda+UD>+aTm?%IY0D$l0Vyzg)gpn zZY$ez*9gz{H8XK$8LajceGCuh9+xs)a$+bkxy&^2Zy05QfvM&tcr|OeKG;l7kQGQR zF3NfP`#t_xA{z_AD!&U;fxTT@wD0onQ&Q`M33C+`n9)C{EhnlV=en;%NTS%>OWUNF zCFAdd+!o`TxX(xf^oVZsU^MR=T!48y`?;SnJiI#RKh;Uk+jBlHdXm@l{TT$TFr#S- z$5W)%>cO#vMMt)6pB2yLBngAJ7}oqcWlfu8RK~(W`*rXR55|dfLB*XIOXmMC>CtWe zE+36VlkUgKMIcomXuEi`CN=9%D2Q4kJFT)YkM7Abknz{c?a9SILC%&@3@-1+M&r3f zJZ`}ZK6-bz?3s1_sn<9Ah-A+Vx!-;9uX>Oo$vfb^HXLqAtsaK#kyorItM~<86ER$r z2oJ4E6pTqt_vvjia&a|j>b1POy>OPV8JnWL5B>4WQwP)VxXjawaI)$AO`#m{n%xTB z6zP#}XUR&s$h`{c6t&_PtwZf3z1$bQx3Tk7X#aPoYF|MVgB2ac1u zvJ^dx;^d~uqlx144=E2)b}4Qf-BRs`w9@0ui-bEnJg;XO^S(ZMr`FVK{p+L4&DvJQ z>6c|j>ni;9ck)m)E@tPl_3I^_;>vfssvSEbGW>vsLn1Cnu=GKcJn7rM9##s!B;WEZ zPml(o2t+>WhmSUiYN8SxNjlf)p;>7(6x?{jT|A?fstFHu{=%BrgJVV1W3zX_xY^4<}D_o6dPq{`iOv7v~Go+tfM&4HY4-x-U|rM55~w= zB`!qwXaxb9dnR~I(}$n6$2&XFP3r}jU{cVsZ=a}&ACm^x`EJnv3g7N>pNKq40{3zx zs&`#AY_h#1BCjG)m#e5%XP(*`c%hvN5KEamYd9AfLAK~^57bQGuS?YQ#P@G6gg*!u zu43^R1-t!s?(Z9{If*<=K9pZR^n+sZKE!bqPM_NvTCE;_zb}oMf>UNxvOXgIFM1U6 zcv^oRdo_}~ofPYZiKF1lLS)`e!2}^z{q9f;B9;h01Wqj`yefTpUvuc&^ajvq+qE+A z61*C-hX}l&MLe664i{n1EuDd#!Q)1M-bu}O;%v2qTz-*yKr*E=7$Jf|mN<_W46^hh zFpA&G)RCQCbCue|xX?yBE-2Z;FNTrJ7|*>!{Ds&I@>c&B@f z8ncOBO@ll*{n{=NvoDnn>+!nR6MbFSHffclvxeG?T3NG zx3ul#b*Y@3g^sM8G%UW}bpe$exPZKGJ=xLIv=sE@Ksu&fC^U#~wafuG^lysSn z)qe?B@@M`fKUbQiek-}5zj$p_yeW({tXy!jV4`;CE|`LBEY({sm_3ADEk{}XE}u-b%{P~xcRI-#z2eW zMvmm%W=Z?A^stON{q*R#<8_4qCGh(-QL!TuuzXSIe9lbN#Mo_W;KVRKDMJn#>W(m! zFF>zs$yk?0n&g)hL@@=Ca5B}(&C7kfNHAhn8ZKYZWo%FQxG6(ZS-x#8AI@)+fb!)q z6Elx{6QEvb91vlyQqFlS^Amr%1)>_~?_ix7edo8+{@ek#qKlq zlATsZ{w*SRKcuQKvZ5!{5C?`&jDmz*aoFcNlVj36Itw(1ylu~Ms z#NDzAs7U{gZ7_xPHp`RoBuFV0_MdulRtP2YQ0YY@0(qKdKGDONuzoA@m758g4A-{f z8Q)hAfO4P<9jOy+&HdO6i9>AhrN4uc2b(J^NFAHF%+Z%Y0;Lhm(;OwjiUa`*p38M$ zOe##!!+pQrCd(JB1~b&8)l=4vL#nu!GjH1Xhmno+#CylJG$~5qHl)>A7mScS)oLmm z*t^av*`pgh#~J&^JB)wcVX6uf-bGw59FSS+xD+2^9;+zLAk-p|u!HJI@dnoM3Ec z1}kkB;=>zR1uRV-tNXL+h^e@{ej|Qu8=xKQ;tTL)t^ zESkG|s~syE!Z@x<9p(Mn<$1I}t!!GgoS(U&%)cm3gD&AN1@LNXmU<(6t&k@_N1eH!?cVISF57&nL!*PtwqQnWEVw>uk3U2s|`O#E8R1M zkdu;_Z4>{@KUqygF1A<4mim=w4zS7&?zy?U8|xN%CKA%|qDqW$mMf+i{1)w2B~Kmu zsc2=p=?jQ+SS<>mh7!IRZ{AF3M?t5o>Y>FOlwV+fI;#{=DT8h)`=Vu3J+Bt-Im3h! zx8epq8gEpeO*8@!&Wrz6v_loV&rMw4ViV)d*N+x+xOseKor>*tEYt~J{3%tIMS;SP zg=nx$l?_b9s2z6Sh`9fjE{+-d&y0v{7`yFn&;|+trzlw2#E;*20ZsOs_1V>0>D+f* zJCS?X7;}SBz}_ezM3t&Cl1RSfQ8I{q^#|1@&zE9{!kjrnlg6b2u3768bAAOu(k>9M zqOokKJ#(Z@mX4P5n4>Puh88?*nJBmRpO+mD0?ay4o9h!B5I}Edo3YB+*g4AeLC<__ z^M_2w<0ultjEb?LtfhPqqluzSbhQi ztG7b<^;<#Ax)s?U3XFu*xl_L;4#0qBNlNaJUFU2IJ@Z@d9Dd9CcxqF9D%6%bgu7yW z01p-u%Z;M&wWVOzW1H-;-l&2+GZ*4=ghTHjLUFF>KSa>}I%B>VpN$3um;7ClcNbR7 z`YrfzlOifo+EnE|Ugo@``c*u0L6AK>Fi)*aOIiO#If2HW7%mB?DK7qjE#SYfOcb~Ip3)Q=sI zL_{Qmg;x+b!mb1coma#F@~_Mg!N6{r@P)*wcsxC&=wWvz78i&xukGDH+x_xdMf&g< zUZ*mPUxO3mOy>54mfB=XXNzuz0?t4r0DV0e(71FV8)sh9RxQJxN|QUa`zkDs0LFlC z7!Gl`jX2Ae&VMOW+eb#7l@0S^)QSWY7EtBkJHHq{9fJg3#haxzIjyQSCgiCi%N5p~B&R&a9*>GoA0d0&t<2&G?E;vR)90aF+q}#J<-2T|r#`aua)V}I zO)*`=9oOE!@&0wp*=A5Z4CNRyE&29qkDpF@+AuCZE+E-XxqlI!M9)Xlh?mP&$yk6mp<>6*aLh&Sv^hO5Ec(x=k?0Y#qPvrJ z=5ob|9rGA_;l!n^1h1UxYGq1~S&Fjq>aqSIe6_j7OnmKai03y@Tc77pZ!w%LJ9y6J zjpvx6@Tb??&m}!Y!6ul|nTAOku58~tzEP|0 zXKWxTow9ktk*f=@f{Nc;Z~w|o>Y%m;ZdLZ!VXQJ|%&NskuA$DM^(=h}IMe#7ZWHl~ z-lfft&6)tT?)O|;7yZjDaxGOWdG(s?XA-K|pVA`z2iObZHxU84xspxrD;rp`Ydt+(3 znfo3Y>;y>{;!wznK^XAOo@mImP-}QR%Czsy358dfK_BWL0=W~H|TZ`D$^cS z0+(tdhb_rh{%?B43%Sx{3g&Z;FDePd2ktDf7;R}vK8CjclVjUejHqu!s+o^fihUnZ zW|B7Wa_4|5l&U81{I}3sO<-U`7j1<1LoWp1$X-QBmn37T%6fZ3IER4jL9D_WPXgMt zD`0ad(=D$i;H|3jF-FSG&>dwi&!CA==~{;=o#m&z6}UEhEr|ANFf%Es6CtNVHXtkbQq7UEx#sSvB8Y=wgOzdkLd?KfTRu}lfA|6%&(!f0!vgbKvQlF+C z>qzvs9TmXT`7+~9&4q6`aPyrwp^TT$;OvpLfn)q|Xy|N1*HB7kErxHy8l~qkp7uG` z7qC0PQwd>gxaGFl+xHd|j$1`z!*NwZs zjF2rf;co5TjTP~W{%>g_?`an6t(F&~c4-v4d@V!+=#{70aJ@i(Z=TO{K;G9&uP>HJ zvJ@Gc-?2yQR}KA6nx`1^=cn>N&)gYvbcLt>P2lFv%|`jlVe1OjeZgA$MpO3%wQSVf zm7Ejo4|Ah;^VT16GVK#~%n3)FYaL>%6Q&D$U7s;(-iNFQMR+Db=o#!X)@B5a?L8$e zBwRy|@<-y_L5ei4?##(P4B}~d)#0MkhOrqF?X7a~GqV3F`U zPj8uB<7y|q`5lZM=(gPOw%)ASX*Lffd=>usJdXxY*t&!HzV_9T=)Xbx+kWD!X{A&v z!~Qhmkkk16D53~4LBgSW#m1## z7ryoDhBd+Y+m9v+xX8g2oac4{03zoJQ?9bpFL6J(I~6etG+YxM{MZ^Xpl;~DN4k^2 zzwR~)em=Y^pT-e3h}ktlcW@2uW(Hl2=}kwL=RI4`{C2OU*ZI}@({&955Qi!XtY+qi z7l)o(EjDUqu{O8Y=T*h=|HA^f;DuRa(Nv$t3z#h-Q^2Iz?6fks`2{T8tZ{yACZQmt z=iehS$`s zD3#L}A-Db))X^94-+T<*`qfaELNL2K&XfC2(Lb1F*DJ^P;zz3sV1c5z<+AIM(?{=f}FP&b>K<-!_R`Mj}P(vS1;!89(WZY;1_RR!}~dnO-;e13Sj@{CX9v;4e(?y&6v5YeupbFOa_{u{f{ z!?ihpSIn*KV~MWW7)!4!Idflfy;1y1DWyt23gXcShLq<#;o;`z3C*9ZpTYu%_DnuP zE|*)Zwf}y!*a7-Fn)-L6Q78AJ_C1WwHYnz&Vn5DJ$D#^34*b+I(3+mEPS7BY z@nfzuntZN6-f;pcy*w5H-&waSwY?eo);E&Nb|%+aM+=$EjSAi=1nc=ZVj5FNc3%dSJrTFzvib21Xc=$ei{d(=z%7>gM1%e(6OPv6?7bD8vJgor>3|CObI zTzCa?&T9PqkE4#g2$MXb5{VheCD$V7tf{ev8d!bH@Q2S(a9koCHt9^3SS*Thkj;M3eWTK zJ)ekelS*gkOvFbr!p;j^>kGr0hNP?Ge5<4!zTcQL_4BpjBJtQp$UfJQL7Iq`7J26N z`{zA=Eb^hpPgoy3Q;>`M)4KaiwqP7O1Bc4Qkqo3=dOORv&22@_XS#{Ahf#0rMyEfS?jIijDnBDVopQM-DXV4%(*^eQ57R%GBj*;En(_bF-g$=0 zb(Q!2|E}H3%xTh5vx?PaOLCDc#k~X@FtKr=7(xqN5(p5u$t9PB`#cZ`B)KHvffN$p zNg=>PE)c3Q7$?}Vu?=prW!bWfB&)a6W@hgxyRG|S&*^i{%lEbG%|m1H&x*1rmD_gleF?uB>o=Rj$4S4vtB*qU8nE4DQ( zWa0T7dr#Wfd)&g_lQ|qXU4R#GFuojrq70y?Gz`aap~zv!l#FM=$`_z`eyE>b{&Nrr zZr~wr=b=baS^9~fDhd=yf*oV4Bt=$2F-K7(o*P>%4s6_G4;^#4HTq&u$o@pkWdBWENE$sh*fk04Vd+>$U}DHADDo1-23zieCyGd zaNty?>S|*sA~q~fW7F~;Y+BxnOV;#HNGUZ1BG8KM5SMI0aOh$1b1#Cey&P=m1r4p- zc{ji>4`=b{p$will11K`y`>IFz%N$Zh?@?50~|oUP(V6mz|?hEwvCeG!1Fxlx;CM{ zDv1(QnWIoFpinAJ7`q?{Fm)ZC?1kBE4YW!U7=x~B060)S_xp#QhH&L;CDQsXV88|3 z_x`7K?D^AF9Q`(2?^DJF*K~ccO2-&^?$oKpaL)ZPQ&VpsV_}kOMQQ#b4*hQG!cRtO{!OKaIBF*QHFYK-9gE!7q z>wEA=uU-@7RtN%)_y5x)*n4!e`o(pi%L1<2yc9QVU53lnFP>J*-4IhfTXiyGyZG_5 zBe-YZFh(NmeqM3-o4EDBgd9E$U4tUaa9kIbUBGx;BWzh57MG0cqWiv&e4#ke)r5$k zND{c*8jh*Eqy!M$B7Vds#2#+4h!fPNS?f%ub;gZu2U}ZL3E%W&T2!JfhNT&o?c^iQr zgsqZX7mn*f5Co{Q1WA&SG7WgXk7BU|$8}M39H6|4*Hbm8Dr!Xo2RKO9Dm*?LQhQ`! zS6=xw`f+MjL6lk>`d^-@xGg8)?1E;~I0okm@q>a}8|QzxQ}! zwcfR0mpt6F=Q!@!a~zA)DsI}o0=Mp5h2{Nv^%qB^==%82{bTsyGebB!5>M5e$0U6D zl8@oTk9+{8GX@U8$`@e(P-GcBsT2x@VraZ&r-twQunRt@P=qLovuouk-4C7}0rd^m_e+Ti(c%r42fnvI_tH}jJGtze2DV+>{0~I~v~0U> zS=Lg@4}Fu2fve)a?O*=nD1LUJ_SKaU;k&=Pt*p6SJHxpWZu`uA)h}!Uj0ii{4&e4( zt8wL~C9~S>MkVhA_~~;a_~sL5Fq&^p63V*Kz4*Xm9|7Z&5fE9HU}zeM2!0TtSS-$) z@kT@t1R-o^R716yBFoUVP_vyB9lSJI`9_igXeM}e80k-b3&QzZqyKVlF$jhZf7KYH z|3N!UM#|{o* zQA)+FJ6GY3-K)`~NBfgz3Lfr$W*Fbya}KuC9L1J#4)$%s_c#6)ZhPU&6OTEL3(xhS zswxyk4jUk993|HcpPP~O#yPJk6HXKb=&A;BiW8GNlNxiJ2!-qzG`9rd{0kwhZm_se zQW;ye3$OcTV*|!dQ;nQ+ZrDS|?k2te+GgITULyy9;Rp#a`;N8G z$fq)tE8?Gib^u>}@E~4w@e15^mXk!AZyte&17Kb3m_t-CwikP6^mSeaO>ZbGA9h2R2{5#5;I&nzE7?#!lbBUED)zgiMtP zEHdl=HHPXma>omB;8bS{hXkDC;TO)};TO(e+p0eN=GE(P#l|Hd0<4mc@9!DHcb+sh!x3+&+EemOxOyL#zpz z9dpo%thX0WW#D+tJ-f!i-lL=V$k!gn#$`R&xOy2LKbEhUmDUalV*Sy9@GS0QX4*0% zLMoL46Bt}SKp}6#^L)s%3^SDmFWLYIMW=*9z6g%6U6QVA0Oyc*zZzsTvD1sBl5pPk zPvj0hx-GTt*WS>)8&xM(Be%{Rc?&h+sq&b;ahQ-mJI19kx}k#(`5A zoGR%cp>wM31`2U?9-^>OVX+9u^AH39L_t8xG{Q7l-z`_N6(>CLk|@G7LxoxrB`CN4 zc1&}bZ<-9k(ygzz4?p#&zUF&Z5PiHY-?p)x$#dt9Ur$>4Ut4Y9K=`fRtJn8^HI%C_ zT-0gj@miSOjk~?9${Yx{*t!N;uHTO`Ntp3gbewQSHw~myCPYC%vE(3=%^_#o69%p- zGECD1Nix7WlvlnD!m`%&!=%9tyX}{5+sk=-GE8GJ^3s_@+XY$s2?o2g6Jo#A5Z;Tj>oO5n?lJNjUrID}ZhN(A(3?s@(+&6la``+)GdX0(#^6r5U*V|-;2hZ> z`985g1a{uG58KcD^tG+JW#qqX?$oKplp6SWjB{y-C|Pf{R-^4dnW=m1j-c&@#FHp~ zc-#qsU{||}3cDE2k@?=2qW%i;AxK0^H+_S@ z_@gGq@Ft0D=~CG?f>|7*ttCZ`y>R zsWlhixaC}TUZY}+_3)3tYemXM=aQ;#QH2+&=OAEtFomJMPIe!hq47gqYJ~ zdDx{ENd(7C2QB2t$&>xoN{$0T5MbH)X}!cl!Wei@Dg{kdV*eciYYe3WogvUlgBz~O z?7i_nq|-0u~v~No_rRwmVnxUF#R)Bd=bIH3Lo5k*k9teJOZZ=)n&H zNP+-S5RlDT)6UJ~5D_$0MNc|aw_~mv`6us>b-c(h0m7m+f8Xr*dEG{CAAaUGW)7a$ zjL9^DA~BdseIJHeic}7EnUNcch!5Yo4S)I8UASgbKmPVjoACQLu0oI2-jh{cO5u#Y za^mMgu?St)Ac`V#whcR9nBKdbhp9Z{=XIe0$J|W36Nh3Ot5H~bX)6E1gP&;XJ?egi zYWz(T<`E0^I^TwCF!Cd3t*Fy!IoE7iim(3OwYYWXs!6$H0)BmSAHMk3&A9cVMRf~h z#L2URlU<)famOM|LxUuVC^-%?nH&m*VyOB;1kdv^md#--lWj<)bsR$vrJlTz(+!Um zC)B_C!~F5bo0ex%myz2q?zx0gowtgQQ?K)F*mA4pyPwGx=6${sSe#bzr*GVWPrYf! zoHEa*BH(wfS%J^rwGrD^)Yh&zZhpSH2vCKksHOYw7^_Sx^`}4TEZ8U>LbvoYy&M|7w?^GMk zbxMsDWWWe*Ei2ADOmo2SSg#W#?g8cG&V*l8`cW zq|>PhQ3%d?U0Uk^APNG~{fnkOrcvjl`%Xgewf_IpjFD@$3PI7{){F_nNi$Mg>(Tda zCX&GL+RIkqT{moksmALm@6klOmn2do#}I z)us2x(_rf{a6u4|PK8A(aA$vsvqiB<{>O{nCtLgOdsW=S)@0nNJaz_;9ID>EwH`9cKx|`a ziUL(r0S*L$0On8nT8bqHj_aal*?FL19`difI=1`94XNqN;vTamBPZFoJnkDei+)4I zsZ4x*(RQz2j2}L6w9#qR#IimeZ@Xq4UVX{RwkEC2WZhy7AH8`Ej*b-Zou|&>fdgZ8 zeUZ+E?#7d7q^k;KSwXSfM#<20KwtDK*w9IS&vt4Ujb3*ycq5{tNK-Z z@Yh%3omVc$Po5jbkM<7ZOg4I7xuy1zSmx!p9tx!rR8>RDGyx72OGOll4mjr!7(;r= za*)vj<(7BHa?fT#ipj?I-n+AR+f9$hHD+zwb+sqHeN~fLRHs6WAA|`pb2;r)Nx-{q z*o4pC{cIf5o5to9y}0X&^KspU%Q|Z1u0~1~@VZL}apxt2_~lC(+`V@gdyZK(%V~{s zUiM%t^C5wu$1o5e?40Vj?nFaGS(acJCWr?xKlr(}Nk7$tAnLaRXq}M{KmF)=koC@8 zUS<$UgWYoG^~~S4YZab3I*k9^d#aJC0RRL>xN6H1yz%n2*tV*Jw~aMG1nfS)2fNSj zLAL1Ok%JjL_+kdnoTzT_ieJPM>v%X0>JN{NBM1USV#rz+f*=5apvV$rO$QT2Fy95q zDvUq)0)*x3BHpF7kfQI3bG)iXE-OLToX3G^Et7^U51ZzBo)O`rcU+8KL&1Oi;-yH= zr}azIc=g5S;T7ALqu=cO)udk1s)$!!IDl7PI51)G&m6a~?^GV=D&!*c70!YXfH8uh z>#(eRBnfHX_fZ&^UN%$EL;;)!@VSqme-7!E#XYgf#U`s0tQc>0e&9JH%X$1l&K?U=WFUaUI|GO0pCY9Z%#B-NGh|g>s1t= zu(BDLk!Ri}6hr6ytVuK&OZcINm0WIJtBDwhv|X>WFB$-(GznL2UW%(W*H-k9C>?kT%En7#8?)&Up*SjD4B(+ShMU)+W?9xY=mTrxxKXR< zH>5ekVRKP$HhFtouFk$_35_G2w+?lKNXFRab~fh!+xNDC;i@yP=e33v-B~fV64CH0tlLG866;QQZ4*Lu0fYCSMTS zQ1d@cU3DHGCrU!hSdA@{65_+W`c?oy(FxlRSNfWjB?&z#6J~_Q3sWiV`(@#EW^|?O>V#-}k^dhi%z#-0APbcV1CEJDxip|n|{Sc0ahuJX^8V1VM079OKMsZxg$v(DxXoEXsNA97_A*JMZ?lR{xVpq54N2L5rv+0L4e~p$YgV{@&&lA z2U(IJOEL<@B1%qm*)H7-g*Fsf0>#{gr4M~FX%|lwc z8Y}+n+o0Y-urp6^2%Tsh}!Iu>H9`S5VV?TzO%@~+*ktC9et&b;x&@z#E%rK_;`_x=hT9EIX| zCzV1?x$Fc$Rb-^oX|NemWuE6j-4M&px7AQVleRTF$lQ)MqK<8cR0~N$Om`wJpPog{ zdG!KRQ4o+ynb0*2RN+13oI_q8iw~;}P{T6Ka~nDL*EBkKJE=E}<|PR+9f3c3rsivj z2)eEzoifXzvMGoXJhKl_b*O!dAg`WJF`#qdoEol^ozuvPSQj2*CW#U&ucgarLUVD? z9IN@-v}r(+GxYhcR6VbGsb`CdXdN!zI3FC?!ui>TO5!X2B{}B; zK>dvj+-{=vMN5pl-T0$t0RX0{&zq~xIY-GUg&j~`7uj4EcD?|B!!&f5h7NJ*8l*q{ zJ;>L;p+&QA3anUE8&YSgXbJgzehC5Hmpw3rBGt!7y|X08(}6@BSo&m0hDIJ|~>B9cVy6Vy@+`Yh&c&L^5(a$$D!yyfhv%*W_aKu|L8rfnQ#jrU=u%g zF0$NjMJphp)zPQa84yCfw|W@1+*lj>CDf06{uTg0u{8OGD~cjCZFU{`eDclK!wbjA z0kEQ}M0UPaUg`pLrC7vF>h-XD0moP&Nr-7D+Sbb<^e=($`(eAI^5d$aLRD%Hix!@K z2>!W~&6#8y;G9L?vR5{8;$6Rz1HhtGlyiCFd}}8pi0HfX{Q!Vsu>{}qkS`SA`vG)K zgIa?!jIL=gR0W0a{#~=D+e#uk-{v^9cK>!A00#6VjMj~$U-LFd%T~kleQ<>5@@y^# zJD-Q5$f4dFRsQG-j6szp$g%`)&jaB8g4vnHw~}+tB>=IuX=xWxvfdISZ$Bi;=)L22 z0RWbrhrk5LvV@Z3B9qO*aa?Gc3SCoXWyYzB5_Vz?eDKT={KNa&@hij+$HtM7kx26B zvy8l0ES`rhPlOpKNr>rQ%)0OGo{u%lzUQUoZJ0h z?Wa3b1pojQhDk(0RB7e3n+a)Jw7!J1_dK4rAhzlNuqaY$YjP&<1emHr-8$J&H%y3` z?oH=B6p;Wz^Eb+JPgC*F9BJk>TMG9n(w2R;krOQl&pHroB~OY}ItO{pmYT2CbggoG ztU6m}bvTinZ#(DsQnN&jE;`>*88$q zMjl|{Y}bMM<(WO7BaHX@?j&0asiIi7 zg6k|JC&Gf+t^-le<%#pH-EiMS;hCS$dyT2<(?V!gz5vJdVCV))egL*%C&*}6?6jlc zRKN3W_I914t7V^NvM7;f?n?5%ycd3Ec+Teq#vn@Jd&@aT&a&Y+4s=aH;QPqua!@ba z-Ky!flDg03(<~sD%Pj^lI}XvsM2eLsC8zDh_mKVf&(42I5TI0YAWI^0whiA8ATS0$ z2v8^#!2#$OFQ~102-Pp_IBg|oj4i11H~8D?VI&=)FlmV((WExT| zm5|Bh;QIl9NyFy=q$Mls3c+;`d|f7!sY{w|nvoL)3+g-$MD1{zoXOh>&y4^GGuTpQ zk+L|Y!d2r8#>$>1mHtLEjqc@#`rmEA5Qs%;&$1~sk@CJ+= z3qveoCiRw_x_*F6(lV)S2z`U#oWu7f-viD=lh;%Qz3KF3|VuTH(Gtw53x(@ykDuLls8m)c{)U?mGV%YtR+!_v~gM-T*H zjG(EN3sB6#r6_#=A6hx>78BHLYFcD4nxZ9N>gjB{R79rdJ<2h{%axRY0ErBb%0g?aKTk$C%! zyh$P+k+$neU$pi@45>>h=bl%}atjUIfGCtd(gc7BfDuXiuq)u6u&b8qCXAd@2dv~` zbxrLkL~*>GOA=z*jzEAYRM!+GA{e>`&+}nfHpVhJjErXCUvLFTs6QF1Ti`W%*eCx2 z9Bn_7bI$?EM(pFJwXiRm<5k|~Rbo6LW0bs40n5F~LztZ^|pe)nX z)R_6k0DyBY130g#6RHKF{)(|$AOQV!Hd=7~0NF$#rmc{yK~k#ct^0Enswis~kn~eU z_>OX)gn3~AP%7otpaZnlNr`_IA7>yDkLW%W4N?u;^|>&v`i&ST(~+pQZC_aJA_f4y zFSLED-fWVR)9!=mX;9!nlIwr(*S#=gfRMq)bcDx1cce*v1XjyN`cDYWw2e3AOn@0$=eGtC|BG%5f~@VVdxrCDPwxV z%M7IRw?J6H_2e_y$~m9cnH8?&papN_iQ}z1QC{;-V9_!JiaGI^B#7uqry)y~cW08U zRL+=Lm&|z5fsuOUZ$enK9J!nY$C=z+1wjBm zn0$wbfS!RxkbD>JqxaN(9}esX(0$+R!TgzTjIj==K5GFYBlK$ZZP}BAn9hJC1wFUC z6C7b1q_J!cIm<>iYhmi*Ynmwtz6&1s2u>cV`#ubKiGc1?ny3;+V-&Cj?^z#bAcFHP zIhS_^saM)~s&+3cL2Mi#sb zJnQ2mVYKc==ox^xq;lpp5n#-aZKep`^#C}{5pHZcX2!r)&k`mD{5uT4Y!?q&KQ>?v3IEAuH2Mlv&>rNSD>$L4^X020=G&*8x6{Ofv&IZzbp8XPYr@G#RL5yWVzq zfT1saeAdH?EJ0PK$HYAjlw=*!_WGM021KKVVY~pK8@F$Bws2(t{YNWjQWJ!e%@{UH z)?4CuYd`Lp<8Tf=JL~bl4_$AL>%sATxQ>flHXE+u5yT=G^GAuu0pVZ_({43`g+ifX z2PCE&#`{3*4kD^9gV{3pk!Fk<$?=xRK(!sQe-NxfUAgOf7#+*NvTay73%PtAoO8&l zHb=UT=TX>ck@K!Rmvin_45cvu&~^Pg9P|kQ&5=v38=)!Rq|vtPNkUA!Az4NG=6BS5 zy*GS1(tQL$7y|$fbmh4ma}=vgQELrO5fg3#;V;nM^uB;|{;OsTtV^u!zG#jYAXn_h zBih2E|E+%rb@PszuFZV+9}!q%b>BnNv{3+HygQw5m_zez;uEi#=2taMdr;TSk8sd! z07hCiwdrIy=f|2gc$9Pbxx~ZXc1TvS>|_51p=VLmYu(dFaQaVw3*0T$bBhuYdNgpfSsK4S*uvZWz8^*?-LVt0Qg1Ir!@;2;hdjn*62~r<->`Gy(3_$J_zalnyxK8 z`zX%+!$<2GeqvG6b$vg8+EqV01&)+sS+g7xbM9R=O?yexjjK5Lp8%L&E;Cm6kZGDj z0P6Z0u9avllalRvCy;;Qzu+7@Q1kVdx`N`J-gjsHVy(vht2oQnI)BF$s+%v}z6so6y5T9NzK|!|~IWFRyPs{VI zFP;QIGtI9Eey|h3Q?X5J3Pk0E1lBAgkD&FIB*e58_tX)TUfcr!VHzt4jKYuZd>u~5 z@kfWMUc*7tR&vf*S8mq<$b~}TqNxwmZR7x;q|^H~-MAbae~p;Ekeq^XFK1JXJd*x; zk`U8Y3VZGcIEN&O5N0%65Ck@_s3QRQ+3H3P;?q`gO|$l)YvrK)Y3K4tMh*Z(RMJiJ z4?yfHj##%g<#(hxVYIX+P7@cXg(M-Sy*S6i+$gDnaHAkFsLK3jb7D0#P2_yqN=`Ir zp+(N-_@Q`=d>mcZAJKK=(sHP+;lnEn%G-7Dru=~kKz}6XTXHUM7w+jWH>%RsTolDQ zRa?hlHN@6Ar&$^X)V1lYnC5(I*vJ8Zh>C`h`gp)`85%sR`xMra6G=@=h=~>}PmH`> zP}#VtLI)Lr37{(5^;)vzz-HHNaNeCpPQWHUJe(f?ITj-y$285SHQm?^j*lRs>Lp`r z7ywjNJ&7h|9VOxs-37^^vzX7JrOt!7kIqapz_jX(G&$$9&SSiL(_2|lmUmA45clXr zsEGt&Roe2U58M1u8ND6)pQRAHp|Ezrz=GrLt0_v;e9C3O!F(AA8Z20=TUw8J)Y7! zPRE4Nk~4YxP%pR)!~}Sr2S1qo5t_P^OQHx_mL|^c(m-uSjtVPzZ*T7?fM~_(ZD%s` zt*J&nPCA_))=l$+Aa)hNADMGnGs;`3Nnx}BBZ3T+ofvt$5c&q8ZMy;-K&d#pZfR;4 z6@5I_b=(&x)%ad>UimCQ-RXP-u+p~eWk8FJd>mcZAJL7}6^!FX0`|>(o-k9Tl{IH2 zPbDF=Zo??IA}%`atkv8v_ec{2VIo<^_siE*Sotf#=c=^qUI7UJ*a@`Q$j4Dl^FCEK zF5%$s2Qa18MKE2cf;T5t9;Gi@$qkSzwy@$hVH&CH?tr*>1ptnGeln!ZfeE7*$Ft!$ zM^N^}b6#VBhE+Clj-XpT>;QtxfHoO95PHuIBlUNhZmb32LjcZj(6szRYSNipWQ3kN z`=S9!HCj6%Q9|!+zXJepJr5-(d@pzqOh_`17pwSF9wWczOvQ>u&VsJpu7e@$k=8aN zABTwYx^8|>E0#7Au`f+~uEP{!k}Z3CNx$apkXM9l0`i3-f?#sR4hjG7`ID=+I})WQ z+9Y20X1##}mvPRi?M6Nh4Gd&;U4L}yW3uBkEq6GQ274}9$=eBuG6vrBX#injjGfO< z3!i!AZTr+Mx_9but;1JLa8IRDXE9Mv(RK8fO4)TCW8{^ffq^WVBq%wM^hN7R^h>UV zaph|OgxmIFY0}&7x#b=Al*QdUdjj06VFwmq?hgd-+S+mifpA$z8#w@Yez2)r{1U6N zCo)jo%i{O`8Ca?hKxpXWa2~+*d`Qxyy>j1!d**1>F=>vK8~})T*KXMnp!1D9olXxK zM(X35o?l&d(8Y32PuduFFGBBPEPBtUDn94BE(AeDf6`GbSOL)5yCxhaDi= z)$v9?4$+{c>*nV)-B`y#?*XWxE-R7r*OP>pjv;mJ?JzFCdDi14rv%Plj z;~cQ^1u(`Yvfm1O9t5u*N}F>f4;bsVmHZS4pYa2}RX5FRyUxhRAtGPbQ~$0TsmnQN zCkX$BIz%g?YE-e@c}Kxi9jS6&dnH`Q1vp3P#i!>VXuc2{ z0Nz>677lapPcuK*tQ+P|T{l0MPN(Nw*cOzLk3&Rx!!Z6)H_VGb>~ra9f!PnGx~da;Q2nX*=$7}WvWt<#KGs)h~h-gQ;QXv zIq)12en1rbP}9;6MIC3s8~Hf>{rwpLUj*>QLLqxK=j`3Rx^NeOx|Z`q2CDPm#XL9< zAZiA9E;mt}G8LhUcm#3GYvhcveS8l2shD}3IKEAy|7}(6c`=Rw7vy%m8k&}VP}j}3 z?MUm(-f-#S&+R%teOi%ft36E;Vmc2}RFK&VR?0q231XDBw#XRJ7Tj3nqH?gXlSG;EaF=+mkoQQbdwq5|Rqwxvz zLj>H%3HNDQ;hu6MhoJZ{?~!Cg&oI6iqp39i40U{ zLYf)=s~SKtkHHW86;6KSb_B&d^oy^7yn6He160|rhnHXWC{E~IoOXGV?WU} z?MS_2G(uwJ6?olcE58lk+njUuy{C@eaqx8M{RhrimmfG&kc;Jn7*naP+hbpT)-&-2<&buPdkO+U_Ix_6MKkxW!Ohs7U?)fFmhEyHBcZOMTf^H&p{hd%YTwL{a9MxCy zfatk7JnThq{E`#DpKz5}0QV_|@emQsYO~ZS zBt{+sxm<2gB)XXsy@rF|L_oUws}hkyOM}s#W{8mum#C`6AeNR90$tnjh-M1 zo>0})lbz)4ZZ*jVsRJ1q8R^k9aa#}w7ZB$cf@lZ8FF_5l+?Nrf06j+t_Hj;!IMH*0 zAna2V<)wwV8S`Wf{02=`GwtId}!Uf?VIDejl_A`$C z0nzh%vG_t+t~;Ry5+h##l+XF=DF`+M#5Vx68o)9JEa$)qbncgc58yPwkATxLFdPT? zQO?;B!T0wosnnrv3RQI~iIKky;GAovQg#LBw2X6h9>52PvtCZThdA%$V7(l?mw;Y? zdI7EgFsBTm0Z=Op?EtXL|F;0{0*nKE41_TR7$)K)0ceysMu=!607e+|hXCoQs;Vc6 eDCtZ$Uf)nHw`rfOf)hy004lgq$sBe0031005|{&66}`)3Y|IF2ZEc7k~RwL z<&W|u3ich#pT&7LA zUQ2TRu6mRmW{LbNn>=fk(p(TeYiVnHtP&Ip!NJp{L3TDF`gYhd7M{ld5Q*9`L=u76 zVgY9Wd~q+;UyoC50sHMV;Gx%aU_4DP4hY;s0>`bmVT|Ig^u7t_Z_-469B0t8MyLL| ziQ+J6$vp!N&EEc!fHO^@Dpdgx;J~#=0g}YDP?FYQbD6?9JbXZX9 z$Wzj2#Y}O_GVb=TUZtVYI1{Qg@w(s#f9m2_4MlJP#4PAe*$4ZNCodm;5At;AcQ&KB zk+y-*5O)JSoE_KcgM*l)z3^-LomB~Cg%Aec(H?8FJMLvg#@#+}uoMcQVuBC=Q%?zq z<$C9PB<++^k?X!<;lOs)yzIt}U$nGcOooGzLJWLR7HH2(nmie8%ZbXpSTOnX{5CQI z1fyLF8n=?@2@PsKieJx=301a%XvJ$$L1w78m-is&xgXc-MqItI!zrQ9eX+=G*!LWa z^t$0-;RvCd5Mj(uhHvn+uK@ti%RIg}Ni|?Ge{nRnC5}S!uqg}Y4HeT3ts8K&wt7LX za*rMk8g=yn<^|D?y(+EHiIa8>gx|~BK!AH2Cu6i+KsV;3BTn3j(su1RpBVpR{^IWS;t(4 zP2QBCA%S?lieXs0N1`do9qhj*C6I<(C-zo^3wH{?(=>mo)^(879*>5CIV1acsxLOA z36-SY@FKCfFi=-)Fx$bvZ!vtQIr`n?nGm=0x7Fv%kF4GfikLWL#mLtVnN9I}4|u_o zz^JE6rhaFVmO9V`dPl-H6XHBcy*9RoDD^Fw57c}r#KK<}o(1Gng0PC!;WS{H!()e# zw)nqWYX7)+-X6bK*!@}XSVdwxvJuBR9DD#*?f?3rva;(8UFBYj0Bsi>t`b$x@TY}c zWv2C7zV~NM1y{vNlDJ-gCCvZ|W}S@h*=e&8-YZtOWuQH3DTm68j7VlkavD?sU*+0l z;pD?}u1gRI1|dC0c&~B0(emjx`IyP4N=sLg&1&IhZulibqLy}^wXrTdm0Z1YHz`#IB+YnDjppbvku|jI4Va_ z^p&K00r%ZucrylwE^|zkd!^7>&~;1syJ$jrYfXF|OtSd@>7MYx8es4;kEgi~NsZ8E z^b2g9A~ojb=sb$H)`Sn-M?=M&!Cj@Y&BV@s#@Jwcp2y?mkJqHl9_g*;6jqXC4-pkO zRy)0uUC?IYgVMS?I(EfMVZ%dqn^NOT5#fh-U5Ed1DoIi$!g)pVWX{2^Q4;d;8nTl1 zCXq^7*Ow{g1lz&}Go(1mLA*~o^86Kem{h@{WCOvUYN&j{GH<1lnsw%&p=oraOP?^z zN^-)#Vp{Ml4m?h)Dt&JQ*`BJav|uBVL@h^)KtQ$nCdUfD(m456s}vpwZrPus;e&qP zZ*6-aqV*-%gw`H%6RSwaR*LKKN(mX%gbu#uq5yECP-LQ5ZWyhs=x1zo=Mjr-QHtX# z4pg3dxs0?TO0SLCJ}fles`g(i1AYYBmnsw{*A#`d9+9ClTIYq1?E>Dj}r8SfBkubOMesbQYoMhAuQ2bC?G;ap@ z(`cqI;IIPbK!0PO!R879Of5naqXw-q0r}iV?ComQG z%RfYu%p^VHP%!bO7Upl$<*wmK#-8UjzjK4wSHQN*HIC@1j)Z~=v?#PFa8dmbAf95@ zgZ`!mN+=+^z7y)l*(t5t z7NVx=-WG~_Di8kqy6ktV+%k3U!L|n6nD}5@qd%@8QLy#VZm97pVf|pl84-qrn=iZ; zJgxoMzK$B;vMY7fA+>cBXjiUKe2r0OZ9nA9eO?`Sgu+{F*~85NDfW4#q9>4-(jq7+ z(-*S&DC2gGztWhXSUka%GXh;~>;yf4-n8eawC1_h0}Cy(alC%m4S>iM`^{r79TiAkWVw_zM%Y#oMNBs z1+dS^tZ|zz5oycI^Wl+#h95B|O9kCkWyQ#({~4Y>s2C8gTW`pk?Rt7aT#uNMhBXQ# z0X2V|Ii!P&r5#f5(I{+ybdco@NQwcu)Zl(mGgj7v0&l8%N#Ger`YYaoNSdV4#rYSt8t zmW~I07~QL$Ww*Hl+T0l^D=Ic<=nziZ?EEE$yq%_quJndYph57!!e{R5>o_h+>mo8T zWvc9C5mniG+S732DfhM2p>|oVlGg`I^RFyckJeot;oV-5wdo4m!pTU^ zwZUf&%>@uN$Ist_i<}TG^L?lLR3F zS{W+W?+nx{KYsRuM3{HC5Ca{~4U{Wg8IAs=;%O2+9@iwBS}6idIj=X(I%~4}bW^U~ z-t=Y0@U+6gk#@Z;o`AIYuiSE+2*2thIQr|0gaamH$T! zR2=YH{l9S@q9kGNl0WoZ?9e5XCMt_ZeZ;>JzA!n$DZX~2(K1d|&bqv@JUY0z)Jz#2 zJ6_YAFWuk%r0R>%h>M~T38OQ38Pu_D2_T0#cvmMq=cNdzgw*7S^m2~xYofR^C^lti zIy!l_ta3JaRq=utUqCIY_MS|}*9OWQ8pO(%IR}(MFqFafr3*B-;skqE&5xwtwxv4u z)jH@lBCh0r8~xpy?ep_|y{tfLhJW9JgI8vhuHdM~@yQ-=di&oXS1|RTIHE7&ox$0_ zMpZoECP@{xDriI;tN*Y@sY8h9E2kj0VE=}B0o=XlxIs)tu34>oP}~%| zJrSJrjJ8b%8Z{huU%jKQ#rVPmTc{`vY!ahi62|}GOnb=vOpw98!cjn>Nlqqxc^4e_ zSjn(Id)-#%xANT9{TvU|dAn?FxaBgp3VyL|2qjb!Rf@iVj_6x(FTR&GHw5Bj=eNHD z3RFhr<+q2lQ+|k>yC4dl`!CGmLAg1|eP)7f2?W(?sfm8j;Gw1+Vl6q>myi<&z3EOk z(?}OtNd~r!KjbRdq-vqFvageGe^s%!m9dcZcVLl}fJ!lD%G0K}*VkkBpmCVJ33kaN zq-Q*DoUE@c+vq2R0sg@z+aKh>Vn%}G>hm)`gbyoRMq$8)Pczf`@z6|q*nXL6-)9x} zoI*xxNHO69noJ!AsVpwsZySOc{S4f=fkDUPK|pN_MPex*WGoIj8?GdN%dfrV7CXEn z?;qUaV-r^fThTKvU=Gy7L`u=ZF|j^sT7FH3ky)z6|*+~2y_p#{`ZJ$(2F1S&I^N+##Hd6EZh_7@ag z9tb}&c%eC>D^@)BP0#bVn&ddR<_ReJ85ua!T*p;V40;eLN%28at7)Iq_ad^OgQnQL zk6Pf7vU}d%CCiVj)pXh>DAF*yot~X?+2qY4J#a??o82>U4s!>z+8aDEc3C2P%iw_~ zt%zCy?&AWFN)UUsHZG?52sy@8qp}yuGl7M*EiOJ15^^d*W19wt?EDsx-oZ1V%_Ynu zILb0#A38ZX2&EzR!=fl=d8pk74`}gPn`q+$2QBk#Khu!z-(6I|%zs&sq~eI8C2vhd z@3AIINNVw*GS)X4m%JvAiRJRwgE^M2O#^(8%1m@1S-u{)IR+=Zco1Bt?9RgQC%s~_ z3~t2I?deH!uPKTe$GeaHICt3PjJF?uf_)l>ieMC2xXGP-;$U+@*{Y^`ffkgki##)) zgO~j7o>u_+yG^n2kM9@w`3APB0SAWfK0*8fff&#kg_EGOCaf;hb~E0Kv&YJOtB(y^ z3*lMvGunKD{Gl5AWhAaV&kAQwCZHnFF`OeLfXb)_p*!+r{$qKG<4K@$i78q1AA;b53%#Gz z66OTeSoLS-(l!uU$MW`y78$?{$Ab` zv(DaX2$=-3*A%NSZ}3rwNh^&LopzQ|wBn*lG5IDW;a~l=!psIit_|ledkCf#1)=q{#kVh!UwF-*f&qi^Ies>X*M} z#hvDea$=`H3ziw7&n*au0;(e?wNhlo1uI=xrlZIssfegH_6sKW{5oNt19PwYsHMsf z+qQMGXX<#c5{}m8%oygZ{CAoR1I~xm#xJDF^Gg!UXr)>LInOpju3hrlncbvT|Lv=Q zofFQK4JZl0ofpyHjKc$OidiUd@U{e^`xRd1H5}n!cIoIW3-FkOJB-%Zp5UC!tDgWj zUe~g+qLo_HyZl@yD^op>Q8F)I$Fsxz-jK}6nX)977=m2Ea=z5G_{_AFAST%zWsK3zxbs&Xk_M>@{K`3xV*| zRrtvsA}bM)6;rvBQhug!ko|~v7%H#9#TJCF#K%w9`Y`V{-u)rCPH#WW1XZ(_GPx83 zSG}~LJcLI@bN?mKzJx)}4V`x3^SilxXgc~!EBR<^TAlFzLMKoiXR=xxuKWp#&-M z=s0k{$(_G;aJ%e`mglh>YX1?x)W!x#88iVO!DB{q_?q~OzYUKGVQR%6a0W_kb~7<# zzL5c^@pVz6487oCKoBQ2%Td_R1eR8s#gBXF)k zgP1*(x16xxH*TQ<+DAaD&cz}PXRo*0#LuD5gQgfeyeP^ir?!B1KrOqgW{PVzL1}|i zBRe`4G}=sOpomxRp~&X`ySBEYW0sD_W8SD@tDU=JFtl)NJ|6}eUcZSVt{MdEKk=n} z-tGvu`zSl-+&jZKLgcsj)gs~6rDnL!YYNpdJuVmmKb_wC!c5Dd#~^;enlDyHF>lYH&F9@#QCFf^-vKuuC z>DJs=)zAL{*&JeS);yI#60of^B}g!d@AbW|xaEmOca@2$h5RQnqv zGddB?+n=iq_p-vhu^yo5MdBYmg#wL#&@kS;_9{kb{5RZ1c=-5V$Y^gAq;Q4ow#V_P zINlS^sB?@sVAK(G<#FwFJRF=B-y|*$M#YafORj9^*J`>|2RRO$f?sUemY2BgKPetFoRoVmW3a2@x| zRIl)j%8e}G{CORF; z1@6fhmo`oB92jmU!_JMt4C7L=0O8Hm>JvgK9lqw`o}G2?NN z_%?@og)=yk_}E{s48{CsmH{4t{u}%cUoAH+VurT@NBc14^Z zpb>N8OM6h@4|6>tl^OlcUAyf}(X~twM}BzN^YoY6vr&o^)E4Nhp{{y0XfLd8|D^fU z!&W`;Hom9UG-7((QbZO1+k!_$9Ig0d!}du!U7Wav-G$XhsX1PSk=hE%&Zgdp$4nN+ zYt8wegq4Pf(~Br1NX?;IZ@&G*a-S$vKbhlyj=V1)|K z=0npQ0}W2gK`QDUTo{6N-LQBEzUO*royku{f(w&3gp%G`=d8&dk*^e=yokRz(@I%b*azlUL87(rY8H%jr(9$Qe=tgwdusHs9=*yY@3EPbz^+3$393C)G zbQWvS7z<0H)-Hi1lvgjQTPT0{Y?M<&^klHE2|H~JG^{5*8rgFl9CRXh-H7VtmGi2N zkUfk=cciF<(vV>hd|E+^5oyoZsxK2jBtV}r z<0#v1F@KzYE6zH}o7&14af}lrjDRe>xL#7Y+9Qn)fI8hFryS-3?$Qs*VeAHogv@A90V$BV0ysVL6 z4txjwV9U@eBp2g;SfXho!b}!nV+&Nx#47S3le0f6Jn{KXv-P##=>?}E?8)rTQ}#qx z<5t(HuMu%+9b1?e!S4%#mgml z=8p)+$ct#sa@P7A^86}8#O;$N)02RqZET!3>Wxrc+McZ@;PJVV+8j#%WAWbU?c0Ey z$*qCH9CgTkssZ}N4|!7-8stZ_TnS8JA%L(q8Lu!}6Ww}ADe7puX9*>Gp1XT;fOnr} zs!q?Us!(>Q&o#>Nn$vKnM2%z169A_70LK1`bR3Ws%$ltKVpFIwB?KKH>N3T)Jv{@s z#dv)$3^dT>joSZ}npx`@*dqoQg;%{1y$`*9Y|{0)O%qt_4Ha`0MT%5e8KzV zN>u^>B=wu5zGy6;(*$+eaG567*=huD{=$MA`(5zr4CaF5$BCg@Q|#*=3Ac?18AN}N zS2*S?VwrUDCx`s_{nQmxO3CQw?~`+S@FwB zVSwqz*zWK$ZGUtfA99YR$BVzzH2D&8SGk_)5X=pnfcye2 zzZz7a0cXA5yG4oEI*K#sk%G~h+`oAihl$n3u6*tqrP$F2+s?X0dRvsP7kvAjmqoJdwdQibLa!mq*lqSsI4GOry1+T%zsasuqLTP79-EXd5;XyttSc- z0uE7!H}fxt2;mAWMUwUEsI4YKZS24{PDlgfgOUT{*jA`&j5LvvW?s4BFpte^(7uQ; zU>>#lNb}~K2I~VYI)u;)L)c;#r^lcQ$Mn!{75rGO;W z@62JGSGf{AOt>e)HmZWOlq;$2D~$}-U!ShAvXWolAPddeHa2mwT7-Y8!8(ofdERGe z*&-f}8o=ptBWM2f*Z=R}-zTg~t`6=4{(=_7Lrb=N4kM)K)?W!TO1k3WHGZvTceg@S zXFd|kW&BZwZj=Bi#`g&UTfZ~dj}s=W5+>s$Wvx=1D$i6Tbu9nWEf^KBx*~!Vdc-BJ zS+62{JW;u)`KU|#w6k5KF1%h%FjFjR&`xmprzj81${vY{|L?afH})}%Q`azQd-s^K z;9b4zuS@&l{3do9LV^mk?4h+us|@G$dMC!EIF9G(j9oz&X_g~|m0S}O=hTUK*egRP zDl8Iuyd9Tn*%_EPz8gQjI~4FEqh#esz*d`skKi))h zw`0LixFex=PXc^9T|K#1zk#rlQuML&g?G(4lR6bZ9mD_6orR!_zk$QZ#^bE{~> zfoOiZk2{Vc!^LwVoo{DjV@cf6@|I%%v$M==#PR`4vC8XOmQ%J z9Yo8A4e{xG$EQw;F12x`^tPxShz7CEQ%DTp;4m|hr`XIh2rNE2;RJ}EPWWYvneGC;f3B}t~!Uc z6k`X@Hez)#gwFz(6HOcSC8*?4G!kN1@!DHN?8;>GFs|kl@*s^yGnql7$HIZiD5dbp zv50w!grKz1!bSEZNRzhG2OZds@O_59fNnA2^LVC`hJKhOr0|eh9O+NN+TP~{V4*y^ zB-h;fdnn;Q3CZ=^L-^<5l$SZcq(= z0RH-C>nJd36nl_leXK_}{qBY0T)v8Z7;h!!W1@Y}13?TOSC7ym-XcYpW?Uw7-5xBt z=qXL!n`9+!7*>Mu(8p{5ShY+fTooE@t2foK{QZ3%9yz!rM8pfR;K(^LDrMSD0mbIT zKCht?{PkI9XWg%i_5B8Ubo74o_*9zl=lbqTZ;e7+ffo4O|LX-v&=Hh1apiD5lR&*H zOrjkmltOTv#)}+Ce3AZ0fCD6Mx)Y|NIY66LLSO4XHtT$V)tapj%`&VU-zBrn8OEZA z>_1}D1)dCzfyS(}IY zihq+XQb;MIOzxD_)#v6Azl)KtU}`rkPP}WPT8-HlQv7dBmUK>+U{o@8#0)!vx*t`Y zgojzXYZ7uFal0NZ@=D%TY1l%vDKAuW0rKq}R{1K<3hvuRIX|j7QJh}XyFU)bDHhm% zBrNn+GsQ?k;N*pp8K(LmfxpKjHB+p8BRWBz*|mp|(kmD>an2<5*}icifA5C~^zyA$Eg+^13t` z`||MIHBE{H4T`0LGUsmMlsJVo1@go}J>07Ow6Av# zUy*?FcdnxfN4h3|99UA6%ooPG`a8G%62`2#oj-}LHEkkQ=xHvqGuOJJL)QY5hJGN# z508#B@AmDwEYOI(9ICnBy~GMlfT-x7?IPI$lnz54xY-cyIqEF!wu z>H5)Qvr~TQXyG(Re|w3qT|1o=c%+iJt7kleSH*cc&G2YnWUTT0jm665mCNBX@=jQ^Y;wjf^pqe07mdJrl%)tGKkz?F}T8(%YO}u!u_U~ z^cJNB7+uEJSCHwa`YpyO@->J=$MJE%=RTd~_M5zHOb+rZ1H2zPh`-*YNk*+!i|yV& zEI;4GR%62HM}j*1;yS;Jc6x&XA9}abAPgG!K7nWXLH!C{mu4~ak(57_rWs4>h*D@5 zmYQXx9MPQ!gLK$D&-*++4zl5ZZ4E9^7c$;UNq#KDE-Bf-&xN=LP)_vr`tWp^QlQdXZW7q)s-f^AzhNx z0NkQ%pF298dJ>7%x#&Ldyk543x8okVwJ`#J-!#+}2Zq$m%xVinI6rT6iMFQFV!|wf z!stk_@Gur`w#(y9kSBvIL_~@6;laJL6~D{>f;hHH$I2UoPvGd76LUl)54X5-zh-)` z%7CygpZ52S4$7gLyI1_hiysP8JZ<+>CtNu}7~if- z=rHHdCQAvXxo19-wmBL|fIG0Wy4R4^Htcg>lD5ov0H;BR3KM*MzFJ>R`nPZ-X4zam zB*;)K`(5^VF?i_Hmy~Q32+nFX0Lj`xb zso$Egg^xrPrnksKgSE29{t*`}7WfjFEWXP7Z{4o5`%cGB%m zO&BNU!V;?+*wk#pzzpoJZ9mEU!uatzgLHhNiDB{f-(C?E<8&ScH-xbifuZ?UeH2Ex zuz#mY-?{2BNv%8h@m`>oVg0H)E{Mv zmTisdq=c#5SiMx!h7J>tO7U{s0EWiK;|{F6Zt#JbaGv)X@76|%b0!Q2Gl{F(?LAg@ zwOGWUH@;`*HT`Q>U{xCWbX<`Afuk^M5EwQRdtm zskwDgpI+=Nc{iYZCJ}cgcJHWQAuyPEu8{j`p|DWv=xYzh+4~-e7X*i!D{$a}zQ-|W zeb#}z3U3rU*zs_xK1Rq#7 zTMP`VEGK=foSA@wc3ox$#TZmSm`)#=Cy;c$G@P0B{FRR#Y*43yAN@;y4Zk8yW-UfG zP(mN*@8E=wtJje^QYoUk5X>Vs1B3 zhaE0tzvn==3YhqO-`>kKIuq&?K!L1ITvr)10@4@=cs z`JaFXKdBZ4GA*!{Nhw=!qpz@@P)4oli-{Fc(6Twnec2@%T44I~)BAWyq2_L}jhh4i z%4(wTiEBOPN1D+`O$D`yUkQ)9Z=4igX3^wq+8@vv5aZ7zJBigh?h#s_)M*P8e%D(F zJ9XTKK}757x!-N?j}3R+=$1w+_nu08JJwS7evEPDQAHoQ?q}l=7>K!H|oA-ah{4#*D4 z=du`fQ3!G7fj66u}i!aJx0&)4HN)vb6T4=zdw@z-lJe6^vgvm}z=u->q$M#2Hj7n7&-J==yXb(*Kk0RETFEh0nu*rIuKROBIU z)Uy;a|(n5+ zoES+?;Ax5e^AI%OtQ8nWG07eB8|Norf>-$93+K1%oU>k`XR+>-h0Ww|frYsboY3v+mOM^x-44Hmz{gxu?6%+I-Q00q zvDY(iJL*Wu3Z#}!)Zb^TipbRCFrcRwgp-9xYiob*k)%EgbquBA72C>SYd|6>ZUciZ z{`NWStoh*m`zDC1*MNBVcTB_1rV`3%O5xvFgW%QU9Tua4N&5o5%k!vE_%iUrQYWDa zDVDm+xvBc8&Di-#JJje|99Adto5BZBkTU|lxILJXTG0Y^Kk2CRp2$)0a=nrim?70a z9R0U%D6(7&PZ<)<1@pTgSlzYNJYuU>_MyS}l=bkX8=~2HhNa*M}He$}y=h*@u zKIzKDV#q>W*Cv-aVCZ}Z$R0jBLSP}2+g8!2x2=G1$o>OuKx=;TjkQLSetO%iGt(!q zWqxkI7K%d9)!#5gX!^C}JRE^`kW^yUm^mc?3zs&YJl*L>yX8_npb*{+=H8z*J zGkqC+&~A#y|9X(2Z_cH6dZ~zPQiMyp8rgG zH8(;IZQ2g8%;-wP)o=+^9?h*q=F-1 z-hDS#3(qrFuYOa|kLs#891bh^U?rP=m@AxZS5|0apTz?=cipQ%a6wa`u7#uw%K?PpZQNWja$V;sO! zQ#Yo<`T0>K8V6czh=tM)<8}t05djQ{f>!VvkK?E4cRaGJeK1~j{+sEkk$$7mpM!fn z6x_Qx?Z^ynC}H-<4B*X)<&LCym$`aQ84XN&Y5`9EW=ZpQc@#rNlAY7hX-NItoKn(>`_PBH%c2vP41ZZ;AVYz;IJ^n=nL1oT_=tNLG9u{ zC$BSZKxU4V#XGJ-du@Fb6>VWuQt#ic1!vOjUg+?bx)coD3GVV99d*n&xO;kl0+UFp zV;TX~Kg8S84E9mHExN1^w0DLnA{wdEteFuN6$*)`si}5aS}tCIXdG%)d!H4?ehU~azheR` zF8+7D<^cwKWD=InN1E?l3w@-;CRwQ?)p!%BD*q{C1g;AqeHju0gr905BTfJ$BF|1KK1V3~*g>!QYN2n0kOL zO5QvN4nz-l>itT%Sf6$X{z~-7m-zG{1oLMfXqmnuFhUNWvT0EPw+D%3vk@vl*U3{b z1*$P43B00pEdwDU5C5)ewMK@3yPk%(3{;C02jT8RZ+H7P(23k)W8#X8zI z(`8b>=h((Wvr3olj1kgMoz6No2@Q4ulOn)+rC$-@u}z*mkT$La7{Aa0vAXA_qTXCM zBcH#+dU#+rA&VXSIWmaNw=4Sz6~V#;k>GTrDFnfHi>7rR)>+hstIQrh(f7;8d^UmG zV;ddtq-0@8EY*HMA_HY?|Q2yCmBN- zMtp8;s!M}G#Kk}Fc~d<9e)bpBmJdczQyT^rZ=A>r6`sOSBydbBKFWRubXgm+1Ym&j zI5cI;A|GzaL!w6-*vY?rY2Bjb&nP1tbgMm)^RF$4d{8v{4;wH>7;*6P%luafUUKMp zLi}O(0YL>|obw6{>+;3)+?3K@&{iCY9W*D}!~jKA9I3qW2cJDuZevgcHG3l&caEDIsn7mB}^3Y8?}}j*g+ZzobQ^_KQ05nPX)Tpjqm!$CH|r zZy)iZyfU4S+aW70q`{ojDhMT68OwX9+Q8iOQKNbxuP|9e0S`K>J(r^o@pd9Zf-$3!5tQBzEbxx4*-}i zyTeGs`|xWP+n!p-9kB|qyOr>%`)yg+;7D&dWpTLKvZmf~6B2HmET7;L2VFmxKMIQl z;J{(9u2M@rN+!ZX=x-OoZS}qiQk_|XEbMwT+BZx$r?z!G8UN6tYlc_e+_ApKcE8i~ zr6O1;35%zN%ehriNr82cDzOI$s(2)v;mJJrRs_nCgXoSfDn2csZ_0uDcALK}Zx`j* zaWh~fp^m-ycSa56H+tQ((DW)ze3C8 zR>_NJZNz!Xx){l1O`6^j{CK#z9~sGvHwwd1-utxY1KoK2IQ;V^Ug4>mNiFP2q31xk z&sY&xN(;j#CX~z~?*KDzo=C%fW>GRz8gu$^-xC-;)bn$WN9AX~u~-ppxKO6#sZgg@ zey%TbsoiXc8QkK=N|FcW<6%Rmcqel!+EEWNa14BzKbG&HyW`Z`mb{S^R)c*LihV2d z?wE3cVkpcJHKs5m;kw_9hlg@@8IH$U#HNQmDmEPlT|WeJy4? zru2o~iz0Xi?S#&J&}KY09$u@P8}a*(V=X*qkrZjZ6tKwnT?O=lCiGU6D*WP3GV%di zz1z+)q}d!bd5l<=-GO6V%nhkIh~W0y%tn>;`N#}xDWujiVE~qz2jr3j2bcrAFS?hw zW-6>;lgMLmqfVVb2>`juY(z8|N zNRXD575G#z%7`3Q5LN>uYOTC36aR%bC>l+2`-mpLL)S6E2az27_6_@Y0KAsG#IaiM z;BTIbrX_<7hdHn1-1E4k9PCJZD~O#7hn0J2U^GyZtdXW;o9hWDXJ5WIS>w2(RfjM! z&I$BfHsa;UP=5U*tE5v@Wnt9%Wrz&$V=mB%F|*CIH1SL%q=zZ@yhHG@5J$Sh5uVm$ z1?doS&_uRCtr~Kho|*5Uw^xoe%}Xidd^U;RUh>{uA`}JpMCG*kT=9g z?1OJdGV`2_;jenqsMket@BhJ>>mb)xE`$lmU!Rx^L{T` za^`wn3z+6rS*1x)<|bnQ&2%T3QlYs>%cMeoUkmR#{6qnJz->hB<;<7bf zUGPsuVQXOY6g1raGOQA+R*J1!fv!1~m}JG59TR|cBm+Z&AoMq9{HZKJKO>U{Ap{r` z!dP>@DLQ{qyUxtzhWE%$zq7h%Q}CRC31b{p}QuO`Vl=CQqN1 zqmzs(5AzYROouJz6bTzb$`gs29LHB?!RoNr0}hR*3ixphZ+So3;Tib&pFgXx9Z8C< zfk(JTqJAPyJ6GHkh~-z3Rgb&-lVZ3#bRKQ=OvUzP4ZhGXb@8?Jzkb*A+%Nu=!kpm4 zjgx|b$Ylj-_*8m$Ay%r>5AX6mxG4c3hl6fF^T|u9LJ#oUMj&r?zNP3-Ct&{Dc2(R_ z;XBKgtfe-D;Hn0wU~$0H9jFK(=N*^q`*M$iG%PSi z2M4+b-3AhclaTLz1mo+u@S=a%>lO$bx|LG;3{(XU(B*+qrYMm42hhfj$TG#%2GiHw z{te?Y|G>2V{<)b~0I>2i{pF!<%wgi=h>*eW{c15>e8A!5)GvGcClxrId@qz$kciM@ zS>?GCfbb@-WG*Z(eyhgO?EE5^&g~utKutD{8`mPJm8xk@pWyD;4q}cDO)ZvLi!>uq zw2ZDMLV50MXw&N2Y=s1CNK$R?(dZf;ylCBT-Xg2Ndf(*qOAi!tU|ehSWx#ZFr4a9X zX4HfLMgTOjV~AZ&>D3`ne7^r0b8X{E`aP>WDBgppgwt`*#G96pdbY@ncku}Ah-HQ7 zZ4(+)v6dvnjL0geno8n(NUYd-;k%0_>#soOb1msD=?W`1pL-a5SmZ=X_nS6V#f4j5 z9PwV`HWL*Md3yydI^8g|Y5>`rluR?)br@YAB>6KAza`19h&%e-_hwiu`zeIt%-1w>7CYlrl=$ z%>b?^42zl=G_rC7|BM$#dYcxbDz=|td+n@_gG^L=ci91Le2pTao>&V|CMgyv+w)>tW{ixls2t*Z{WxI)v6P2 zasHdaQCq#U(50Ku|0u+6`cVf(N{%ZWuc%Jg`V;he4paSBcnrPj>)`}9Lq$;zrrNz< zD{*X={py5!?!c%OfJ^&v@w&4^=;i*W>B`Eb5zVf}^D1ir_C?O_!T`0t?oXsOHl^I# zWFT6V%w%f(pJ5NL{I?Lwnz|ywt{R82B6#vNiX@b2#d?=1kWzZ@6&1Tw*Pc7xN9@^b zGdQu8pCLi~cRii2n$F8GGC%}R^{;fdYzo@2SGL?b{9Vd(BVK!l84>Sx=EerMZrRAsN5^MpdOLFXn?WfN8&7m6rDTZS4!uCXsHStLgeS>oJwWSjz2L-`<|$?4 z89qgBUOj7&CDN(Ui^^cz_CYc!se9QT!cU0YBaKLKKPl9a!l>l)LnPL z@ZEgCzQKlK`z0P&#H;5=hpbgqa|1$49_*}&ViB*)wK(oA*|(kb&(Bk2|7}^IISx|F zG)CnV9k3H+m{$HoQu0HEylJv;VRv+X&n3#EGK>+VeSRWF>dYneKBONlg9ghA2$su* zo@a0qJKg8XQ6~P`6P8N$g$puy{=xITD9@^cjTAuZ0N-4IPa&Y16?jkc<@U@?S$|ll zCK+bYsPra5b2q=)1fip;JFrxZnA%FLxfpcuJ^Gz)-|SB_U(I<{l@~R>+*>Qz1g7{nX9XF+W*B`-liCsiL`EBnvBYdnWRtAbk(;p=`3)O3)|`BWt~g?shw3qYJ4|k1 zm=gSSrbJOO+6VUmrh8z{vkYqc==ZNc7~M797rKk7V))glY3HcgY-2A@o8S;nvzv^x zr}QaMJ0+~)1BRA%bL2sMm7&G9VA(|;wU!syw)~tiKGh|RX*>3JF(`nQXj%~dS+2;! z5}UHWTU~il3{_a+RT~>-fwH=NeL6nI3{1N^>88A=9d?NYAgzd25cEN`wH4UD*E4n0 z*4XHWx9tPojl*WRo%paS9Ud(?a@EnX|1=V38mqmB-I+7|P9!)4`83i!_1!*Nqhnew zff@qd+6xQ5%LZSf|36Fva2CI7iAm#l`EZ{i`a2*WH?$?1F!b()jLHaBOygd^ z>?q(9{l;ub-XX8HfJyo(KsgL(O-ag>cNvyDvhh}1R9B1B?3>StIg@%F;QT)I&Kq=E zRI!@!981uQNSKqCD_lQJ@%JpT_Ay+K2x~m&^4RD5|MdcRGEsL>RG`&@wa-KxI$N#0 z4u2VA8r#DHz(i2Vkt1NTO_F!@uh+ts@M)Z=1i2?;F0RTMyqPn@c8w)0P7THTzwkE| z&Jj9f2)*q0bw*kWA7_F%qd$X{?%mM(I43mIU<1X~7A$ z=Q?)x3k&>DyRl19MUbbvcQ8H`T=UlRD$MWIyjKrBsi`W4GMQQXMK>mu5D}i3`SSJ^ zc0oQgaAs>Xft3KtK(0}B$HS+6xJh3m)&5j9-T%)0V)wrRr49y&C&MbmpfkwbK6`UL zN0_2>$p4R~tBh)^>AJy#2X}`;(I7>GyGxpyg$UqZSso~`1j&3KTxr2kI!8#Lh`u|MSa(KN0Qh!<(aSC* zokYEcF-re7E!o#oyX=3L z84PuwtzDc>PJf@6H+`UZTTWJUat=KWN+b`MT(C|M;)YS%z2p$YW{$WTj2V2qR4qm~ zXR52vg$|jxjt@G*>UXf#*^8dM5`ou_?PS%4V%g)gOM&N)Q#*XbZj1pmvV1?G(-Jy* z;PChXaslMD8`r2QE9BjSm)beJMsu_@<4>ARa?XzOuiP!j<$V8D(PAp|J%Dr0mSOW@ ztCr#Nl$#E`cvR^w@?OQEYJw=igCi~>cvlmu<4F+w-n)`s-byLHn7&{W7QQj}zDG)y zL`nAR+xIba`EHg4f)?Y%yK@w>GN|KafL0e)1$>x2EZ~DGX1>kNjxwNI=pgiPCkz$e zDtmDsHKPnWu8eV~QIV1=LS)bBscdo+8|Z$ z^`F8A2i-*yQ;1MG&QoZlL46weB zD3WUL;=$6PZ{Ht#anyNqtrp7Q#309l&a#eezVEcP9GMqo-8m!z1|k|>6}w)wYW`du zwBR@Xsw5tj5BU8amTixwcZ+d8fM>ln^FL@yQjK@*Q?uH69a!mn(qwNMgJwORuV0FX z3VwBBaJiCNUE-@L$R#$KScjWhqbIv-xB=O)G~C1%#Eao2;1c11NKEyemT7?1fJXH1 z%5%v20&*Gt$lBGT?`GQ5N=eV zn0iXoc#S|wQn_S(5bJktaP3ap5s0PJSc2UOw$pnWycdWk8{u^c&KdjJ#+S-#J+&!S zlQ>hLq7V4Ch^AKjGppX$!XzrQxEj}!Mu)nOf_ZMv{nql~|r6@V{>&4WWQa1Saf2V8V$1;08X{Fp9 z{gG2iODhYmb{>Ec*#;y(ure=U!(_0v=C@BqbQujYPMGTeBsfAj_-{Mz=ZWV>Zk04p zdBewZIi79Xh{Qu`^e?m-ZG}-ML@`L->!-gyKKYu{N(>IJszj3=@SMu&PgP~qpyN4{tR;Dw~WXGNXfSIiak*aqcG+h*OaEd-`kNG z?`;RT!;Ulo$P8Y4s!K%j0D_l&D|f%iS*NA`-1AM< zSUQX$PxyOI?dA@BX&aZCk+QXe@EjUN^08v}r}u9#7Y}%>`f%-O{b|RQ*)3}g?}K=< zEO${3oO5jVcrC5PZh)Pv#aY48)&(qv3| z=5`?S-&NwCo}ilAo~qiO+We{Q(`Vk-KRS+nFISXRe5&eN(mR8nn3T21m9ojRQP@+} za9Y_JLAS$gqSMmqC03-b$3ucMps+5gCQ|xrT?L|c&#>H|OrSQs-T1wMU~(B;dEx6i z8;{ksBIiSjq|DzBA&~HP%Jc^9RwLybV=yaGwl(2t=61S8Nvkh2B?D%7nx;m<-SHY% zg!z5w@H!rn?+Rz^H6wp9PidoYKmcJJ9e0Z&RdqK!hK7-sXg1YU1|BpSAH{6)rGB$R zzmb5S2Nj)eDKjtYnanaik5rCw0cmQF->0lkhyep>wU>xD!{LZ;eDcz#f;GLjcPitR`7(0; z)XTi}Vvz?KS}mH5Qc#l2uINPDIth_;U6k0@g;P0*T!_g+MYtw1uGybckmf@Slx5Er z|1{6MV%1TNE}A3KK@p1MwjOZ8k4f=E9Q@amD=4)(x2r2q(S!WwKuo5}+~HpI>DpUv zsm>fV{C16F6DA%tqUQKe5S8na{aFsmSC5FNtr;5#@0bntoXpKN?YXb9Ey4;yoU_hibbe`0`- z6mUn73zA4h6u!yKgs*O8F0(>iC z<9?1y$eE(qM4$RQbGQHq?}yhb$~T+R zY`G{j3C$=nIh1=^jefnF;r>-$rVa|jJmIBs<{B1Mm4cHf3mBz$wV(ko(QK8Hx<?D61_KD|GM0nwm#L0F>g5FRqem1!-Cv{%Ph`y%^+ z2CXA8)bMQ$AiS4NP;XFF;ea_+Dg$Z~Q@@KrtFneuO-SP94|!9absqDT99RJ5PsM;H zNdv66m)jj!kiVM2qyV2y4-&Dx==UHrm8sw}Jq+i+Un9O%^jYpL(IfWTE~H*bu?Fp- z%xEH|Xz*7ftb=iKNiT5WT#T6FE0Jx6v7YOYKRP+|A1~IunCtUt2Y>7J;xhp=gV|`56P|_Svt8u3f;O{9b z{}4nSLWH;}fTgPiC!UittBjXs8J`>kWs>Ht5ZAJhGDV!PS7X|DTA$@s3TpM^PM?tY zA-PiZiK%2p<)Dbsa!$!^j^fWToqGlV*oXelZ;Eqk$ZB;CM4WBOtp|)K82)x5Tqd5; zf+KNeyUBGWCS6rrUR-6Q(ZrQ&zYH)3Nx_v19@>#l4>pAzjFSBJbP1 zDa)}u*030w=hob()ma7LcWN_2P1Zvrt}rI2UeDzOqSIhkr$>i;oPMUDlU6l+k|ZX8 znu%VWXk;OOlAADA6l;2+jKX`atSD*>Qz0y0(E!ViT05ekUP)Z(2ne<=F3mYP#;OD{ zPxFm>>OXm;XaR+hg>SfNf|EFNKs_8XJ$qSwao~@F zfRA5i+_(N|$!5kKrA@IhsK;pi8IiIS2TAZvqRLa{K@%2ucIq>e8ZKV|VYa3}3I-bO zLexVl%f%fwQxtTQs8yZ)^h;|;Z8A71WDdb_*BjpF^Z~LXZz=9}WIH;vaRz@sldX_A z|Mj)`viRwS9Jv=-YV(hj$DrEvAzD^8NVh$eehLEUDM*kGDP zKy~Sgv|d=-0=1mWJ5&r`Izr`uISLrZ;2;;CBsfWnaXj^Db%yv4K~-}>>hrIzX{h5F zn~#)X;ZY~LSh-R=7>w_Rpza)kG_AfAnBXI>wOQ4H16`-9LjVUjUR_tE%|Xu!tX zo$*#_&%^uI}~1FUoYdwt1>I~{Zz zcqTMQ=LbfTNCvRg8P(W6jws}QtHu*rA?i<}dX`7L^SoUmc|X`A5@kL>Na#^<{}7Gh zyqD~w5Wi{!Sii0P;q&$1-EkT>HJgEEQ)~<;J_bVb31CRYP8T3p1TPJi%*{FtBV>(V7*+1;%zR+W77 zP7nI~@=eO&#xlJ5s2|f81`q=G#G^|j@~C>T;qL?EnOO5BEyOOe5)pCWrqw|S&P}=PG(I{fln#;P zXZwniAF26WPM{vY7h)0TU+)Y$?B91^?Xy3h`Q#0R4GHg$4eC!EwQ!6yt)>MP)#>jq z(ubH2Z)1@<_jst}X5jFy1D;Tnjs^94IgCUwCT?(KFdVZw@Xu(4z6grO^aI;Xhl{)z zaDteI3kl(|#bk)3orJ0K_LS-1CqJjT!m!!r<;U^J&kADX2P<*tT3YW6=c8>7!O_K7 zSNOz5`EZ3#fB?`}!2oN0I}PO@G}UkkwoMdGm**_ueIKLv?4v@}t5-USjeFh*)?R*7 zcAjnP@V`ECr^ouJ^j(6RnRY{PWTQmCy#l%)W>kDPljfao(uM#5s)iljYp%wkdcDSL zHyD%<+wB2u1Hj9y@uHm%C=AR>_S?Dl3LcR?%^u2+Rn97&TB39L%bA6cF%K)wMNO;i zn6oz`Xzu3}*QrK*qPis*eE-i~G(PWQb4HC;W(qLJJ^4|`ZLd2Y{c)7 zQ9o6JL1o{>cH?B=nUIJiCy|4Aut?8(GO?MMD?4H2=mY0A5)KW$e}y`3CcoVhce`mn z>n>%dUi3KpiK^gL)hxLT0&RG068K&p!FDp>A^Y7aAI)~XD4h#0G%2UiMG-@$qdR=u z5P}Dg_DhjQocq)T%crK6UU|tg1v95@@p2egR@AB?@1tn+m!BKG7 z!@TDqy2!}BQ2a&UD0W!45sBTP$}7yJMfSHSxMgNNOla`{NLTbv8CI z0sP<8`TQ=|{P>Lkx-rJ>8@@J-m*qMNXu`KE>f|K#PRn7^8R^>R$$Pg@Hfz?t-I6ZA z@R8Q3KsEI0?E(Lme93wFQTl!~^=KwNcEaJY+Lt@d_f9|ZRV8Mqu($gRL4|d$&lMtN zBqc|8pQpVL$sqflM=MipoQI3Ua8qE0t4MVFQ4KvsgUQ9$U`vUXPc~ph@`OZ=)HLn; z+f?v0XF?6!pRYU0SAyoPx4;-*Qh?3025_$vdu@dUu5K>z=wx8@({qF8GpP{vh*1Ch z?mrM`7++khO72=`C6TDl7PXN8zOn1-0@+1uyg`tsVQsnF;sN0*Mm&+-+UrZ1!d~(n zq>D(hG<*9 zP|FkCy!P6LJUft$z$-1PiRLuC_T?>iCO4`~ymvq9ar z=(Xl2+@BvW3`fq>MZXdTmqueo`_$S^*=XLKqHCKP`V)1#Y$)E(e)Lfg-S}p=ZEyt* zZ4I$8TKW+*)BMjB&>7<>d`aqe{hKlZ65ivp;a$Sk23D@3v&ReEz>yLUC>@TH5eM~N z`L@2wO)vzqMwXBq(1C|dgs=?w;!Fe-pj&n+L2zLEFXeSqch!%aE3%~Bm~wQJ@ArGI zHiZFL5em8;+58?Sxs$FnjWx}Vraq0JS1Wh+gGJ#C3=5HyH;k|5_js0Gn(_i~1thP*DtbaOlM9v+JP#RN~n~qIuoa z@994^NAkTMziHi#8EU=dcq7YBzcrhfGqSLN^W{|FSqDt)T6|Z48qYbdcVobw%6CEt z!tAgD1}h3T9bTFDq3$~vxniMI1<#+ zv=+L|(s`!%ec&qFBT-cIw?u~#Mi>;svKUm?NO#R&6w102mefR2?IC~U_d^ik{ z0Q}!a)IWX7{L{v*@ihfeYKk_AFlFj?(Ck`h`-co-us$5kMbCFjp@_mCl~<)H60B%= z>4mDu{MC4l(`9c@UsEpqb31QxRS&^J5g#cm3mud-`>MKd-41xAIw)n_8ac&3Fd+KB zyTACKBI%Rd=u?^ii&(+;xJ&$q6$FQQcWMM5oD*M=l4#yN={H@Hvv!k(*8Da< zox?-8fPr8_fC+SaHZHr&BOjppevw^)Jqr;K!Ms0rvPtNO)Oyc`gApqS1gUX}@Rk2` zHuh2*cK$#F14z_Sv{LE-xF~%$>_DpCyI{RRA%l=tA~KWX7+6tjA7e^<^?ryE&KD75 z*(xt*Hm{_>x`${sF&*dh8EG>U)6lW90Wm_`Rc=Mn05Ud8%qHqZAnjL7lx%1Y&x<8x z=}8hFXqXBVrvQfS6d~EZKw^NDgD<^U>HP*#}07}$lWB{lw@R^;oy#}!94x0JP{6M%7M5qV(BxU-J# z)_NUNeF!*a^Py@ihq1Se@2~NF%O|o~R9Jw<{xo-`)Sc5cTfXv&J?h!33eUh2V6T&C z_SG8a)DPo)m41AiVWwnNJl&y!zYs#eHQXm-3RGyT5B?=Hqe)`cJK&N-kISJP%z4|A zP090GzTn}8_H)1v9@fXEtetQ%YlDU75Vw1$CTBG)*sz= z7rV+)SRpW#=Q$SjYGE7;5{6n6QrT9S##%_>*j^CA#Yb_&j~rMyMjSg6Y*OOB+fVK!kr49Ax)G2JCw$Bi;03>{k^*Vd-3(%pe2Q zf})nyoBl9ty0r(uA2sN^MqCwuVLhhXfrnT^nZE?V{gcs9cf28Pjby;70TvEm`i5E? zyx|kVWLBGN8_KTNR~L)D|G{e3iUS5D*~RwKQB3V(4@PeF1IXipWN_?8 zV1(sv!Fz@oO@bu+{`y?reJtk0?z=D4-=bCflv~a~zt+yPLcI@u;qP#XV(?P(4S1K5 z#ro8BopnC6dh0)$3cpv6*za|X@DRozT+EZFbWgEHFoQCNlRrYUO+??o0Xhn7*|Q)S z8Z;z?B-SCbF0H@w*zh{dv9&jmG#q6f)5ed+PssZAa*T<7o z2bLMa4^ZHq!2!J&AO=(wXDJ66tqB!NL^TgkYwy*lWrLGp4MQZ2I)1M!q&H&}y>Ab& zwxWq3n4^0DM)Ci)L=u$N6LfK@J0k2oP<6NbMTvu!BmX*pQ~^zu*uLS{XGcV&wXBI= zwv`Z*yJ|HOzK04>`FVxONQ+y^i(w#5-@D4Oa#X9E47c{)8Op>a@&8LuDp zh#Oa1PjF%G2)fE_V?Sa;aR4ziXp&BlaGW!Fz-SUseG__tqb#^l93uAdcPk`HW5#aj zjFiLQ6OZ;RkGipEw&{Rx&ITr6H4c#b?gm;04ff;pw_F2lLqN_GH8D90;O>SdSGW7>6#u^$pcl65N9V^GGT{C{ z+yPw{%z}qehSE4_VW=>*dTj1KL;xTfqfnKc!~}yLa}hv=gZ+n6OS%l1-z`S?(v(#U zv9wYH2s}J%(V^~p2CN~k#+l(BnEjN#%(ZA6llHC88>pFMmK061R%gYJ;JdEcT%=do zhyo*-#x+{Gwy5&7jf*Ct??O#II#+1%jxQb*6z}IZk!VhRUO|5MgGR>?h=CSa3+<(j zfN1mw^ede%aQr;cZe1hCyogFlow{^!FPvd3oZEu{wTn3q2TBz{^_X(F#^cD#p~r}{ zPl$x*0KC|D!`t@$(9J27XO%nI$KJGSj*Z`Y)21-;LDS07Y+t^ zWjm~5UTDCN&}HX(omQ;fJCE}D`EKKpuVaT}3rn-UoN<$}KX@Q09m)v`_FKd_{|#KK z#+JL5|M6fiHLlRq8fc{aW5Sg17+?ev-$`~v@OOTretkxnHhUXeL8P?f=!Ny;MSn)a zH?8ejOI@ldV{Rhrnyg^&2f`^f4rbcE58}Jk@ajjPr3}Q0=<`2h177z{G>|4$4*6lN z{$zCafe#(ss0;BUT2eT{w)&$#m^F3bSq@d<#Xup%i^`+*KxtA6beeOBOB<`*Y9Q46 zJX$Z6d_+8vK7tloBj=F`2vM3);mKBkQ6Z^sWGGMXY^l;4;2CQKPYKoOsj`G|6_;HCchHj< zF-y*cnf6FSKj|H}vKDnDEiquC{#}kFu0+8oF1bgnTASSW)7yqf(N9q5C28SWRP5-t*SM&&p=&4-2GvU(^OL_^ni2oe6hvs)lxx`H zX+JNXEAH)Ep$DTN-R;?#Xh8n)4^^>k4hMtC*ytn{ckh3jAd%afkxjm~=VBqct+|^k z=jE`_Kdr@NZso{_ygMOVP)3g2K~>n^HfQ0?2Fq~?-^baFA$arYeQZ?mPakRUTNctz zdYu`kFz7PefHbep9fR80Ax%eQ7>N(zjH6vHJ^h=q*h-je5In(sLmW1Fnv7leCNt|zGL)F zPrmtcBrsfP(GP>l|1w@o_hLVclQ=BWP6ol4+;ifJTxo(*n|Y8p7|QQNPLwn%i7#~y zj~xe1nAHq11x~nc5z$S7F-*g0wtu$6e56k-MoEJQ=*OX?p3zv1HaE zp!Rqz#b)?)PHz`SUceTwD#<}#3130ax!{!Gb;H~=F#>EGULjKg15S#@4j1WKp_#gX z)^!9Ye;&%nl^6gP_rN`x30w>LkdszRM#)d`BhG4;ByLHwWB@TAB5FZz{_bvncjY6c z05up!tC(4MD`>lWpvd{)Thw{mKO948PhY>!y z?We-p4VY-gxfjvYf-B*vZo@bG$v5K6NZ~vYps`3Ek&KoC6+^8uV|6f?|2fVj<@~th zVscm~iHUGt(W2QYV;SZ|{f%W&Ht;Fx^)Xp=GU9K?==PN!->9(Z%C=NKr%Y}jU4E?8 zjVkb8mPlcrlVs;h1;?U$e5$L~^ZKf`vj3J_Ge6wl%b_P+(eN+y@UqT*E8eXRPq=o* ziJfxuTc+5eUr+h{p0~vmr`%N;pqN|p@qQTIo+ka~A%J>%$uyY;D2_QW7*u`MclRPS zLW4scr^IsnrG)~eo+-!)zu1xU(zu;WO6k*qE$bwuhqLdJ{mM%8+w`?|izr(>m|{fN z6r22oV|005|6dn3E{bk}(_w^O()j4^%FeU6!G5#IelG}ih?x+Lk zo|^7nXS93XJb-#R?WyU%WD}bab+?>;^4-r|WrPV0$0_7Xp-gBAh&T{caU{y1-eAt& zyB9AHFVJr-9{MO+*bHBi`XUsc^PRaKBk2IH$4Oc;mjM7`;4r;d^yj^Uya|=t_e53- zcW_=QWl1SglnQulKaP5KqYEV4!I@)Te}-UTEu3DXdB7HP>fZE07eT&c(JS;*i7 znqEm0)aVk01WfAIEx23{glbd0>NxyDGIpHmADd4?4UOS6!zO>=rd1FHRJjOh1@BjJ zUkoHDmHLjnE?SQyoAf$ea9|$~I=6F`)`~)r(Fuuy!l=$qf)yA=z&I%3Dhmm{dJt*5 ziFy5@IB`FZeaKLt8w_Qr%S^KjDLR&~-hQQCe?hktXi)S&Akwy4GJIB3jQtr@Dli!s z7}zQ7bd1VujmP|~kY>ad2y9TH*~+Y^$d8KPgghRqKYw15xA56x%;I$5HRFHbl++k1qoa zPy#xp6xP3w?l1q0*{7}RktH3V3~ zw$=L~)2V2S$@J{%E?eFrI`{+x2^Mbu8q_RM5fNc*S|d3I0b1?J1s#W!xEL=Px?KG4 z5EsQI@%HOosgp{wI7WlF($!zN@z1su%9(LtGO)fjgHf{K;}0RLs7Z{8Y~B=Du756_ zoCu!#0kITy!k*G#AV$R0w~9w zn1%!35P+wVainZ|Uc3WTaw8p4QxJ4(w^Xmw{Yk8rjJ$j*er3kM-nuvzyiwrtsvK)T z_rCo@_i6V&)crcSr`5j}+VW$eSJ3w{5MNNIvIjMsL9OW62Y zW%QDUXh;P{ZzVHw`rcF9N#<*kxzeNOP1tNQAt3~w@DoG6A`Uoq!k>7)lFuP6F`8(Z z)8qi!EhdaJIfQ4@hIt1~^%lp5aw`2A=Km6Qx$}~90vLa-H2>ou&-jxLNj|u?`PyAa z1OQ3lO$2(yNqjt_dg?0#ii1>0qg@SrJyvojX!C!GCDMaIt$E>F5^%6V4+jhe%;pgO zHdsU>0Pa?`6`ilWe9^NX|4DxeCNYOJ4TiD4BDLTRwX7C*b&z~JUNSZN|p?Ox=1U}~kd^? zA$=iBdNe`MVMe?ZFt8ULhCyK>9dQ`U2Ego+2IwsW4cz$_?cV4k<#s$Oy`-Wz+BZ?q z(I0~8rn^xZ;To*6rMR#f9)VY}MJF6QiCmOR2RNVS7(Z#9x`1Sl-b2lpbfp@@JvT`58NkS-g-*LJL2{ z6w#2+WO=I9COO8)NCLLza_Py-6(!z38GpGajSbq}wfv<``Ph)QqIQN^`NHuH%cT@r zG=X!-#%5O8zJ0SU8{58kgunZb;Q7X9s(;V%Z&VJ~>&AWMKX2cEX$xLUx>qzFa#QCS zi}B*#&q|I8p+j+GcBy5 zohn|EhYYbO~X+qgch+&~9ba5hv<7i;tWPYBZDI zkKqED43;XqvAh|Wk`U$DWzJ)0xCC1;)0x(TQV(7`K2;f~4>aEPI3XmuW){cTqTs$a zs-eAb_5JhHr_00gS3l(SL2_@a`OBg<1ZeMP)SusJNz&~Fwbhwj%23HH_NsjQ6)}2G zM?Or978c1AL#>EgPf~@yE{zjxxk}8u4`xFTq>}h(>9)7sJS=1J3zY_hh?PX0!uy=K zu+@=u`s&$o$lAajPJ;8=AWt&Ke$9~hzJ@l^wGw+~Sp^ zx$d7lD~B0t41%f!rPWD?3Lq%)tld`q(?v}EwWcut1rQPsOJWBVZ-b8qk}x9)0h$v8 zyK}UNh3LqDR(#|=Dm(yQ;r$>^Tgz>RkPbKfJR=#$>+?XBPKQF|G z+`ErP-XT9%xmhIr4#JS`7wyxxOI_1bX)E+-5L=(G9ehuOzg%SN?*;9x)L^g z7HDMus9J*i_3LRMty2F8uPSgKJp^y%jKF~L7p2zLeUqm{BVM$R*7L8Y>EZvf@D!00 zFkBdgPX+OZdp$^-cit+mZa$Rc3nhmEduX!AskcZN8Z!A35*+nJ9iqOcHg6uhfRzEe zIY!=Itk7O1inMxf?CdUmh=e-NOm+AByakekyw{T8_>Hc%<)cM%6`T*Al1X8W=<@X6 z;sX!{^}SnN>6L>*)B13EU+ltsOw%JoeXlf*g;U~&R7h@m!_re7AEr>VPN-=9G+f{r?H_DuVMPtl1=O!cRxRK% zVb`^sy&;^#RQBd~;bU>+vvyiW35}d5Vz@X~9~!=8srxJefpF})Jpih%OE=bi2Zz*= zIU^GP>s?DPkKn+!yHV3lkII`O;ZwaAeONPa(=dAkhqRp0OSJKis6+7g67kgHB=M!) zi3rsdzW=)ffg`UhSt+#xVV?)cSn;%NSgL$a4@UP9MUFe0^nB#8pvOv5GcM+_c_1LF zVIi=JUyXz%;noBd1UtXS`^$XpKb_`l>+=>z<4_I*f6}zu=34{yV#w<^C{=G+D$yqQ zFer@1SClDsstQFuWhQl6`II%V)m)~64QI(==6LP&JL4Io>gSimYgTn{*?x~kf*Ukc zZe$FdRO!srwADrgR~Igkt7f+Q!?T=tWyMuS2?29w~^WkR%5cZ2pj; zcEZ=rpN+>h>_#?3weBWEqUlAdxa9Y@r0n_24f6;%SN^olY5#M7!cK!&PAiE&^j@`B zcsl$a|Nh|t96S|u@rzZ`66)+%q7SZJxgTjZ_?9FWv8xt$?RXc@Gkf65qpN{4i|@ED@$(07!+S$8CTnR4HxjgPs3h}Q%piQuS$;^ zuKN=((){n+{-P8{bKoG^w7NmJDcoPrvCpihxg>iAh`q}bSNuNSlpS%p_ZM++Yj5M! zodulZP}j*|%(gRNIqgW-K{LX}9ZdvnedcUkH_QY<{;^OB6$#To?3YB>zj@52DlIkf zHXJb@K_$7BN8~@VpXk-~G!IDL$)Z-Ttiet!e3V)LvKTe`(V(G;>a5#|VfWu^hkpm< zrzx!qA6Ko;r{jnFi)hAkC=m)+4XU#Y?=4O>}c_LA=?u>GR-f+4_1cf>K0G}^k({F!sZXH4Pwei?zd zIg8BF%7SvqUO%WMx1-a%1Q1c9`FA-?N$f)~PKC?aiYtz}7kQbMM2 z&Mu*kGKpaLXW;o>y~3^tZEw>T_<;ST2StD!bl#X!Ivf)3<_X z<5Ti}1R)eBn;*^C>_NbnfmqiJ$TVG1Ij|o9yI1k*MT0;cqLqX)q7H<|&Wqky>2G%} z=sb!iwfZO|mQr0BI;AC`G~YB;rLFcIZ-3FOZ{cgslHA4Dk|3OPd!2yf_UN9si@2<% z9JDyxoF*5nzwO^prwqAU986;}hqoP2TXKZ4&mcaOM#6U6b$n=EzIWhT>~?~UqE!(r zffzi+kU`N@4+*4NNOwwL`ew?*QJPhxu^0xaPsxHum-wr0s`6oiG;;yikf?IiX z*1ycMw;43QXZr7Xikxeao%JxS_J@AIKJRcxx2aI?D;yC@I61}&965&sh!ZviE8d+V z`Vok#;v%WV(N_FqBDSJEl%#Va52a@T`Vyr<2T3kC@3cw8Z^JfnKfoAiS``tZlU;D1 zqVmbA9m6*gIHCAO&-hlthR4gC)0mKW!zMziRyP95uMbRlelQYpnH%P5z&iqJMGjoH z2~_GO3@uuI`_o;It?PZ;sh*{5w3TQ)Xg*LFNud|I1scJT{Yg%gkLgMtZYL95O%|zq zj5+{J6Yx$dciP0DbFt_e@Bq=5X)7(E?4Z;HI+mlz2m&FE8Y6p zb#1ahNJM3y9U>aitA71&2NhvRLl0$Zy9enzbQRw_PV!xmI3H_)c<|IPE*7QaR=4B# zr!*4I$tK!}N>;~V!3F7z!WBRJ_n5Sqx1$ylA@%hMGV%5p1l!zZpLQoTHoYx)V7I$| z=(B{E^nAs0ar72#CDHToW|kVC{4y*^5be0%-W@oWnW?|vi#FCM`%WJ}ckb_uFS#lh zAkIH)8x;i5vR6UTvdCt7zSdXPtzg@fngz#%3H^%tucUBFfk^L9{_bU!JScSH{YiX1gToiBA|3f}TtI*>?riFWnAT3%BBt)zH9k%>Y+0aJ4=EqaDyrTyZ7mpZ7LGZ2 zHjN47L|$(+S;m6htNQ!1Vm_*iE~c(>FcZFU&(`sK$D)WSo8uRjpviIW$-jtP|8CH{ zirwCgFDlMlovOk`6ireCX%um}vh*~K&1>z*B#{u}_5uTkGF@<4a0IHOP1ge)KJkUi zB{Deih#;i?Guy-YGRYt35fa!KJTN#XLpobcKTj#(BeMQ+c>dd!{iu;I0x@8K3rB_q z#!87~2dm-V#})$9EX{3x0OspK_cZvr5+d1f(^~1zI7o0&5aumDuI?b_%t600EE7EQ z%2zpS+|vJeNvz%+8IqZ)YpwUcKE*)~(tK|vfV;1+>4`oQPdL&r_}+&NucnYN_W1%B zNqf6ney22>^5S}H=iJ-8t~!C z)Ap0|AcWXnJRXOtO+M@s&A!~K!rV{9VW<<$Fj^*xm8QbhGJ26jt?s;*HFBmga)C#j zIOr_*+rvskLKuS|vvWv8^@Mdu<)rxb(Nkpvv7#@RslwjuRi3EWX_RLGoYNZr0e2wsf=Uy+E}pR~X^T%bkVFAqhfGNaL|DFcX?p2p16Q@RgCXknuhQe*~zt zy}rZ$kKwVI(JTpib%j5;u5zzgwgrWq#MFiH>}hX;t*zx}fnyfqAHy@@5l65Wp4VF4 zHN<&gouS%&gzAmz=Fs^*#e(E=h5L(9!$(uGzwYRmnwJ88|L+ALDNB~gm`@muxxB{U zMhft^Ggh94@<;jdqU+)^+NWdmgOJvH&m+x&P3(YxoHMuut36OBQ{gJ9^9IiWH|E%N za#@M=`v89nf92_q^r$Imo~i1@uxpfI`z^$Yhp)!&x-bAB-W>ggs$6W_h=ClDqQ22> zD-4Iv+H>1CDaF9JA*|#geDyladfM?+3TYhHk>DdAKy*h4zHS(6q!@94g%9<{y^nm> zhOM3BpfZabT!U^GgKDAhWk{Y(#`_B%SpY~HCj|t%lVbMDY^dlyIGYoB#CfaL0e0ww zHx`LB5}U^@)7dkAakK+q?3Vsj$PF#Tl*K#-R|5A0J$H@_0~`AekntgSdOUHEWLK=t zD>vIhKb1=;BBzxj2g(GKZ}%R~SwO?*->3%K;S^BeMTytXaNxBFY2=GEoceEBsC)jk zkec~3;xPJMrvg0Qd2hU*1`EVxFU&H4mP{9gYMIS2fZ5@+PXld7E)rUqu|TnSN|YFjYz+8rIXg@vXjWfZjXFTF$Asxu5?RXdsv0mDMB0 zPI0mmVZICV*FQ_f(3t{5*46b@N#1fg?>j4ngHI)$9+{E^%Et4GU$NqNicv&CfGpLg zTWLOaZ(Yxyi7-kN-IhAo7l7EunU)RHcAzREMp`8qWASYAf)3a7An-gyal9TTAq1*CF|+Q!{CMMki4G#k z#LwgoGfFe$V@aYGGfn)YjF7qT+Hv1|z7NxK%C?pVK?uin;d$OTp+!|uK%sNBxOhGAU=)T+k!H$R$d)7$KV=;zA!)+r zRI)M;k*{A`FFnUh0f2D$1pLE$D!P^s#G09>)Ev342g|lWDTS=a2qFg8_n}<>k>m~T zd{omk*VcQJNjyN><#Q?o$s~T#bIcR~Fdx1LtiqmeO;IMaNIH&FoH|L6(Nusjn1%sy z;d0P)Ohs9^1cW#yi!f7%S%ze~ebUmRSr20v{_($6d^sI+9y!t(WH~N?SQ3t-6oz3U zj3UTeE=tO8Zpmjm#>4l(+w)T8*P8~w7#J7~(}e5AuOXi2 zKnTIGu9pOu*!vFU#AfL;?vK{#T z^hY!i103In>$(WTQPJTbh!6y$1?p5$p=>(8A$HFU$QH(!KnSV%O*kRKENaK4!_Uf) zL_c||STwuwp1cn*hrv+}8BK#&iC8dWuq=C=vn)O^?mK1cr66K`V=iVmvT2&@>bb!L zhiTjP0s!@Uh8ajYZa1ZF_|Xv*1c0W3c#5vYI;OnB7W|S8u8N9r16M|>ts3|_{q>qR<6&TD)${x^VtQ%9XEJ&;0W^U~AT2GLy@XZ) z0E6d`e+_UPhg>!r&+@7DHO8kWX%(=EF;?@evI!0|?edu%juLdKNffWA4s*6L;tGRs zV$nJwfFeui%4Lglda84r!Qnminl~E|Y}?*k>yyju0aD@MsYql-xt==A*$P)w5%T@X zUju{?sEUlPTo!^*`3JQ9!ee#YH#-Q=to4}_9A*TpsLz<0O2RXht~+S`I)wm)saU0eWmNR9S-UI7P?lA!1SKnlKCzG6qQ!Cyt^hL7<5Oocq5EmPVOV z!?1dAaImYEr;c-&goMkJv1sPfm&h=*)M3t62*)FH$&ID&!zhAonh-@1`CJ|xrLb%p zL&G`-hlVj!&@rqVFborx?Myl(O_3!Ka~P~}648O3&H8mZ6(S2lO$F@Z9cDz+^UG;S zYTRyGyFPo#U-u!9F(p90A7EHF0K$;VXwVb|gpjh^^Ku9r4_O}VAPV-rny|$)lA5;V z;}1m$>6{2NYR$GIiKI^uF$`L1lsQ`w7p*|SWStaaSk&A>l}wkc_2DfjG*x(k@NxLC^KdD((~RwhPZguDL;)1 z+AZ6LVOj{w)M}1}Qi4oIn=nE0R8fwUa*+BXOhV8(4if+i-KMW83mi1DezAn~9CLO< zB?Y<7wM((Z?Ub3anRAluuE(_5!Xnc&7gqbE@&DSavuZF&i#|vbDPB(<=B$U>dQJV~ zlu%?d8Ym?Qf&h-=!n7=yUI4OUBe(?}^)_xLRd35ne=WwCfR59_Y>mfEVn%toB~PKU z0-mq#h=-7PEQRB^7#!A7FicpE1K0E6S|$dbe**kzn;K;COe3n@VY+T%DS%{z`I-dt z?ddOS07*E^<7QgCKHDLJShd3h2u#a{>v>>hN-c<7v#!J}r22Er(fvTcb=3JK0D!i} zzb8>zbRz91PZ4GCLUpet#@LkmDrs5WlVoQN1UQp1R+Yj@$zg__R8mxgC^Z%9*G&>< zm?zV5yR#l5D&Pnb5f2_gJ?HAg?llYOa$Wt@QiUlgIZQ%WdQw~=No>ham|j}EKHHJv z?Xy^gBGFV3${~Bvb&1?-w!i{f)j8(qmOR3;q>Y)WBoSc-A;XZJMwzo2n(YAq$dWuo zk9g%Mn=b%YR6|Os3|3{PeAHnQteoPylrba`VFIaY(QJnfYSP$X6~wY zCt%eqgH$)NVr&sux+SlWtjt5?>zls=jfP6LsRZ*%M zP@$c5K!xAW@W_Usg$9HVGl&^bB*hBW%AM+|qSGwi^(nagT8vMJ}6xEX&hI zo78WQvhIurCahUNkn;FPs@r@0NTF_(mB^42m%)6ozEm>5it_FQKzt;F{V{=VH{yHmPVLWl1O``>7~krDFA@3n{Nf79DF~3 zt{W5PmfMaq;W?C0Tf(=E4=^DJB0we=wo_ni zs6d<|E+GDp;1sEVQzRjwfKZiupehcS6oeRx7(=iFPQchCu}j7Wk}b=Yk!;D5_s|}* zJI7AH1hde?p~#*HZnWBHYai2^%4E!P zybCsXNvsIc*-Rl}Lk;KRYq4@07QN24ESyYc;fY9EwpfR4yAnUaY_rFYB@(WI<#_M0 zEn%Ir^zw41kg%bSSR_w6bJ5EjC)032)sEPJKRr zk-h|>nI7easL?`e2X!i$B-Nybrgi#jqnN_0A`$?x>(y)9_M%p%6$-1~!c?U%VGvR5 zW193xLygMdA<8d5-}HPknZ$1qkD1(d)sp9+go86LBJm)tCag9xek{?|U!_Qd(SD2@ zg{OSTw5l-7F!HZoqFIsDWHLe4ZPI=sk;FRTbP`*yUh*777^?m&u@lU8GJdQzQPxd$ zxF5qt(>>CJ6&axX!qZIr=Qo<3_Z;VV&CFTO#vlk79T~yieiM>h`W6vX1yd!Ao#RK_ zu`p4hiFWNHAsp?;xEsBte?f=y(p|d0ovTl9nM&uK^RgFs@DZUz{KPfYT3AN zy*`q8NGO83jO6ZuKT#`EOI$2m4S&e%krFbqkZeLj}cd~dT8LXl$tDc|1*#BRSxwbIhcv;Z96 zzuOM=auHtX&9tILV33)mL@$Z1^15;S#2x>dogmFixrJfKbfrSgE|}dr(spx^&BL~* z#{fj6BCs#A8?PFqJ?ork60Ix3loFYag90p$Q^|+fNsEG+MI1#%CxnUlu zGha{kEx*;(XUm88qY+gqDwnOg1645@Kl7RMNE1j2a)&4%0w$MrS`i|ljL-+c%p`5x zR1~c$%#z#yoBrr?q)zXs>nl(VM;iOyKSeT!Y&JVyd#%LJ@dI3{s!jJt=KR_-u7A7Z zd3QO!|5ZB(FB5or`RBKE0vHyg=Yk1Q1+N}(NMDxZ5Y0ZONslzt zNNhfp^*4UJE-K?TxYAPJ+mtaO=VHz*Fp+-14&e(l-b^ZCu&|${D^AFv9Smz3+h?G$F zcRiU^inhr3Y1?DrIL?cX>tCzrXMiZ`NJT|u{rdIelI)X(8Hr$4Oz^q^fZ?zG6~XA> zlI}6~!>^&0&Q~o86ARuHjick|0#$8LKd%G9glcS-=Vd=Fp}rkB6v@<<&M^_ubUM3g z1=9qt8vx3O_A_z+zsz|rVcV=ltQ%|WGb0JL`Wt& zi}@`)-No*iF3k3`G@gzh2pT$mx(*`D<#I!=m;KGYr&X%d3vUP1#YDD?@r#ha4%0de>rtKc3E!UD~bZ7N!6jTvJHcurwwgd$9i6$)p#Y z7plE{+9eq6ytIOfE?6nfY;|?6zN;POb;ph!8<_ugB!UUYV>T7J4mc9keHR^9899EW zeQ`u>jG~aRS(3*WRf>Ba13<(g*{lVHZOySdTM?EDO^XpXpN2N<<0J8O{75F5ymbDX zkqKrE&+~pzDo>v$=vSh?cOz!9d}{RE!UPkGX;>PSp~HmvYR!vOs`qi|gdn=;XQ!Tx=Y=m=``f+4IKA_E zs5Wd@?MzPYp${DmRsg3>PEO7#9kuL&S;OmCK7sifKg zQ8;}7292jYmdGrtu^lngHhw;dQ_k*YDh+=-vU&3aeX0hw0+?fE_DnG0_}->i`c{|pzv2q&#C|6nw zrfOp=G@Y9J&`zGz`I1~MZ92GUTs`H|f5C)mK&!GbH`7@ z5(b|eObO@ z1QV(~ga7IbQbGAk+&5e$ezn zl?6-kzFC+Nc*+M&@OrGt{rZjd*M(xSVJdiKmKQyluoE!B!a4C3%(0VHF8xjk<8U?)g~OH=A75b1O5dY#&od zINn(PIyQdbPwU4)7*LoAGnyY#G~3#opZybzyxRHT6$;8eTebJW>u%D*O)dS;IczM<*pqwL&7{x0sD4~5mI#6XohO*#ERhU#?z!pVS2`b9 zq-7rr-}jF~gUFN^pvV=liUo5KR&CXyK@+@g5Q|NJa3{<(K2sn+HAOgYMP6x;^;180 z=*7;5g~b~OXprGkEKXd!CI!=Vv)^)D?=(ej1rGLV+(=qgOd7#7RM~Lz zpOHNI%=+>CvTmx%^mO(6l9(5$Uj9{AhTx(WW?Xa10aUFk)}&wph)BuvystQ}w?&j& zvn3?8B~*xAmMv|(Y!+EX5K`I;5X z8X_|7`2O9l>%E~`;6wj+xyIV$Ej>N5G#xTg?0F4j!wSWD!`0;8bxYIp8zv{uF7G@aRb`^l=+O;s}BO;;adH1mCvq>-5H}oKWBaggas*n6q(w|3TOF zw<~fP!q*9!jnE92^U|I z11Pa^{QOFgzYxnl+wuGzuABY0SPEth&+~S;&|Sjj^orF z$FUa78ouuzb$$PHj_aKx$}PZC-P|YVBuLsz|C0_)ngSe#g>3rBXX>$;jVMn~Gd4a! z5Qe1F)zwa6*H79XV3EM}`ekb~7IPQECn`aBn(KKtc%FCPOpmZR7{Q!{h?E@PzuWcv z3&jfG3~~=0bfFYrLj;Z=lOAbkMCzPvxR<}JYA=Px&E~FDi1W=lSP*UiQ$A*E>wMLs%*hj4vqa)esSB%WIj*WDbDj+nz-K zIgIjUvBEbyu6Ks(`?q_Z_jorqGJ@GAB2uU>*R$8yL3kd*=V;J`Et1|oCfmo*1hErr zxaexKzF*&`T$DCF{QnXd1D+;MUbi^$?l-CJM;vkTI> z+_SFhf6{TiGX(j4;L+N-C|}~$!mhT~wHE&gOQtOyBoy`9p2Ui5 zSE2h+z93e3t>bzpx~_lojPoWkFY3}g6fs6brhvPEyYl(`MV82iH+ZR=f$UQ6J(Qou zPq(!PZ-^U(NdRR1i7?tahTL9%0#=(HBt@ld!IY3a+Om3P&v;yrdjr*f_x)^F(Jh@| z1T!Lh-+uzQO;v9nnJj&5-_gP!{^F(lYsS0m(K9qr=B$mG#V<6(4jI^pB$9X^`y#`) z?`-MRNuRT={rh%cVTK}mq(3eD3Iab>(I1K=?sXjJKraV3f*CO)QU*Q`eEz?8zj)H# zS1O;{H(0#!sh1}2xt2Dh@C)#xesXXsvT|L zS4G-ey92gec_v&u^*kbUzrc@G_^~rtyk9nNp6JoQ3owGYjJ$R0*++oefZHB?;-xE| zJUsR1dyh_T-*>c-Sxh>Or`*tt#A`39zm|*(GlIGKqkqldKi*LnO)Kr-U$e9Q8>_Z0 znCWzGe_?8}066Ur&^A*FKNsQqBKEzGOUo8WarTcoQ-VfNSF3nJKljxaxp<>gra-rG95m2@DO04RHqt_AZ5%1;Cy z2t^+7JgNpAb^b$&CYBMVa{ z+(XmYBHgdZLzePWNhBW1WHM)C67K*20>Vi|K~(!YpU}!qm~`bl$dd6<`E&l`%FpwjpKPI}~;z>;T%|)iu{e@*Yn%{KB;Q5 zP{{vw7|KJw?;q)Q(A9(y%vFr4CW^)U)vEGtly?9ZVA5R;-BWfwKi%(1tYnN}t|4@A zFk5n*H-;A5QMLn@VE&H{9pJcLYNdwstOU%DX$_Ol=TEdOy;hX%io6{-yWev%tSDXq zb}70GtX-=5SX`FY-C_hYMih%q8=_ZRaHYa|m?eB12oRnp*JukzO7zNoagu7K_k4U&Hlga)6)TOqtuu+CR>t5lcs=KHh!90S=Sgu7K`zl!X!ZF_e*oqlmOX3DH~%opC! z6{Dl0>(jPPVRgq_HyYfsroqI9LHVTI2!w9CK zXQ--M&gahz;Uq*(Q#cto1(8#LQ$SCp`rc{`o*n{T23`U=fa*&EFJp%XA$c&9$s9JK zxcV`IX;^WLkB@H>k&_Y$HiV%yV5zQCO9w=)bt*a_s_PVMoucan22j=^I+G75E^`HU z9nC|hYGE}M&T2QVR6rUYuXj1WIWS{r8-6zYZnO^Vo(; zvws2@q20fxo!WS-6CEgadt?A75g(0R$NZJ_Jf$SURGR%NPzNmFIOfnfFaw6b7#L4G zwOLYQbi;0sEW|xA0=*p_$e#EBDT$bL^n z60U%rYMx}bM`fTvHe!T%9u?Lig{d_A7T{)VP>=;8WcG?`MA+@o2||bl@G8ekU%HN2 z5AQr$b8t0VTkdcSya(P_n*9mTopx%yJT5G~qlNg*X@~73MBeLl9y2E2rzQ&Di@I5~ z?Ckc)_l~T?brN2?j=2&k?g%6MDL?bHDgl>>FgM)iB!O_%BKzF24If;`>;`v4g)%E2 zTejjHIIlGO*9Z^Vs<9viX~?aJaJ2~w&{7zmGvKV!?9YMLraYv9AU;-jM^q?NA-^Og zQlLOWKhNK!omt5zyz?Tom#_RaU%x; z4a7nZT`@|Y=TT|)w_A=`JPX8de>d(Rxgf8HTCDCyf4yFIESDhJXUNmwah zidwr|X7_^FiTv(Bckf7w40C=}_bx5l1)_?%72FwDgPEi#bdK<_A)+dIwu4~@gA~aM zY;obve~5cg_5Vrh{O|nff^G@C2xLx*8jIZcXAFMsxeMU0d%00000NkvXXu0mjf DEYbKo diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/content/scss/_bootstrap-variables.scss b/jhipster-5/bookstore-monolith/src/main/webapp/content/scss/_bootstrap-variables.scss deleted file mode 100644 index be0f226497ab..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/content/scss/_bootstrap-variables.scss +++ /dev/null @@ -1,42 +0,0 @@ -/* -* Bootstrap overrides https://getbootstrap.com/docs/4.0/getting-started/theming/ -* All values defined in bootstrap source -* https://github.com/twbs/bootstrap/blob/v4-dev/scss/_variables.scss can be overwritten here -* Make sure not to add !default to values here -*/ - -// Colors: -// Grayscale and brand colors for use across Bootstrap. - -$primary: #3e8acc; -$success: #28a745; -$info: #17a2b8; -$warning: #ffc107; -$danger: #dc3545; - -// Options: -// Quickly modify global styling by enabling or disabling optional features. -$enable-rounded: true; -$enable-shadows: false; -$enable-gradients: false; -$enable-transitions: true; -$enable-hover-media-query: false; -$enable-grid-classes: true; -$enable-print-styles: true; - -// Components: -// Define common padding and border radius sizes and more. - -$border-radius: 0.15rem; -$border-radius-lg: 0.125rem; -$border-radius-sm: 0.1rem; - -// Body: -// Settings for the `` element. - -$body-bg: #e4e5e6; - -// Typography: -// Font, line-height, and color for body text, headings, and more. - -$font-size-base: 1rem; diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/content/scss/global.scss b/jhipster-5/bookstore-monolith/src/main/webapp/content/scss/global.scss deleted file mode 100644 index cfbb9bf5b88e..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/content/scss/global.scss +++ /dev/null @@ -1,226 +0,0 @@ -@import 'bootstrap-variables'; - -/* ============================================================== -Bootstrap tweaks -===============================================================*/ - -body, -h1, -h2, -h3, -h4 { - font-weight: 300; -} - -a { - color: #533f03; - font-weight: bold; -} - -a:hover { - color: #533f03; - font-weight: bold; - /* make sure browsers use the pointer cursor for anchors, even with no href */ - cursor: pointer; -} - -/* ========================================================================== -Browser Upgrade Prompt -========================================================================== */ -.browserupgrade { - margin: 0.2em 0; - background: #ccc; - color: #000; - padding: 0.2em 0; -} - -/* ========================================================================== -Generic styles -========================================================================== */ - -/* Error highlight on input fields */ -.ng-valid[required], -.ng-valid.required { - border-left: 5px solid green; -} - -.ng-invalid:not(form) { - border-left: 5px solid red; -} - -/* other generic styles */ - -.jh-card { - padding: 1.5%; - margin-top: 20px; - border: none; -} - -.error { - color: white; - background-color: red; -} - -.pad { - padding: 10px; -} - -.w-40 { - width: 40% !important; -} - -.w-60 { - width: 60% !important; -} - -.break { - white-space: normal; - word-break: break-all; -} - -.readonly { - background-color: #eee; - opacity: 1; -} - -.footer { - border-top: 1px solid rgba(0, 0, 0, 0.125); -} - -.hand, -[jhisortby] { - cursor: pointer; -} - -/* ========================================================================== -Custom alerts for notification -========================================================================== */ -.alerts { - .alert { - text-overflow: ellipsis; - pre { - background: none; - border: none; - font: inherit; - color: inherit; - padding: 0; - margin: 0; - } - .popover pre { - font-size: 10px; - } - } - .toast { - position: fixed; - width: 100%; - &.left { - left: 5px; - } - &.right { - right: 5px; - } - &.top { - top: 55px; - } - &.bottom { - bottom: 55px; - } - } -} - -@media screen and (min-width: 480px) { - .alerts .toast { - width: 50%; - } -} - -/* ========================================================================== -entity tables helpers -========================================================================== */ - -/* Remove Bootstrap padding from the element -http://stackoverflow.com/questions/19562903/remove-padding-from-columns-in-bootstrap-3 */ -@mixin no-padding($side) { - @if $side == 'all' { - .no-padding { - padding: 0 !important; - } - } @else { - .no-padding-#{$side} { - padding-#{$side}: 0 !important; - } - } -} -@include no-padding('left'); -@include no-padding('right'); -@include no-padding('top'); -@include no-padding('bottom'); -@include no-padding('all'); - -/* bootstrap 3 input-group 100% width -http://stackoverflow.com/questions/23436430/bootstrap-3-input-group-100-width */ -.width-min { - width: 1% !important; -} - -/* Makes toolbar not wrap on smaller screens -http://www.sketchingwithcss.com/samplechapter/cheatsheet.html#right */ -.flex-btn-group-container { - display: -webkit-flex; - display: flex; - -webkit-flex-direction: row; - flex-direction: row; - -webkit-justify-content: flex-end; - justify-content: flex-end; -} - -/* ========================================================================== -entity detail page css -========================================================================== */ -.row.jh-entity-details > { - dd { - margin-bottom: 15px; - } -} - -@media screen and (min-width: 768px) { - .row.jh-entity-details > { - dt { - margin-bottom: 15px; - } - dd { - border-bottom: 1px solid #eee; - padding-left: 180px; - margin-left: 0; - } - } -} - -/* ========================================================================== -ui bootstrap tweaks -========================================================================== */ -.nav, -.pagination, -.carousel, -.panel-title a { - cursor: pointer; -} - -.datetime-picker-dropdown > li.date-picker-menu div > table .btn-default, -.uib-datepicker-popup > li > div.uib-datepicker > table .btn-default { - border: 0; -} - -.datetime-picker-dropdown > li.date-picker-menu div > table:focus, -.uib-datepicker-popup > li > div.uib-datepicker > table:focus { - outline: none; -} - -.thread-dump-modal-lock { - max-width: 450px; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -/* jhipster-needle-scss-add-main JHipster will add new css style */ diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/content/scss/vendor.scss b/jhipster-5/bookstore-monolith/src/main/webapp/content/scss/vendor.scss deleted file mode 100644 index 12a8f54b8394..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/content/scss/vendor.scss +++ /dev/null @@ -1,12 +0,0 @@ -/* after changing this file run 'npm run webpack:build' */ - -/*************************** -put Sass variables here: -eg $input-color: red; -****************************/ -// Override Boostrap variables -@import 'bootstrap-variables'; -// Import Bootstrap source files from node_modules -@import '~bootstrap/scss/bootstrap'; - -/* jhipster-needle-scss-add-vendor JHipster will add new css style */ diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/favicon.ico b/jhipster-5/bookstore-monolith/src/main/webapp/favicon.ico deleted file mode 100755 index 4179874f53b3c3b0ba9e2a401412f814ab6296bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1574 zcmV+>2HE+EP)000H;Nkl9r4a2J+cS@yzSX6E!^*k!$-D-4;C?DsI4Z2te8^PT@c z=RfD)VMK(b3{GnU7K#)Bt&t+2HBtn$Mv8#eNDUS>&~)z8>N1c(q8rNd{sPjn1MM2QHDA^sG2W;HKsEVpi{%G+8~m}54A zpq~8zXet!#9Gbj-*V8>RHQ@_Oa=ck5fDynmyijTRbXS$xsGFssxLtW3`my8G-!>%7 zn;n<%&U37xG-qc+$&NL}Ic8(r8P8{L>@pz`5wF~FxA(hl3{Q#@0mJ|T!>orWW&$y= zwZ)lV?q9=mOj&=001@Fo=j2<5|CsUovve~87<4?ht)^g4)54xHIM_fH6g9vTH~{$6e3n@@!>>0A((rb8tLK5s#V0 zMm+wn&))p*T>q|hCGR#@SL9}ZK#Tw|V#*5$4}y`?UCz_p4!1wNkO1l#@e&9G#+VYs zEG&vW!|wTsW3iPFM8p#vgQq%eFRm{7prxk1*aAS&G~ti@^w-GQ9%mpd0W^=8Nrc@q z?FmG(O?n~{0D#CgKIQg@lG#5`2LTaLZtu09`*&npbwOKeU4B;jv8(n!ddI?|{BT~F zzml*h^*el9D=mnp(SK|%RkC6{JP5dS>;C22j@;ZLQI=y-twP>a1a%F2w^mvhW1N!C zItRzq%;^AP-WFw5y#6R|j(8Qh9Dt}K_u4&+p(d6Y7r5u2fMIuVYB~yqz^KPR<_)T> zVUZCQ2K>q>IWj4>kGx1p%HD(9OEwu=KUlGU-EF%U2| z6%r-`VTl%YwkK@x(j4)7%q9E||Yz*Vu z-KgXDY^wP1l~c9KAAp;kIku<%ZR4V3H)gcci^L zxuYQ7iwPXJy}sz+_S%}ltQn(|jw6aU+5iCCMBw-}`=x=2s3a#J7eur?P5(n%lfW3; zzojxs0t_(d_}%ME4>VV=%*&kl@mY?4RLIPDrr1%QWBTmX>U-{zUphzI`^LkPoTQkY z^?7=MW3nvEM4$hB{Zyw7M3hi@DgLIIc}3Z#J)0`_Hm$Unjj=qofc>keP`dJ1mj{ks?4R(3kPwGF$MQ4Nw$&8u zY$#b@Zsp>+MfD;l;gbiMsB74J{+6r5=JEI=N`S;Tl0o2i)aJImRADmkV6kfzMM5Yl zb`4GR+C9Ed)T9?ySkhM)WtCdZJg310p5oRacks5uH}YWG9~KQdzS3&iP?nXGu8&`< zB@h73l>ryEsGJ*5{SM`E0!tK2{&F`(Kx?E3XpIyBt&t+2HBtn$Mv8#eND - - - - - - Bookstore - - - - - - - - - - - -

- - - - - - - - diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/manifest.webapp b/jhipster-5/bookstore-monolith/src/main/webapp/manifest.webapp deleted file mode 100644 index 42b606ea1d66..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/manifest.webapp +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "Bookstore", - "short_name": "Bookstore", - "icons": [ - { - "src": "./content/images/jhipster_family_member_0_head-192.png", - "sizes": "192x192", - "type": "image/png" - }, - { - "src": "./content/images/jhipster_family_member_0_head-256.png", - "sizes": "256x256", - "type": "image/png" - }, - { - "src": "./content/images/jhipster_family_member_0_head-384.png", - "sizes": "384x384", - "type": "image/png" - }, - { - "src": "./content/images/jhipster_family_member_0_head-512.png", - "sizes": "512x512", - "type": "image/png" - } - ], - "theme_color": "#000000", - "background_color": "#e0e0e0", - "start_url": "/index.html", - "display": "standalone", - "orientation": "portrait" -} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/robots.txt b/jhipster-5/bookstore-monolith/src/main/webapp/robots.txt deleted file mode 100644 index 7cda27477dd9..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/robots.txt +++ /dev/null @@ -1,11 +0,0 @@ -# robotstxt.org/ - -User-agent: * -Disallow: /api/account -Disallow: /api/account/change-password -Disallow: /api/account/sessions -Disallow: /api/audits/ -Disallow: /api/logs/ -Disallow: /api/users/ -Disallow: /management/ -Disallow: /v2/api-docs/ diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/swagger-ui/index.html b/jhipster-5/bookstore-monolith/src/main/webapp/swagger-ui/index.html deleted file mode 100644 index 416eacef70a7..000000000000 --- a/jhipster-5/bookstore-monolith/src/main/webapp/swagger-ui/index.html +++ /dev/null @@ -1,166 +0,0 @@ - - - - - Swagger UI - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 
-
- - diff --git a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/config/WebConfigurerUnitTest.java b/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/config/WebConfigurerUnitTest.java deleted file mode 100644 index 764d6b35875a..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/config/WebConfigurerUnitTest.java +++ /dev/null @@ -1,189 +0,0 @@ -package com.baeldung.jhipster5.config; - -import io.github.jhipster.config.JHipsterConstants; -import io.github.jhipster.config.JHipsterProperties; -import io.github.jhipster.web.filter.CachingHttpHeadersFilter; -import io.undertow.Undertow; -import io.undertow.Undertow.Builder; -import io.undertow.UndertowOptions; -import org.apache.commons.io.FilenameUtils; - -import org.h2.server.web.WebServlet; -import org.junit.Before; -import org.junit.Test; -import org.springframework.boot.web.embedded.undertow.UndertowServletWebServerFactory; -import org.springframework.http.HttpHeaders; -import org.springframework.mock.env.MockEnvironment; -import org.springframework.mock.web.MockServletContext; -import org.springframework.test.util.ReflectionTestUtils; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; -import org.xnio.OptionMap; - -import javax.servlet.*; -import java.util.*; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.Mockito.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.options; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.header; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; - -/** - * Unit tests for the WebConfigurer class. - * - * @see WebConfigurer - */ -public class WebConfigurerUnitTest { - - private WebConfigurer webConfigurer; - - private MockServletContext servletContext; - - private MockEnvironment env; - - private JHipsterProperties props; - - @Before - public void setup() { - servletContext = spy(new MockServletContext()); - doReturn(mock(FilterRegistration.Dynamic.class)) - .when(servletContext).addFilter(anyString(), any(Filter.class)); - doReturn(mock(ServletRegistration.Dynamic.class)) - .when(servletContext).addServlet(anyString(), any(Servlet.class)); - - env = new MockEnvironment(); - props = new JHipsterProperties(); - - webConfigurer = new WebConfigurer(env, props); - } - - @Test - public void testStartUpProdServletContext() throws ServletException { - env.setActiveProfiles(JHipsterConstants.SPRING_PROFILE_PRODUCTION); - webConfigurer.onStartup(servletContext); - - verify(servletContext).addFilter(eq("cachingHttpHeadersFilter"), any(CachingHttpHeadersFilter.class)); - verify(servletContext, never()).addServlet(eq("H2Console"), any(WebServlet.class)); - } - - @Test - public void testStartUpDevServletContext() throws ServletException { - env.setActiveProfiles(JHipsterConstants.SPRING_PROFILE_DEVELOPMENT); - webConfigurer.onStartup(servletContext); - - verify(servletContext, never()).addFilter(eq("cachingHttpHeadersFilter"), any(CachingHttpHeadersFilter.class)); - verify(servletContext).addServlet(eq("H2Console"), any(WebServlet.class)); - } - - @Test - public void testCustomizeServletContainer() { - env.setActiveProfiles(JHipsterConstants.SPRING_PROFILE_PRODUCTION); - UndertowServletWebServerFactory container = new UndertowServletWebServerFactory(); - webConfigurer.customize(container); - assertThat(container.getMimeMappings().get("abs")).isEqualTo("audio/x-mpeg"); - assertThat(container.getMimeMappings().get("html")).isEqualTo("text/html;charset=utf-8"); - assertThat(container.getMimeMappings().get("json")).isEqualTo("text/html;charset=utf-8"); - if (container.getDocumentRoot() != null) { - assertThat(container.getDocumentRoot().getPath()).isEqualTo(FilenameUtils.separatorsToSystem("target/www")); - } - - Builder builder = Undertow.builder(); - container.getBuilderCustomizers().forEach(c -> c.customize(builder)); - OptionMap.Builder serverOptions = (OptionMap.Builder) ReflectionTestUtils.getField(builder, "serverOptions"); - assertThat(serverOptions.getMap().get(UndertowOptions.ENABLE_HTTP2)).isNull(); - } - - @Test - public void testUndertowHttp2Enabled() { - props.getHttp().setVersion(JHipsterProperties.Http.Version.V_2_0); - UndertowServletWebServerFactory container = new UndertowServletWebServerFactory(); - webConfigurer.customize(container); - Builder builder = Undertow.builder(); - container.getBuilderCustomizers().forEach(c -> c.customize(builder)); - OptionMap.Builder serverOptions = (OptionMap.Builder) ReflectionTestUtils.getField(builder, "serverOptions"); - assertThat(serverOptions.getMap().get(UndertowOptions.ENABLE_HTTP2)).isTrue(); - } - - @Test - public void testCorsFilterOnApiPath() throws Exception { - props.getCors().setAllowedOrigins(Collections.singletonList("*")); - props.getCors().setAllowedMethods(Arrays.asList("GET", "POST", "PUT", "DELETE")); - props.getCors().setAllowedHeaders(Collections.singletonList("*")); - props.getCors().setMaxAge(1800L); - props.getCors().setAllowCredentials(true); - - MockMvc mockMvc = MockMvcBuilders.standaloneSetup(new WebConfigurerUnitTestController()) - .addFilters(webConfigurer.corsFilter()) - .build(); - - mockMvc.perform( - options("/api/test-cors") - .header(HttpHeaders.ORIGIN, "other.domain.com") - .header(HttpHeaders.ACCESS_CONTROL_REQUEST_METHOD, "POST")) - .andExpect(status().isOk()) - .andExpect(header().string(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN, "other.domain.com")) - .andExpect(header().string(HttpHeaders.VARY, "Origin")) - .andExpect(header().string(HttpHeaders.ACCESS_CONTROL_ALLOW_METHODS, "GET,POST,PUT,DELETE")) - .andExpect(header().string(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS, "true")) - .andExpect(header().string(HttpHeaders.ACCESS_CONTROL_MAX_AGE, "1800")); - - mockMvc.perform( - get("/api/test-cors") - .header(HttpHeaders.ORIGIN, "other.domain.com")) - .andExpect(status().isOk()) - .andExpect(header().string(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN, "other.domain.com")); - } - - @Test - public void testCorsFilterOnOtherPath() throws Exception { - props.getCors().setAllowedOrigins(Collections.singletonList("*")); - props.getCors().setAllowedMethods(Arrays.asList("GET", "POST", "PUT", "DELETE")); - props.getCors().setAllowedHeaders(Collections.singletonList("*")); - props.getCors().setMaxAge(1800L); - props.getCors().setAllowCredentials(true); - - MockMvc mockMvc = MockMvcBuilders.standaloneSetup(new WebConfigurerUnitTestController()) - .addFilters(webConfigurer.corsFilter()) - .build(); - - mockMvc.perform( - get("/test/test-cors") - .header(HttpHeaders.ORIGIN, "other.domain.com")) - .andExpect(status().isOk()) - .andExpect(header().doesNotExist(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN)); - } - - @Test - public void testCorsFilterDeactivated() throws Exception { - props.getCors().setAllowedOrigins(null); - - MockMvc mockMvc = MockMvcBuilders.standaloneSetup(new WebConfigurerUnitTestController()) - .addFilters(webConfigurer.corsFilter()) - .build(); - - mockMvc.perform( - get("/api/test-cors") - .header(HttpHeaders.ORIGIN, "other.domain.com")) - .andExpect(status().isOk()) - .andExpect(header().doesNotExist(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN)); - } - - @Test - public void testCorsFilterDeactivated2() throws Exception { - props.getCors().setAllowedOrigins(new ArrayList<>()); - - MockMvc mockMvc = MockMvcBuilders.standaloneSetup(new WebConfigurerUnitTestController()) - .addFilters(webConfigurer.corsFilter()) - .build(); - - mockMvc.perform( - get("/api/test-cors") - .header(HttpHeaders.ORIGIN, "other.domain.com")) - .andExpect(status().isOk()) - .andExpect(header().doesNotExist(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN)); - } -} diff --git a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/config/WebConfigurerUnitTestController.java b/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/config/WebConfigurerUnitTestController.java deleted file mode 100644 index ee72e1c80e46..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/config/WebConfigurerUnitTestController.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.baeldung.jhipster5.config; - -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RestController; - -@RestController -public class WebConfigurerUnitTestController { - - @GetMapping("/api/test-cors") - public void testCorsOnApiPath() { - } - - @GetMapping("/test/test-cors") - public void testCorsOnOtherPath() { - } -} diff --git a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/config/timezone/HibernateTimeZoneIntegrationTest.java b/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/config/timezone/HibernateTimeZoneIntegrationTest.java deleted file mode 100644 index fba77e037ee9..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/config/timezone/HibernateTimeZoneIntegrationTest.java +++ /dev/null @@ -1,176 +0,0 @@ -package com.baeldung.jhipster5.config.timezone; - -import com.baeldung.jhipster5.BookstoreApp; -import com.baeldung.jhipster5.repository.timezone.DateTimeWrapper; -import com.baeldung.jhipster5.repository.timezone.DateTimeWrapperRepository; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.jdbc.core.JdbcTemplate; -import org.springframework.jdbc.support.rowset.SqlRowSet; -import org.springframework.test.context.junit4.SpringRunner; -import org.springframework.transaction.annotation.Transactional; - -import java.time.*; -import java.time.format.DateTimeFormatter; - -import static java.lang.String.format; -import static org.assertj.core.api.Assertions.assertThat; - -/** - * Tests for the UTC Hibernate configuration. - */ -@RunWith(SpringRunner.class) -@SpringBootTest(classes = BookstoreApp.class) -public class HibernateTimeZoneIntegrationTest { - - @Autowired - private DateTimeWrapperRepository dateTimeWrapperRepository; - @Autowired - private JdbcTemplate jdbcTemplate; - - private DateTimeWrapper dateTimeWrapper; - private DateTimeFormatter dateTimeFormatter; - private DateTimeFormatter timeFormatter; - private DateTimeFormatter dateFormatter; - - @Before - public void setup() { - dateTimeWrapper = new DateTimeWrapper(); - dateTimeWrapper.setInstant(Instant.parse("2014-11-12T05:50:00.0Z")); - dateTimeWrapper.setLocalDateTime(LocalDateTime.parse("2014-11-12T07:50:00.0")); - dateTimeWrapper.setOffsetDateTime(OffsetDateTime.parse("2011-12-14T08:30:00.0Z")); - dateTimeWrapper.setZonedDateTime(ZonedDateTime.parse("2011-12-14T08:30:00.0Z")); - dateTimeWrapper.setLocalTime(LocalTime.parse("14:30:00")); - dateTimeWrapper.setOffsetTime(OffsetTime.parse("14:30:00+02:00")); - dateTimeWrapper.setLocalDate(LocalDate.parse("2016-09-10")); - - dateTimeFormatter = DateTimeFormatter - .ofPattern("yyyy-MM-dd HH:mm:ss.S") - .withZone(ZoneId.of("UTC")); - - timeFormatter = DateTimeFormatter - .ofPattern("HH:mm:ss") - .withZone(ZoneId.of("UTC")); - - dateFormatter = DateTimeFormatter - .ofPattern("yyyy-MM-dd"); - } - - @Test - @Transactional - public void storeInstantWithUtcConfigShouldBeStoredOnGMTTimeZone() { - dateTimeWrapperRepository.saveAndFlush(dateTimeWrapper); - - String request = generateSqlRequest("instant", dateTimeWrapper.getId()); - SqlRowSet resultSet = jdbcTemplate.queryForRowSet(request); - String expectedValue = dateTimeFormatter.format(dateTimeWrapper.getInstant()); - - assertThatDateStoredValueIsEqualToInsertDateValueOnGMTTimeZone(resultSet, expectedValue); - } - - @Test - @Transactional - public void storeLocalDateTimeWithUtcConfigShouldBeStoredOnGMTTimeZone() { - dateTimeWrapperRepository.saveAndFlush(dateTimeWrapper); - - String request = generateSqlRequest("local_date_time", dateTimeWrapper.getId()); - SqlRowSet resultSet = jdbcTemplate.queryForRowSet(request); - String expectedValue = dateTimeWrapper - .getLocalDateTime() - .atZone(ZoneId.systemDefault()) - .format(dateTimeFormatter); - - assertThatDateStoredValueIsEqualToInsertDateValueOnGMTTimeZone(resultSet, expectedValue); - } - - @Test - @Transactional - public void storeOffsetDateTimeWithUtcConfigShouldBeStoredOnGMTTimeZone() { - dateTimeWrapperRepository.saveAndFlush(dateTimeWrapper); - - String request = generateSqlRequest("offset_date_time", dateTimeWrapper.getId()); - SqlRowSet resultSet = jdbcTemplate.queryForRowSet(request); - String expectedValue = dateTimeWrapper - .getOffsetDateTime() - .format(dateTimeFormatter); - - assertThatDateStoredValueIsEqualToInsertDateValueOnGMTTimeZone(resultSet, expectedValue); - } - - @Test - @Transactional - public void storeZoneDateTimeWithUtcConfigShouldBeStoredOnGMTTimeZone() { - dateTimeWrapperRepository.saveAndFlush(dateTimeWrapper); - - String request = generateSqlRequest("zoned_date_time", dateTimeWrapper.getId()); - SqlRowSet resultSet = jdbcTemplate.queryForRowSet(request); - String expectedValue = dateTimeWrapper - .getZonedDateTime() - .format(dateTimeFormatter); - - assertThatDateStoredValueIsEqualToInsertDateValueOnGMTTimeZone(resultSet, expectedValue); - } - - @Test - @Transactional - public void storeLocalTimeWithUtcConfigShouldBeStoredOnGMTTimeZoneAccordingToHis1stJan1970Value() { - dateTimeWrapperRepository.saveAndFlush(dateTimeWrapper); - - String request = generateSqlRequest("local_time", dateTimeWrapper.getId()); - SqlRowSet resultSet = jdbcTemplate.queryForRowSet(request); - String expectedValue = dateTimeWrapper - .getLocalTime() - .atDate(LocalDate.of(1970, Month.JANUARY, 1)) - .atZone(ZoneId.systemDefault()) - .format(timeFormatter); - - assertThatDateStoredValueIsEqualToInsertDateValueOnGMTTimeZone(resultSet, expectedValue); - } - - @Test - @Transactional - public void storeOffsetTimeWithUtcConfigShouldBeStoredOnGMTTimeZoneAccordingToHis1stJan1970Value() { - dateTimeWrapperRepository.saveAndFlush(dateTimeWrapper); - - String request = generateSqlRequest("offset_time", dateTimeWrapper.getId()); - SqlRowSet resultSet = jdbcTemplate.queryForRowSet(request); - String expectedValue = dateTimeWrapper - .getOffsetTime() - .toLocalTime() - .atDate(LocalDate.of(1970, Month.JANUARY, 1)) - .atZone(ZoneId.systemDefault()) - .format(timeFormatter); - - assertThatDateStoredValueIsEqualToInsertDateValueOnGMTTimeZone(resultSet, expectedValue); - } - - @Test - @Transactional - public void storeLocalDateWithUtcConfigShouldBeStoredWithoutTransformation() { - dateTimeWrapperRepository.saveAndFlush(dateTimeWrapper); - - String request = generateSqlRequest("local_date", dateTimeWrapper.getId()); - SqlRowSet resultSet = jdbcTemplate.queryForRowSet(request); - String expectedValue = dateTimeWrapper - .getLocalDate() - .format(dateFormatter); - - assertThatDateStoredValueIsEqualToInsertDateValueOnGMTTimeZone(resultSet, expectedValue); - } - - private String generateSqlRequest(String fieldName, long id) { - return format("SELECT %s FROM jhi_date_time_wrapper where id=%d", fieldName, id); - } - - private void assertThatDateStoredValueIsEqualToInsertDateValueOnGMTTimeZone(SqlRowSet sqlRowSet, String expectedValue) { - while (sqlRowSet.next()) { - String dbValue = sqlRowSet.getString(1); - - assertThat(dbValue).isNotNull(); - assertThat(dbValue).isEqualTo(expectedValue); - } - } -} diff --git a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/repository/CustomAuditEventRepositoryIntegrationTest.java b/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/repository/CustomAuditEventRepositoryIntegrationTest.java deleted file mode 100644 index 948bf43f8776..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/repository/CustomAuditEventRepositoryIntegrationTest.java +++ /dev/null @@ -1,165 +0,0 @@ -package com.baeldung.jhipster5.repository; - -import com.baeldung.jhipster5.BookstoreApp; -import com.baeldung.jhipster5.config.Constants; -import com.baeldung.jhipster5.config.audit.AuditEventConverter; -import com.baeldung.jhipster5.domain.PersistentAuditEvent; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.actuate.audit.AuditEvent; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.mock.web.MockHttpServletRequest; -import org.springframework.mock.web.MockHttpSession; -import org.springframework.security.web.authentication.WebAuthenticationDetails; -import org.springframework.test.context.junit4.SpringRunner; -import org.springframework.transaction.annotation.Transactional; - -import javax.servlet.http.HttpSession; -import java.time.Instant; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import static org.assertj.core.api.Assertions.assertThat; -import static com.baeldung.jhipster5.repository.CustomAuditEventRepository.EVENT_DATA_COLUMN_MAX_LENGTH; - -/** - * Test class for the CustomAuditEventRepository class. - * - * @see CustomAuditEventRepository - */ -@RunWith(SpringRunner.class) -@SpringBootTest(classes = BookstoreApp.class) -@Transactional -public class CustomAuditEventRepositoryIntegrationTest { - - @Autowired - private PersistenceAuditEventRepository persistenceAuditEventRepository; - - @Autowired - private AuditEventConverter auditEventConverter; - - private CustomAuditEventRepository customAuditEventRepository; - - private PersistentAuditEvent testUserEvent; - - private PersistentAuditEvent testOtherUserEvent; - - private PersistentAuditEvent testOldUserEvent; - - @Before - public void setup() { - customAuditEventRepository = new CustomAuditEventRepository(persistenceAuditEventRepository, auditEventConverter); - persistenceAuditEventRepository.deleteAll(); - Instant oneHourAgo = Instant.now().minusSeconds(3600); - - testUserEvent = new PersistentAuditEvent(); - testUserEvent.setPrincipal("test-user"); - testUserEvent.setAuditEventType("test-type"); - testUserEvent.setAuditEventDate(oneHourAgo); - Map data = new HashMap<>(); - data.put("test-key", "test-value"); - testUserEvent.setData(data); - - testOldUserEvent = new PersistentAuditEvent(); - testOldUserEvent.setPrincipal("test-user"); - testOldUserEvent.setAuditEventType("test-type"); - testOldUserEvent.setAuditEventDate(oneHourAgo.minusSeconds(10000)); - - testOtherUserEvent = new PersistentAuditEvent(); - testOtherUserEvent.setPrincipal("other-test-user"); - testOtherUserEvent.setAuditEventType("test-type"); - testOtherUserEvent.setAuditEventDate(oneHourAgo); - } - - @Test - public void addAuditEvent() { - Map data = new HashMap<>(); - data.put("test-key", "test-value"); - AuditEvent event = new AuditEvent("test-user", "test-type", data); - customAuditEventRepository.add(event); - List persistentAuditEvents = persistenceAuditEventRepository.findAll(); - assertThat(persistentAuditEvents).hasSize(1); - PersistentAuditEvent persistentAuditEvent = persistentAuditEvents.get(0); - assertThat(persistentAuditEvent.getPrincipal()).isEqualTo(event.getPrincipal()); - assertThat(persistentAuditEvent.getAuditEventType()).isEqualTo(event.getType()); - assertThat(persistentAuditEvent.getData()).containsKey("test-key"); - assertThat(persistentAuditEvent.getData().get("test-key")).isEqualTo("test-value"); - assertThat(persistentAuditEvent.getAuditEventDate()).isEqualTo(event.getTimestamp()); - } - - @Test - public void addAuditEventTruncateLargeData() { - Map data = new HashMap<>(); - StringBuilder largeData = new StringBuilder(); - for (int i = 0; i < EVENT_DATA_COLUMN_MAX_LENGTH + 10; i++) { - largeData.append("a"); - } - data.put("test-key", largeData); - AuditEvent event = new AuditEvent("test-user", "test-type", data); - customAuditEventRepository.add(event); - List persistentAuditEvents = persistenceAuditEventRepository.findAll(); - assertThat(persistentAuditEvents).hasSize(1); - PersistentAuditEvent persistentAuditEvent = persistentAuditEvents.get(0); - assertThat(persistentAuditEvent.getPrincipal()).isEqualTo(event.getPrincipal()); - assertThat(persistentAuditEvent.getAuditEventType()).isEqualTo(event.getType()); - assertThat(persistentAuditEvent.getData()).containsKey("test-key"); - String actualData = persistentAuditEvent.getData().get("test-key"); - assertThat(actualData.length()).isEqualTo(EVENT_DATA_COLUMN_MAX_LENGTH); - assertThat(actualData).isSubstringOf(largeData); - assertThat(persistentAuditEvent.getAuditEventDate()).isEqualTo(event.getTimestamp()); - } - - @Test - public void testAddEventWithWebAuthenticationDetails() { - HttpSession session = new MockHttpSession(null, "test-session-id"); - MockHttpServletRequest request = new MockHttpServletRequest(); - request.setSession(session); - request.setRemoteAddr("1.2.3.4"); - WebAuthenticationDetails details = new WebAuthenticationDetails(request); - Map data = new HashMap<>(); - data.put("test-key", details); - AuditEvent event = new AuditEvent("test-user", "test-type", data); - customAuditEventRepository.add(event); - List persistentAuditEvents = persistenceAuditEventRepository.findAll(); - assertThat(persistentAuditEvents).hasSize(1); - PersistentAuditEvent persistentAuditEvent = persistentAuditEvents.get(0); - assertThat(persistentAuditEvent.getData().get("remoteAddress")).isEqualTo("1.2.3.4"); - assertThat(persistentAuditEvent.getData().get("sessionId")).isEqualTo("test-session-id"); - } - - @Test - public void testAddEventWithNullData() { - Map data = new HashMap<>(); - data.put("test-key", null); - AuditEvent event = new AuditEvent("test-user", "test-type", data); - customAuditEventRepository.add(event); - List persistentAuditEvents = persistenceAuditEventRepository.findAll(); - assertThat(persistentAuditEvents).hasSize(1); - PersistentAuditEvent persistentAuditEvent = persistentAuditEvents.get(0); - assertThat(persistentAuditEvent.getData().get("test-key")).isEqualTo("null"); - } - - @Test - public void addAuditEventWithAnonymousUser() { - Map data = new HashMap<>(); - data.put("test-key", "test-value"); - AuditEvent event = new AuditEvent(Constants.ANONYMOUS_USER, "test-type", data); - customAuditEventRepository.add(event); - List persistentAuditEvents = persistenceAuditEventRepository.findAll(); - assertThat(persistentAuditEvents).hasSize(0); - } - - @Test - public void addAuditEventWithAuthorizationFailureType() { - Map data = new HashMap<>(); - data.put("test-key", "test-value"); - AuditEvent event = new AuditEvent("test-user", "AUTHORIZATION_FAILURE", data); - customAuditEventRepository.add(event); - List persistentAuditEvents = persistenceAuditEventRepository.findAll(); - assertThat(persistentAuditEvents).hasSize(0); - } - -} diff --git a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/repository/timezone/DateTimeWrapper.java b/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/repository/timezone/DateTimeWrapper.java deleted file mode 100644 index 473a8e782ef4..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/repository/timezone/DateTimeWrapper.java +++ /dev/null @@ -1,131 +0,0 @@ -package com.baeldung.jhipster5.repository.timezone; - -import javax.persistence.*; -import java.io.Serializable; -import java.time.*; -import java.util.Objects; - -@Entity -@Table(name = "jhi_date_time_wrapper") -public class DateTimeWrapper implements Serializable { - - private static final long serialVersionUID = 1L; - - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; - - @Column(name = "instant") - private Instant instant; - - @Column(name = "local_date_time") - private LocalDateTime localDateTime; - - @Column(name = "offset_date_time") - private OffsetDateTime offsetDateTime; - - @Column(name = "zoned_date_time") - private ZonedDateTime zonedDateTime; - - @Column(name = "local_time") - private LocalTime localTime; - - @Column(name = "offset_time") - private OffsetTime offsetTime; - - @Column(name = "local_date") - private LocalDate localDate; - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public Instant getInstant() { - return instant; - } - - public void setInstant(Instant instant) { - this.instant = instant; - } - - public LocalDateTime getLocalDateTime() { - return localDateTime; - } - - public void setLocalDateTime(LocalDateTime localDateTime) { - this.localDateTime = localDateTime; - } - - public OffsetDateTime getOffsetDateTime() { - return offsetDateTime; - } - - public void setOffsetDateTime(OffsetDateTime offsetDateTime) { - this.offsetDateTime = offsetDateTime; - } - - public ZonedDateTime getZonedDateTime() { - return zonedDateTime; - } - - public void setZonedDateTime(ZonedDateTime zonedDateTime) { - this.zonedDateTime = zonedDateTime; - } - - public LocalTime getLocalTime() { - return localTime; - } - - public void setLocalTime(LocalTime localTime) { - this.localTime = localTime; - } - - public OffsetTime getOffsetTime() { - return offsetTime; - } - - public void setOffsetTime(OffsetTime offsetTime) { - this.offsetTime = offsetTime; - } - - public LocalDate getLocalDate() { - return localDate; - } - - public void setLocalDate(LocalDate localDate) { - this.localDate = localDate; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - - DateTimeWrapper dateTimeWrapper = (DateTimeWrapper) o; - return !(dateTimeWrapper.getId() == null || getId() == null) && Objects.equals(getId(), dateTimeWrapper.getId()); - } - - @Override - public int hashCode() { - return Objects.hashCode(getId()); - } - - @Override - public String toString() { - return "TimeZoneTest{" + - "id=" + id + - ", instant=" + instant + - ", localDateTime=" + localDateTime + - ", offsetDateTime=" + offsetDateTime + - ", zonedDateTime=" + zonedDateTime + - '}'; - } -} diff --git a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/repository/timezone/DateTimeWrapperRepository.java b/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/repository/timezone/DateTimeWrapperRepository.java deleted file mode 100644 index 9c3831879fb5..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/repository/timezone/DateTimeWrapperRepository.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.baeldung.jhipster5.repository.timezone; - -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -/** - * Spring Data JPA repository for the DateTimeWrapper entity. - */ -@Repository -public interface DateTimeWrapperRepository extends JpaRepository { - -} diff --git a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/security/DomainUserDetailsServiceIntegrationTest.java b/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/security/DomainUserDetailsServiceIntegrationTest.java deleted file mode 100644 index 11757f651624..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/security/DomainUserDetailsServiceIntegrationTest.java +++ /dev/null @@ -1,127 +0,0 @@ -package com.baeldung.jhipster5.security; - -import com.baeldung.jhipster5.BookstoreApp; -import com.baeldung.jhipster5.domain.User; -import com.baeldung.jhipster5.repository.UserRepository; - -import org.apache.commons.lang3.RandomStringUtils; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.security.core.userdetails.UserDetails; -import org.springframework.security.core.userdetails.UserDetailsService; -import org.springframework.security.core.userdetails.UsernameNotFoundException; -import org.springframework.test.context.junit4.SpringRunner; -import org.springframework.transaction.annotation.Transactional; - -import java.util.Locale; - -import static org.assertj.core.api.Assertions.assertThat; - -/** - * Test class for DomainUserDetailsService. - * - * @see DomainUserDetailsService - */ -@RunWith(SpringRunner.class) -@SpringBootTest(classes = BookstoreApp.class) -@Transactional -public class DomainUserDetailsServiceIntegrationTest { - - private static final String USER_ONE_LOGIN = "test-user-one"; - private static final String USER_ONE_EMAIL = "test-user-one@localhost"; - private static final String USER_TWO_LOGIN = "test-user-two"; - private static final String USER_TWO_EMAIL = "test-user-two@localhost"; - private static final String USER_THREE_LOGIN = "test-user-three"; - private static final String USER_THREE_EMAIL = "test-user-three@localhost"; - - @Autowired - private UserRepository userRepository; - - @Autowired - private UserDetailsService domainUserDetailsService; - - private User userOne; - private User userTwo; - private User userThree; - - @Before - public void init() { - userOne = new User(); - userOne.setLogin(USER_ONE_LOGIN); - userOne.setPassword(RandomStringUtils.random(60)); - userOne.setActivated(true); - userOne.setEmail(USER_ONE_EMAIL); - userOne.setFirstName("userOne"); - userOne.setLastName("doe"); - userOne.setLangKey("en"); - userRepository.save(userOne); - - userTwo = new User(); - userTwo.setLogin(USER_TWO_LOGIN); - userTwo.setPassword(RandomStringUtils.random(60)); - userTwo.setActivated(true); - userTwo.setEmail(USER_TWO_EMAIL); - userTwo.setFirstName("userTwo"); - userTwo.setLastName("doe"); - userTwo.setLangKey("en"); - userRepository.save(userTwo); - - userThree = new User(); - userThree.setLogin(USER_THREE_LOGIN); - userThree.setPassword(RandomStringUtils.random(60)); - userThree.setActivated(false); - userThree.setEmail(USER_THREE_EMAIL); - userThree.setFirstName("userThree"); - userThree.setLastName("doe"); - userThree.setLangKey("en"); - userRepository.save(userThree); - } - - @Test - @Transactional - public void assertThatUserCanBeFoundByLogin() { - UserDetails userDetails = domainUserDetailsService.loadUserByUsername(USER_ONE_LOGIN); - assertThat(userDetails).isNotNull(); - assertThat(userDetails.getUsername()).isEqualTo(USER_ONE_LOGIN); - } - - @Test - @Transactional - public void assertThatUserCanBeFoundByLoginIgnoreCase() { - UserDetails userDetails = domainUserDetailsService.loadUserByUsername(USER_ONE_LOGIN.toUpperCase(Locale.ENGLISH)); - assertThat(userDetails).isNotNull(); - assertThat(userDetails.getUsername()).isEqualTo(USER_ONE_LOGIN); - } - - @Test - @Transactional - public void assertThatUserCanBeFoundByEmail() { - UserDetails userDetails = domainUserDetailsService.loadUserByUsername(USER_TWO_EMAIL); - assertThat(userDetails).isNotNull(); - assertThat(userDetails.getUsername()).isEqualTo(USER_TWO_LOGIN); - } - - @Test(expected = UsernameNotFoundException.class) - @Transactional - public void assertThatUserCanNotBeFoundByEmailIgnoreCase() { - domainUserDetailsService.loadUserByUsername(USER_TWO_EMAIL.toUpperCase(Locale.ENGLISH)); - } - - @Test - @Transactional - public void assertThatEmailIsPrioritizedOverLogin() { - UserDetails userDetails = domainUserDetailsService.loadUserByUsername(USER_ONE_EMAIL); - assertThat(userDetails).isNotNull(); - assertThat(userDetails.getUsername()).isEqualTo(USER_ONE_LOGIN); - } - - @Test(expected = UserNotActivatedException.class) - @Transactional - public void assertThatUserNotActivatedExceptionIsThrownForNotActivatedUsers() { - domainUserDetailsService.loadUserByUsername(USER_THREE_LOGIN); - } - -} 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 deleted file mode 100644 index bdcdba7644b7..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/security/MockAuthenticationManager.java +++ /dev/null @@ -1,54 +0,0 @@ -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 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; - } -} diff --git a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/security/SecurityUtilsUnitTest.java b/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/security/SecurityUtilsUnitTest.java deleted file mode 100644 index b2736badd638..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/security/SecurityUtilsUnitTest.java +++ /dev/null @@ -1,73 +0,0 @@ -package com.baeldung.jhipster5.security; - -import org.junit.Test; -import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; -import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.core.authority.SimpleGrantedAuthority; -import org.springframework.security.core.context.SecurityContext; -import org.springframework.security.core.context.SecurityContextHolder; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Optional; - -import static org.assertj.core.api.Assertions.assertThat; - -/** - * Test class for the SecurityUtils utility class. - * - * @see SecurityUtils - */ -public class SecurityUtilsUnitTest { - - @Test - public void testgetCurrentUserLogin() { - SecurityContext securityContext = SecurityContextHolder.createEmptyContext(); - securityContext.setAuthentication(new UsernamePasswordAuthenticationToken("admin", "admin")); - SecurityContextHolder.setContext(securityContext); - Optional login = SecurityUtils.getCurrentUserLogin(); - assertThat(login).contains("admin"); - } - - @Test - public void testgetCurrentUserJWT() { - SecurityContext securityContext = SecurityContextHolder.createEmptyContext(); - securityContext.setAuthentication(new UsernamePasswordAuthenticationToken("admin", "token")); - SecurityContextHolder.setContext(securityContext); - Optional jwt = SecurityUtils.getCurrentUserJWT(); - assertThat(jwt).contains("token"); - } - - @Test - public void testIsAuthenticated() { - SecurityContext securityContext = SecurityContextHolder.createEmptyContext(); - securityContext.setAuthentication(new UsernamePasswordAuthenticationToken("admin", "admin")); - SecurityContextHolder.setContext(securityContext); - boolean isAuthenticated = SecurityUtils.isAuthenticated(); - assertThat(isAuthenticated).isTrue(); - } - - @Test - public void testAnonymousIsNotAuthenticated() { - SecurityContext securityContext = SecurityContextHolder.createEmptyContext(); - Collection authorities = new ArrayList<>(); - authorities.add(new SimpleGrantedAuthority(AuthoritiesConstants.ANONYMOUS)); - securityContext.setAuthentication(new UsernamePasswordAuthenticationToken("anonymous", "anonymous", authorities)); - SecurityContextHolder.setContext(securityContext); - boolean isAuthenticated = SecurityUtils.isAuthenticated(); - assertThat(isAuthenticated).isFalse(); - } - - @Test - public void testIsCurrentUserInRole() { - SecurityContext securityContext = SecurityContextHolder.createEmptyContext(); - Collection authorities = new ArrayList<>(); - authorities.add(new SimpleGrantedAuthority(AuthoritiesConstants.USER)); - securityContext.setAuthentication(new UsernamePasswordAuthenticationToken("user", "user", authorities)); - SecurityContextHolder.setContext(securityContext); - - assertThat(SecurityUtils.isCurrentUserInRole(AuthoritiesConstants.USER)).isTrue(); - assertThat(SecurityUtils.isCurrentUserInRole(AuthoritiesConstants.ADMIN)).isFalse(); - } - -} diff --git a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/security/jwt/JWTFilterUnitTest.java b/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/security/jwt/JWTFilterUnitTest.java deleted file mode 100644 index 2be8e6809ad7..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/security/jwt/JWTFilterUnitTest.java +++ /dev/null @@ -1,115 +0,0 @@ -package com.baeldung.jhipster5.security.jwt; - -import com.baeldung.jhipster5.security.AuthoritiesConstants; -import io.github.jhipster.config.JHipsterProperties; -import io.jsonwebtoken.io.Decoders; -import io.jsonwebtoken.security.Keys; - -import org.junit.Before; -import org.junit.Test; -import org.springframework.http.HttpStatus; -import org.springframework.mock.web.MockFilterChain; -import org.springframework.mock.web.MockHttpServletRequest; -import org.springframework.mock.web.MockHttpServletResponse; -import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; -import org.springframework.security.core.authority.SimpleGrantedAuthority; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.test.util.ReflectionTestUtils; - -import java.util.Collections; - -import static org.assertj.core.api.Assertions.assertThat; - -public class JWTFilterUnitTest { - - private TokenProvider tokenProvider; - - private JWTFilter jwtFilter; - - @Before - public void setup() { - JHipsterProperties jHipsterProperties = new JHipsterProperties(); - tokenProvider = new TokenProvider(jHipsterProperties); - ReflectionTestUtils.setField(tokenProvider, "key", - Keys.hmacShaKeyFor(Decoders.BASE64 - .decode("fd54a45s65fds737b9aafcb3412e07ed99b267f33413274720ddbb7f6c5e64e9f14075f2d7ed041592f0b7657baf8"))); - - ReflectionTestUtils.setField(tokenProvider, "tokenValidityInMilliseconds", 60000); - jwtFilter = new JWTFilter(tokenProvider); - SecurityContextHolder.getContext().setAuthentication(null); - } - - @Test - public void testJWTFilter() throws Exception { - UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken( - "test-user", - "test-password", - Collections.singletonList(new SimpleGrantedAuthority(AuthoritiesConstants.USER)) - ); - String jwt = tokenProvider.createToken(authentication, false); - MockHttpServletRequest request = new MockHttpServletRequest(); - request.addHeader(JWTFilter.AUTHORIZATION_HEADER, "Bearer " + jwt); - request.setRequestURI("/api/test"); - MockHttpServletResponse response = new MockHttpServletResponse(); - MockFilterChain filterChain = new MockFilterChain(); - jwtFilter.doFilter(request, response, filterChain); - assertThat(response.getStatus()).isEqualTo(HttpStatus.OK.value()); - assertThat(SecurityContextHolder.getContext().getAuthentication().getName()).isEqualTo("test-user"); - assertThat(SecurityContextHolder.getContext().getAuthentication().getCredentials().toString()).isEqualTo(jwt); - } - - @Test - public void testJWTFilterInvalidToken() throws Exception { - String jwt = "wrong_jwt"; - MockHttpServletRequest request = new MockHttpServletRequest(); - request.addHeader(JWTFilter.AUTHORIZATION_HEADER, "Bearer " + jwt); - request.setRequestURI("/api/test"); - MockHttpServletResponse response = new MockHttpServletResponse(); - MockFilterChain filterChain = new MockFilterChain(); - jwtFilter.doFilter(request, response, filterChain); - assertThat(response.getStatus()).isEqualTo(HttpStatus.OK.value()); - assertThat(SecurityContextHolder.getContext().getAuthentication()).isNull(); - } - - @Test - public void testJWTFilterMissingAuthorization() throws Exception { - MockHttpServletRequest request = new MockHttpServletRequest(); - request.setRequestURI("/api/test"); - MockHttpServletResponse response = new MockHttpServletResponse(); - MockFilterChain filterChain = new MockFilterChain(); - jwtFilter.doFilter(request, response, filterChain); - assertThat(response.getStatus()).isEqualTo(HttpStatus.OK.value()); - assertThat(SecurityContextHolder.getContext().getAuthentication()).isNull(); - } - - @Test - public void testJWTFilterMissingToken() throws Exception { - MockHttpServletRequest request = new MockHttpServletRequest(); - request.addHeader(JWTFilter.AUTHORIZATION_HEADER, "Bearer "); - request.setRequestURI("/api/test"); - MockHttpServletResponse response = new MockHttpServletResponse(); - MockFilterChain filterChain = new MockFilterChain(); - jwtFilter.doFilter(request, response, filterChain); - assertThat(response.getStatus()).isEqualTo(HttpStatus.OK.value()); - assertThat(SecurityContextHolder.getContext().getAuthentication()).isNull(); - } - - @Test - public void testJWTFilterWrongScheme() throws Exception { - UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken( - "test-user", - "test-password", - Collections.singletonList(new SimpleGrantedAuthority(AuthoritiesConstants.USER)) - ); - String jwt = tokenProvider.createToken(authentication, false); - MockHttpServletRequest request = new MockHttpServletRequest(); - request.addHeader(JWTFilter.AUTHORIZATION_HEADER, "Basic " + jwt); - request.setRequestURI("/api/test"); - MockHttpServletResponse response = new MockHttpServletResponse(); - MockFilterChain filterChain = new MockFilterChain(); - jwtFilter.doFilter(request, response, filterChain); - assertThat(response.getStatus()).isEqualTo(HttpStatus.OK.value()); - assertThat(SecurityContextHolder.getContext().getAuthentication()).isNull(); - } - -} diff --git a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/security/jwt/TokenProviderUnitTest.java b/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/security/jwt/TokenProviderUnitTest.java deleted file mode 100644 index 18da2eb87563..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/security/jwt/TokenProviderUnitTest.java +++ /dev/null @@ -1,111 +0,0 @@ -package com.baeldung.jhipster5.security.jwt; - -import com.baeldung.jhipster5.security.AuthoritiesConstants; - -import java.security.Key; -import java.util.*; - -import org.junit.Before; -import org.junit.Test; -import org.mockito.Mockito; -import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.core.authority.SimpleGrantedAuthority; -import org.springframework.test.util.ReflectionTestUtils; - -import io.github.jhipster.config.JHipsterProperties; -import io.jsonwebtoken.Jwts; -import io.jsonwebtoken.SignatureAlgorithm; -import io.jsonwebtoken.io.Decoders; -import io.jsonwebtoken.security.Keys; - -import static org.assertj.core.api.Assertions.assertThat; - -public class TokenProviderUnitTest { - - private final long ONE_MINUTE = 60000; - private Key key; - private JHipsterProperties jHipsterProperties; - private TokenProvider tokenProvider; - - @Before - public void setup() { - jHipsterProperties = Mockito.mock(JHipsterProperties.class); - tokenProvider = new TokenProvider(jHipsterProperties); - key = Keys.hmacShaKeyFor(Decoders.BASE64 - .decode("fd54a45s65fds737b9aafcb3412e07ed99b267f33413274720ddbb7f6c5e64e9f14075f2d7ed041592f0b7657baf8")); - - ReflectionTestUtils.setField(tokenProvider, "key", key); - ReflectionTestUtils.setField(tokenProvider, "tokenValidityInMilliseconds", ONE_MINUTE); - } - - @Test - public void testReturnFalseWhenJWThasInvalidSignature() { - boolean isTokenValid = tokenProvider.validateToken(createTokenWithDifferentSignature()); - - assertThat(isTokenValid).isEqualTo(false); - } - - @Test - public void testReturnFalseWhenJWTisMalformed() { - Authentication authentication = createAuthentication(); - String token = tokenProvider.createToken(authentication, false); - String invalidToken = token.substring(1); - boolean isTokenValid = tokenProvider.validateToken(invalidToken); - - assertThat(isTokenValid).isEqualTo(false); - } - - @Test - public void testReturnFalseWhenJWTisExpired() { - ReflectionTestUtils.setField(tokenProvider, "tokenValidityInMilliseconds", -ONE_MINUTE); - - Authentication authentication = createAuthentication(); - String token = tokenProvider.createToken(authentication, false); - - boolean isTokenValid = tokenProvider.validateToken(token); - - assertThat(isTokenValid).isEqualTo(false); - } - - @Test - public void testReturnFalseWhenJWTisUnsupported() { - String unsupportedToken = createUnsupportedToken(); - - boolean isTokenValid = tokenProvider.validateToken(unsupportedToken); - - assertThat(isTokenValid).isEqualTo(false); - } - - @Test - public void testReturnFalseWhenJWTisInvalid() { - boolean isTokenValid = tokenProvider.validateToken(""); - - assertThat(isTokenValid).isEqualTo(false); - } - - private Authentication createAuthentication() { - Collection authorities = new ArrayList<>(); - authorities.add(new SimpleGrantedAuthority(AuthoritiesConstants.ANONYMOUS)); - return new UsernamePasswordAuthenticationToken("anonymous", "anonymous", authorities); - } - - private String createUnsupportedToken() { - return Jwts.builder() - .setPayload("payload") - .signWith(key, SignatureAlgorithm.HS512) - .compact(); - } - - private String createTokenWithDifferentSignature() { - Key otherKey = Keys.hmacShaKeyFor(Decoders.BASE64 - .decode("Xfd54a45s65fds737b9aafcb3412e07ed99b267f33413274720ddbb7f6c5e64e9f14075f2d7ed041592f0b7657baf8")); - - return Jwts.builder() - .setSubject("anonymous") - .signWith(otherKey, SignatureAlgorithm.HS512) - .setExpiration(new Date(new Date().getTime() + ONE_MINUTE)) - .compact(); - } -} diff --git a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/service/MailServiceIntegrationTest.java b/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/service/MailServiceIntegrationTest.java deleted file mode 100644 index 72592e1239c7..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/service/MailServiceIntegrationTest.java +++ /dev/null @@ -1,187 +0,0 @@ -package com.baeldung.jhipster5.service; -import com.baeldung.jhipster5.config.Constants; - -import com.baeldung.jhipster5.BookstoreApp; -import com.baeldung.jhipster5.domain.User; -import io.github.jhipster.config.JHipsterProperties; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.MockitoAnnotations; -import org.mockito.Spy; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.context.MessageSource; -import org.springframework.mail.MailSendException; -import org.springframework.mail.javamail.JavaMailSenderImpl; -import org.springframework.test.context.junit4.SpringRunner; -import org.thymeleaf.spring5.SpringTemplateEngine; - -import javax.mail.Multipart; -import javax.mail.internet.MimeBodyPart; -import javax.mail.internet.MimeMessage; -import javax.mail.internet.MimeMultipart; -import java.io.ByteArrayOutputStream; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.*; - -@RunWith(SpringRunner.class) -@SpringBootTest(classes = BookstoreApp.class) -public class MailServiceIntegrationTest { - - @Autowired - private JHipsterProperties jHipsterProperties; - - @Autowired - private MessageSource messageSource; - - @Autowired - private SpringTemplateEngine templateEngine; - - @Spy - private JavaMailSenderImpl javaMailSender; - - @Captor - private ArgumentCaptor messageCaptor; - - private MailService mailService; - - @Before - public void setup() { - MockitoAnnotations.initMocks(this); - doNothing().when(javaMailSender).send(any(MimeMessage.class)); - mailService = new MailService(jHipsterProperties, javaMailSender, messageSource, templateEngine); - } - - @Test - public void testSendEmail() throws Exception { - mailService.sendEmail("john.doe@example.com", "testSubject", "testContent", false, false); - verify(javaMailSender).send(messageCaptor.capture()); - MimeMessage message = messageCaptor.getValue(); - assertThat(message.getSubject()).isEqualTo("testSubject"); - assertThat(message.getAllRecipients()[0].toString()).isEqualTo("john.doe@example.com"); - assertThat(message.getFrom()[0].toString()).isEqualTo("test@localhost"); - assertThat(message.getContent()).isInstanceOf(String.class); - assertThat(message.getContent().toString()).isEqualTo("testContent"); - assertThat(message.getDataHandler().getContentType()).isEqualTo("text/plain; charset=UTF-8"); - } - - @Test - public void testSendHtmlEmail() throws Exception { - mailService.sendEmail("john.doe@example.com", "testSubject", "testContent", false, true); - verify(javaMailSender).send(messageCaptor.capture()); - MimeMessage message = messageCaptor.getValue(); - assertThat(message.getSubject()).isEqualTo("testSubject"); - assertThat(message.getAllRecipients()[0].toString()).isEqualTo("john.doe@example.com"); - assertThat(message.getFrom()[0].toString()).isEqualTo("test@localhost"); - assertThat(message.getContent()).isInstanceOf(String.class); - assertThat(message.getContent().toString()).isEqualTo("testContent"); - assertThat(message.getDataHandler().getContentType()).isEqualTo("text/html;charset=UTF-8"); - } - - @Test - public void testSendMultipartEmail() throws Exception { - mailService.sendEmail("john.doe@example.com", "testSubject", "testContent", true, false); - verify(javaMailSender).send(messageCaptor.capture()); - MimeMessage message = messageCaptor.getValue(); - MimeMultipart mp = (MimeMultipart) message.getContent(); - MimeBodyPart part = (MimeBodyPart) ((MimeMultipart) mp.getBodyPart(0).getContent()).getBodyPart(0); - ByteArrayOutputStream aos = new ByteArrayOutputStream(); - part.writeTo(aos); - assertThat(message.getSubject()).isEqualTo("testSubject"); - assertThat(message.getAllRecipients()[0].toString()).isEqualTo("john.doe@example.com"); - assertThat(message.getFrom()[0].toString()).isEqualTo("test@localhost"); - assertThat(message.getContent()).isInstanceOf(Multipart.class); - assertThat(aos.toString()).isEqualTo("\r\ntestContent"); - assertThat(part.getDataHandler().getContentType()).isEqualTo("text/plain; charset=UTF-8"); - } - - @Test - public void testSendMultipartHtmlEmail() throws Exception { - mailService.sendEmail("john.doe@example.com", "testSubject", "testContent", true, true); - verify(javaMailSender).send(messageCaptor.capture()); - MimeMessage message = messageCaptor.getValue(); - MimeMultipart mp = (MimeMultipart) message.getContent(); - MimeBodyPart part = (MimeBodyPart) ((MimeMultipart) mp.getBodyPart(0).getContent()).getBodyPart(0); - ByteArrayOutputStream aos = new ByteArrayOutputStream(); - part.writeTo(aos); - assertThat(message.getSubject()).isEqualTo("testSubject"); - assertThat(message.getAllRecipients()[0].toString()).isEqualTo("john.doe@example.com"); - assertThat(message.getFrom()[0].toString()).isEqualTo("test@localhost"); - assertThat(message.getContent()).isInstanceOf(Multipart.class); - assertThat(aos.toString()).isEqualTo("\r\ntestContent"); - assertThat(part.getDataHandler().getContentType()).isEqualTo("text/html;charset=UTF-8"); - } - - @Test - public void testSendEmailFromTemplate() throws Exception { - User user = new User(); - user.setLogin("john"); - user.setEmail("john.doe@example.com"); - user.setLangKey("en"); - mailService.sendEmailFromTemplate(user, "mail/testEmail", "email.test.title"); - verify(javaMailSender).send(messageCaptor.capture()); - MimeMessage message = messageCaptor.getValue(); - assertThat(message.getSubject()).isEqualTo("test title"); - assertThat(message.getAllRecipients()[0].toString()).isEqualTo(user.getEmail()); - assertThat(message.getFrom()[0].toString()).isEqualTo("test@localhost"); - assertThat(message.getContent().toString()).isEqualToNormalizingNewlines("test title, http://127.0.0.1:8080, john\n"); - assertThat(message.getDataHandler().getContentType()).isEqualTo("text/html;charset=UTF-8"); - } - - @Test - public void testSendActivationEmail() throws Exception { - User user = new User(); - user.setLangKey(Constants.DEFAULT_LANGUAGE); - user.setLogin("john"); - user.setEmail("john.doe@example.com"); - mailService.sendActivationEmail(user); - verify(javaMailSender).send(messageCaptor.capture()); - MimeMessage message = messageCaptor.getValue(); - assertThat(message.getAllRecipients()[0].toString()).isEqualTo(user.getEmail()); - assertThat(message.getFrom()[0].toString()).isEqualTo("test@localhost"); - assertThat(message.getContent().toString()).isNotEmpty(); - assertThat(message.getDataHandler().getContentType()).isEqualTo("text/html;charset=UTF-8"); - } - - @Test - public void testCreationEmail() throws Exception { - User user = new User(); - user.setLangKey(Constants.DEFAULT_LANGUAGE); - user.setLogin("john"); - user.setEmail("john.doe@example.com"); - mailService.sendCreationEmail(user); - verify(javaMailSender).send(messageCaptor.capture()); - MimeMessage message = messageCaptor.getValue(); - assertThat(message.getAllRecipients()[0].toString()).isEqualTo(user.getEmail()); - assertThat(message.getFrom()[0].toString()).isEqualTo("test@localhost"); - assertThat(message.getContent().toString()).isNotEmpty(); - assertThat(message.getDataHandler().getContentType()).isEqualTo("text/html;charset=UTF-8"); - } - - @Test - public void testSendPasswordResetMail() throws Exception { - User user = new User(); - user.setLangKey(Constants.DEFAULT_LANGUAGE); - user.setLogin("john"); - user.setEmail("john.doe@example.com"); - mailService.sendPasswordResetMail(user); - verify(javaMailSender).send(messageCaptor.capture()); - MimeMessage message = messageCaptor.getValue(); - assertThat(message.getAllRecipients()[0].toString()).isEqualTo(user.getEmail()); - assertThat(message.getFrom()[0].toString()).isEqualTo("test@localhost"); - assertThat(message.getContent().toString()).isNotEmpty(); - assertThat(message.getDataHandler().getContentType()).isEqualTo("text/html;charset=UTF-8"); - } - - @Test - public void testSendEmailWithException() throws Exception { - doThrow(MailSendException.class).when(javaMailSender).send(any(MimeMessage.class)); - mailService.sendEmail("john.doe@example.com", "testSubject", "testContent", false, false); - } - -} diff --git a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/service/UserServiceIntegrationTest.java b/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/service/UserServiceIntegrationTest.java deleted file mode 100644 index ca3608462d7a..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/service/UserServiceIntegrationTest.java +++ /dev/null @@ -1,192 +0,0 @@ -package com.baeldung.jhipster5.service; - -import com.baeldung.jhipster5.BookstoreApp; -import com.baeldung.jhipster5.config.Constants; -import com.baeldung.jhipster5.domain.User; -import com.baeldung.jhipster5.repository.UserRepository; -import com.baeldung.jhipster5.service.dto.UserDTO; -import com.baeldung.jhipster5.service.util.RandomUtil; - -import org.apache.commons.lang3.RandomStringUtils; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.data.auditing.AuditingHandler; -import org.springframework.data.auditing.DateTimeProvider; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.PageRequest; -import org.springframework.test.context.junit4.SpringRunner; -import org.springframework.transaction.annotation.Transactional; - -import java.time.Instant; -import java.time.temporal.ChronoUnit; -import java.time.LocalDateTime; -import java.util.Optional; -import java.util.List; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.when; - -/** - * Test class for the UserResource REST controller. - * - * @see UserService - */ -@RunWith(SpringRunner.class) -@SpringBootTest(classes = BookstoreApp.class) -@Transactional -public class UserServiceIntegrationTest { - - @Autowired - private UserRepository userRepository; - - @Autowired - private UserService userService; - - @Autowired - private AuditingHandler auditingHandler; - - @Mock - DateTimeProvider dateTimeProvider; - - private User user; - - @Before - public void init() { - user = new User(); - user.setLogin("johndoe"); - user.setPassword(RandomStringUtils.random(60)); - user.setActivated(true); - user.setEmail("johndoe@localhost"); - user.setFirstName("john"); - user.setLastName("doe"); - user.setImageUrl("http://placehold.it/50x50"); - user.setLangKey("en"); - - when(dateTimeProvider.getNow()).thenReturn(Optional.of(LocalDateTime.now())); - auditingHandler.setDateTimeProvider(dateTimeProvider); - } - - @Test - @Transactional - public void assertThatUserMustExistToResetPassword() { - userRepository.saveAndFlush(user); - Optional maybeUser = userService.requestPasswordReset("invalid.login@localhost"); - assertThat(maybeUser).isNotPresent(); - - maybeUser = userService.requestPasswordReset(user.getEmail()); - assertThat(maybeUser).isPresent(); - assertThat(maybeUser.orElse(null).getEmail()).isEqualTo(user.getEmail()); - assertThat(maybeUser.orElse(null).getResetDate()).isNotNull(); - assertThat(maybeUser.orElse(null).getResetKey()).isNotNull(); - } - - @Test - @Transactional - public void assertThatOnlyActivatedUserCanRequestPasswordReset() { - user.setActivated(false); - userRepository.saveAndFlush(user); - - Optional maybeUser = userService.requestPasswordReset(user.getLogin()); - assertThat(maybeUser).isNotPresent(); - userRepository.delete(user); - } - - @Test - @Transactional - public void assertThatResetKeyMustNotBeOlderThan24Hours() { - Instant daysAgo = Instant.now().minus(25, ChronoUnit.HOURS); - String resetKey = RandomUtil.generateResetKey(); - user.setActivated(true); - user.setResetDate(daysAgo); - user.setResetKey(resetKey); - userRepository.saveAndFlush(user); - - Optional maybeUser = userService.completePasswordReset("johndoe2", user.getResetKey()); - assertThat(maybeUser).isNotPresent(); - userRepository.delete(user); - } - - @Test - @Transactional - public void assertThatResetKeyMustBeValid() { - Instant daysAgo = Instant.now().minus(25, ChronoUnit.HOURS); - user.setActivated(true); - user.setResetDate(daysAgo); - user.setResetKey("1234"); - userRepository.saveAndFlush(user); - - Optional maybeUser = userService.completePasswordReset("johndoe2", user.getResetKey()); - assertThat(maybeUser).isNotPresent(); - userRepository.delete(user); - } - - @Test - @Transactional - public void assertThatUserCanResetPassword() { - String oldPassword = user.getPassword(); - Instant daysAgo = Instant.now().minus(2, ChronoUnit.HOURS); - String resetKey = RandomUtil.generateResetKey(); - user.setActivated(true); - user.setResetDate(daysAgo); - user.setResetKey(resetKey); - userRepository.saveAndFlush(user); - - Optional maybeUser = userService.completePasswordReset("johndoe2", user.getResetKey()); - assertThat(maybeUser).isPresent(); - assertThat(maybeUser.orElse(null).getResetDate()).isNull(); - assertThat(maybeUser.orElse(null).getResetKey()).isNull(); - assertThat(maybeUser.orElse(null).getPassword()).isNotEqualTo(oldPassword); - - userRepository.delete(user); - } - - @Test - @Transactional - public void testFindNotActivatedUsersByCreationDateBefore() { - Instant now = Instant.now(); - when(dateTimeProvider.getNow()).thenReturn(Optional.of(now.minus(4, ChronoUnit.DAYS))); - user.setActivated(false); - User dbUser = userRepository.saveAndFlush(user); - dbUser.setCreatedDate(now.minus(4, ChronoUnit.DAYS)); - userRepository.saveAndFlush(user); - List users = userRepository.findAllByActivatedIsFalseAndCreatedDateBefore(now.minus(3, ChronoUnit.DAYS)); - assertThat(users).isNotEmpty(); - userService.removeNotActivatedUsers(); - users = userRepository.findAllByActivatedIsFalseAndCreatedDateBefore(now.minus(3, ChronoUnit.DAYS)); - assertThat(users).isEmpty(); - } - - @Test - @Transactional - public void assertThatAnonymousUserIsNotGet() { - user.setLogin(Constants.ANONYMOUS_USER); - if (!userRepository.findOneByLogin(Constants.ANONYMOUS_USER).isPresent()) { - userRepository.saveAndFlush(user); - } - final PageRequest pageable = PageRequest.of(0, (int) userRepository.count()); - final Page allManagedUsers = userService.getAllManagedUsers(pageable); - assertThat(allManagedUsers.getContent().stream() - .noneMatch(user -> Constants.ANONYMOUS_USER.equals(user.getLogin()))) - .isTrue(); - } - - - @Test - @Transactional - public void testRemoveNotActivatedUsers() { - // custom "now" for audit to use as creation date - when(dateTimeProvider.getNow()).thenReturn(Optional.of(Instant.now().minus(30, ChronoUnit.DAYS))); - - user.setActivated(false); - userRepository.saveAndFlush(user); - - assertThat(userRepository.findOneByLogin("johndoe")).isPresent(); - userService.removeNotActivatedUsers(); - assertThat(userRepository.findOneByLogin("johndoe")).isNotPresent(); - } - -} diff --git a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/service/mapper/UserMapperIntegrationTest.java b/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/service/mapper/UserMapperIntegrationTest.java deleted file mode 100644 index cd49135d63c7..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/service/mapper/UserMapperIntegrationTest.java +++ /dev/null @@ -1,150 +0,0 @@ -package com.baeldung.jhipster5.service.mapper; - - -import com.baeldung.jhipster5.BookstoreApp; -import com.baeldung.jhipster5.domain.User; -import com.baeldung.jhipster5.service.dto.UserDTO; -import org.apache.commons.lang3.RandomStringUtils; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import static org.assertj.core.api.Assertions.assertThat; - -/** - * Test class for the UserMapper. - * - * @see UserMapper - */ -@RunWith(SpringRunner.class) -@SpringBootTest(classes = BookstoreApp.class) -public class UserMapperIntegrationTest { - - private static final String DEFAULT_LOGIN = "johndoe"; - - @Autowired - private UserMapper userMapper; - - private User user; - private UserDTO userDto; - - private static final Long DEFAULT_ID = 1L; - - @Before - public void init() { - user = new User(); - user.setLogin(DEFAULT_LOGIN); - user.setPassword(RandomStringUtils.random(60)); - user.setActivated(true); - user.setEmail("johndoe@localhost"); - user.setFirstName("john"); - user.setLastName("doe"); - user.setImageUrl("image_url"); - user.setLangKey("en"); - - userDto = new UserDTO(user); - } - - @Test - public void usersToUserDTOsShouldMapOnlyNonNullUsers(){ - List users = new ArrayList<>(); - users.add(user); - users.add(null); - - List userDTOS = userMapper.usersToUserDTOs(users); - - assertThat(userDTOS).isNotEmpty(); - assertThat(userDTOS).size().isEqualTo(1); - } - - @Test - public void userDTOsToUsersShouldMapOnlyNonNullUsers(){ - List usersDto = new ArrayList<>(); - usersDto.add(userDto); - usersDto.add(null); - - List users = userMapper.userDTOsToUsers(usersDto); - - assertThat(users).isNotEmpty(); - assertThat(users).size().isEqualTo(1); - } - - @Test - public void userDTOsToUsersWithAuthoritiesStringShouldMapToUsersWithAuthoritiesDomain(){ - Set authoritiesAsString = new HashSet<>(); - authoritiesAsString.add("ADMIN"); - userDto.setAuthorities(authoritiesAsString); - - List usersDto = new ArrayList<>(); - usersDto.add(userDto); - - List users = userMapper.userDTOsToUsers(usersDto); - - assertThat(users).isNotEmpty(); - assertThat(users).size().isEqualTo(1); - assertThat(users.get(0).getAuthorities()).isNotNull(); - assertThat(users.get(0).getAuthorities()).isNotEmpty(); - assertThat(users.get(0).getAuthorities().iterator().next().getName()).isEqualTo("ADMIN"); - } - - @Test - public void userDTOsToUsersMapWithNullAuthoritiesStringShouldReturnUserWithEmptyAuthorities(){ - userDto.setAuthorities(null); - - List usersDto = new ArrayList<>(); - usersDto.add(userDto); - - List users = userMapper.userDTOsToUsers(usersDto); - - assertThat(users).isNotEmpty(); - assertThat(users).size().isEqualTo(1); - assertThat(users.get(0).getAuthorities()).isNotNull(); - assertThat(users.get(0).getAuthorities()).isEmpty(); - } - - @Test - public void userDTOToUserMapWithAuthoritiesStringShouldReturnUserWithAuthorities(){ - Set authoritiesAsString = new HashSet<>(); - authoritiesAsString.add("ADMIN"); - userDto.setAuthorities(authoritiesAsString); - - userDto.setAuthorities(authoritiesAsString); - - User user = userMapper.userDTOToUser(userDto); - - assertThat(user).isNotNull(); - assertThat(user.getAuthorities()).isNotNull(); - assertThat(user.getAuthorities()).isNotEmpty(); - assertThat(user.getAuthorities().iterator().next().getName()).isEqualTo("ADMIN"); - } - - @Test - public void userDTOToUserMapWithNullAuthoritiesStringShouldReturnUserWithEmptyAuthorities(){ - userDto.setAuthorities(null); - - User user = userMapper.userDTOToUser(userDto); - - assertThat(user).isNotNull(); - assertThat(user.getAuthorities()).isNotNull(); - assertThat(user.getAuthorities()).isEmpty(); - } - - @Test - public void userDTOToUserMapWithNullUserShouldReturnNull(){ - assertThat(userMapper.userDTOToUser(null)).isNull(); - } - - @Test - public void testUserFromId() { - assertThat(userMapper.userFromId(DEFAULT_ID).getId()).isEqualTo(DEFAULT_ID); - assertThat(userMapper.userFromId(null)).isNull(); - } -} diff --git a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/AccountResourceIntegrationTest.java b/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/AccountResourceIntegrationTest.java deleted file mode 100644 index f591b7ecbfbd..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/AccountResourceIntegrationTest.java +++ /dev/null @@ -1,818 +0,0 @@ -package com.baeldung.jhipster5.web.rest; - -import com.baeldung.jhipster5.BookstoreApp; -import com.baeldung.jhipster5.config.Constants; -import com.baeldung.jhipster5.domain.Authority; -import com.baeldung.jhipster5.domain.User; -import com.baeldung.jhipster5.repository.AuthorityRepository; -import com.baeldung.jhipster5.repository.UserRepository; -import com.baeldung.jhipster5.security.AuthoritiesConstants; -import com.baeldung.jhipster5.service.MailService; -import com.baeldung.jhipster5.service.UserService; -import com.baeldung.jhipster5.service.dto.PasswordChangeDTO; -import com.baeldung.jhipster5.service.dto.UserDTO; -import com.baeldung.jhipster5.web.rest.errors.ExceptionTranslator; -import com.baeldung.jhipster5.web.rest.vm.KeyAndPasswordVM; -import com.baeldung.jhipster5.web.rest.vm.ManagedUserVM; -import org.apache.commons.lang3.RandomStringUtils; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.http.MediaType; -import org.springframework.http.converter.HttpMessageConverter; -import org.springframework.security.crypto.password.PasswordEncoder; -import org.springframework.security.test.context.support.WithMockUser; -import org.springframework.test.context.junit4.SpringRunner; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; -import org.springframework.transaction.annotation.Transactional; - -import java.time.Instant; -import java.util.*; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.doNothing; -import static org.mockito.Mockito.when; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -/** - * Test class for the AccountResource REST controller. - * - * @see AccountResource - */ -@RunWith(SpringRunner.class) -@SpringBootTest(classes = BookstoreApp.class) -public class AccountResourceIntegrationTest { - - @Autowired - private UserRepository userRepository; - - @Autowired - private AuthorityRepository authorityRepository; - - @Autowired - private UserService userService; - - @Autowired - private PasswordEncoder passwordEncoder; - - @Autowired - private HttpMessageConverter[] httpMessageConverters; - - @Autowired - private ExceptionTranslator exceptionTranslator; - - @Mock - private UserService mockUserService; - - @Mock - private MailService mockMailService; - - private MockMvc restMvc; - - private MockMvc restUserMockMvc; - - @Before - public void setup() { - MockitoAnnotations.initMocks(this); - doNothing().when(mockMailService).sendActivationEmail(any()); - AccountResource accountResource = - new AccountResource(userRepository, userService, mockMailService); - - AccountResource accountUserMockResource = - new AccountResource(userRepository, mockUserService, mockMailService); - this.restMvc = MockMvcBuilders.standaloneSetup(accountResource) - .setMessageConverters(httpMessageConverters) - .setControllerAdvice(exceptionTranslator) - .build(); - this.restUserMockMvc = MockMvcBuilders.standaloneSetup(accountUserMockResource) - .setControllerAdvice(exceptionTranslator) - .build(); - } - - @Test - public void testNonAuthenticatedUser() throws Exception { - restUserMockMvc.perform(get("/api/authenticate") - .accept(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()) - .andExpect(content().string("")); - } - - @Test - public void testAuthenticatedUser() throws Exception { - restUserMockMvc.perform(get("/api/authenticate") - .with(request -> { - request.setRemoteUser("test"); - return request; - }) - .accept(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()) - .andExpect(content().string("test")); - } - - @Test - public void testGetExistingAccount() throws Exception { - Set authorities = new HashSet<>(); - Authority authority = new Authority(); - authority.setName(AuthoritiesConstants.ADMIN); - authorities.add(authority); - - User user = new User(); - user.setLogin("test"); - user.setFirstName("john"); - user.setLastName("doe"); - user.setEmail("john.doe@jhipster.com"); - user.setImageUrl("http://placehold.it/50x50"); - user.setLangKey("en"); - user.setAuthorities(authorities); - when(mockUserService.getUserWithAuthorities()).thenReturn(Optional.of(user)); - - restUserMockMvc.perform(get("/api/account") - .accept(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()) - .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) - .andExpect(jsonPath("$.login").value("test")) - .andExpect(jsonPath("$.firstName").value("john")) - .andExpect(jsonPath("$.lastName").value("doe")) - .andExpect(jsonPath("$.email").value("john.doe@jhipster.com")) - .andExpect(jsonPath("$.imageUrl").value("http://placehold.it/50x50")) - .andExpect(jsonPath("$.langKey").value("en")) - .andExpect(jsonPath("$.authorities").value(AuthoritiesConstants.ADMIN)); - } - - @Test - public void testGetUnknownAccount() throws Exception { - when(mockUserService.getUserWithAuthorities()).thenReturn(Optional.empty()); - - restUserMockMvc.perform(get("/api/account") - .accept(MediaType.APPLICATION_PROBLEM_JSON)) - .andExpect(status().isInternalServerError()); - } - - @Test - @Transactional - public void testRegisterValid() throws Exception { - ManagedUserVM validUser = new ManagedUserVM(); - validUser.setLogin("test-register-valid"); - validUser.setPassword("password"); - validUser.setFirstName("Alice"); - validUser.setLastName("Test"); - validUser.setEmail("test-register-valid@example.com"); - validUser.setImageUrl("http://placehold.it/50x50"); - validUser.setLangKey(Constants.DEFAULT_LANGUAGE); - validUser.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); - assertThat(userRepository.findOneByLogin("test-register-valid").isPresent()).isFalse(); - - restMvc.perform( - post("/api/register") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(validUser))) - .andExpect(status().isCreated()); - - assertThat(userRepository.findOneByLogin("test-register-valid").isPresent()).isTrue(); - } - - @Test - @Transactional - public void testRegisterInvalidLogin() throws Exception { - ManagedUserVM invalidUser = new ManagedUserVM(); - invalidUser.setLogin("funky-log!n");// <-- invalid - invalidUser.setPassword("password"); - invalidUser.setFirstName("Funky"); - invalidUser.setLastName("One"); - invalidUser.setEmail("funky@example.com"); - invalidUser.setActivated(true); - invalidUser.setImageUrl("http://placehold.it/50x50"); - invalidUser.setLangKey(Constants.DEFAULT_LANGUAGE); - invalidUser.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); - - restUserMockMvc.perform( - post("/api/register") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(invalidUser))) - .andExpect(status().isBadRequest()); - - Optional user = userRepository.findOneByEmailIgnoreCase("funky@example.com"); - assertThat(user.isPresent()).isFalse(); - } - - @Test - @Transactional - public void testRegisterInvalidEmail() throws Exception { - ManagedUserVM invalidUser = new ManagedUserVM(); - invalidUser.setLogin("bob"); - invalidUser.setPassword("password"); - invalidUser.setFirstName("Bob"); - invalidUser.setLastName("Green"); - invalidUser.setEmail("invalid");// <-- invalid - invalidUser.setActivated(true); - invalidUser.setImageUrl("http://placehold.it/50x50"); - invalidUser.setLangKey(Constants.DEFAULT_LANGUAGE); - invalidUser.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); - - restUserMockMvc.perform( - post("/api/register") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(invalidUser))) - .andExpect(status().isBadRequest()); - - Optional user = userRepository.findOneByLogin("bob"); - assertThat(user.isPresent()).isFalse(); - } - - @Test - @Transactional - public void testRegisterInvalidPassword() throws Exception { - ManagedUserVM invalidUser = new ManagedUserVM(); - invalidUser.setLogin("bob"); - invalidUser.setPassword("123");// password with only 3 digits - invalidUser.setFirstName("Bob"); - invalidUser.setLastName("Green"); - invalidUser.setEmail("bob@example.com"); - invalidUser.setActivated(true); - invalidUser.setImageUrl("http://placehold.it/50x50"); - invalidUser.setLangKey(Constants.DEFAULT_LANGUAGE); - invalidUser.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); - - restUserMockMvc.perform( - post("/api/register") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(invalidUser))) - .andExpect(status().isBadRequest()); - - Optional user = userRepository.findOneByLogin("bob"); - assertThat(user.isPresent()).isFalse(); - } - - @Test - @Transactional - public void testRegisterNullPassword() throws Exception { - ManagedUserVM invalidUser = new ManagedUserVM(); - invalidUser.setLogin("bob"); - invalidUser.setPassword(null);// invalid null password - invalidUser.setFirstName("Bob"); - invalidUser.setLastName("Green"); - invalidUser.setEmail("bob@example.com"); - invalidUser.setActivated(true); - invalidUser.setImageUrl("http://placehold.it/50x50"); - invalidUser.setLangKey(Constants.DEFAULT_LANGUAGE); - invalidUser.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); - - restUserMockMvc.perform( - post("/api/register") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(invalidUser))) - .andExpect(status().isBadRequest()); - - Optional user = userRepository.findOneByLogin("bob"); - assertThat(user.isPresent()).isFalse(); - } - - @Test - @Transactional - public void testRegisterDuplicateLogin() throws Exception { - // First registration - ManagedUserVM firstUser = new ManagedUserVM(); - firstUser.setLogin("alice"); - firstUser.setPassword("password"); - firstUser.setFirstName("Alice"); - firstUser.setLastName("Something"); - firstUser.setEmail("alice@example.com"); - firstUser.setImageUrl("http://placehold.it/50x50"); - firstUser.setLangKey(Constants.DEFAULT_LANGUAGE); - firstUser.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); - - // Duplicate login, different email - ManagedUserVM secondUser = new ManagedUserVM(); - secondUser.setLogin(firstUser.getLogin()); - secondUser.setPassword(firstUser.getPassword()); - secondUser.setFirstName(firstUser.getFirstName()); - secondUser.setLastName(firstUser.getLastName()); - secondUser.setEmail("alice2@example.com"); - secondUser.setImageUrl(firstUser.getImageUrl()); - secondUser.setLangKey(firstUser.getLangKey()); - secondUser.setCreatedBy(firstUser.getCreatedBy()); - secondUser.setCreatedDate(firstUser.getCreatedDate()); - secondUser.setLastModifiedBy(firstUser.getLastModifiedBy()); - secondUser.setLastModifiedDate(firstUser.getLastModifiedDate()); - secondUser.setAuthorities(new HashSet<>(firstUser.getAuthorities())); - - // First user - restMvc.perform( - post("/api/register") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(firstUser))) - .andExpect(status().isCreated()); - - // Second (non activated) user - restMvc.perform( - post("/api/register") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(secondUser))) - .andExpect(status().isCreated()); - - Optional testUser = userRepository.findOneByEmailIgnoreCase("alice2@example.com"); - assertThat(testUser.isPresent()).isTrue(); - testUser.get().setActivated(true); - userRepository.save(testUser.get()); - - // Second (already activated) user - restMvc.perform( - post("/api/register") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(secondUser))) - .andExpect(status().is4xxClientError()); - } - - @Test - @Transactional - public void testRegisterDuplicateEmail() throws Exception { - // First user - ManagedUserVM firstUser = new ManagedUserVM(); - firstUser.setLogin("test-register-duplicate-email"); - firstUser.setPassword("password"); - firstUser.setFirstName("Alice"); - firstUser.setLastName("Test"); - firstUser.setEmail("test-register-duplicate-email@example.com"); - firstUser.setImageUrl("http://placehold.it/50x50"); - firstUser.setLangKey(Constants.DEFAULT_LANGUAGE); - firstUser.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); - - // Register first user - restMvc.perform( - post("/api/register") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(firstUser))) - .andExpect(status().isCreated()); - - Optional testUser1 = userRepository.findOneByLogin("test-register-duplicate-email"); - assertThat(testUser1.isPresent()).isTrue(); - - // Duplicate email, different login - ManagedUserVM secondUser = new ManagedUserVM(); - secondUser.setLogin("test-register-duplicate-email-2"); - secondUser.setPassword(firstUser.getPassword()); - secondUser.setFirstName(firstUser.getFirstName()); - secondUser.setLastName(firstUser.getLastName()); - secondUser.setEmail(firstUser.getEmail()); - secondUser.setImageUrl(firstUser.getImageUrl()); - secondUser.setLangKey(firstUser.getLangKey()); - secondUser.setAuthorities(new HashSet<>(firstUser.getAuthorities())); - - // Register second (non activated) user - restMvc.perform( - post("/api/register") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(secondUser))) - .andExpect(status().isCreated()); - - Optional testUser2 = userRepository.findOneByLogin("test-register-duplicate-email"); - assertThat(testUser2.isPresent()).isFalse(); - - Optional testUser3 = userRepository.findOneByLogin("test-register-duplicate-email-2"); - assertThat(testUser3.isPresent()).isTrue(); - - // Duplicate email - with uppercase email address - ManagedUserVM userWithUpperCaseEmail = new ManagedUserVM(); - userWithUpperCaseEmail.setId(firstUser.getId()); - userWithUpperCaseEmail.setLogin("test-register-duplicate-email-3"); - userWithUpperCaseEmail.setPassword(firstUser.getPassword()); - userWithUpperCaseEmail.setFirstName(firstUser.getFirstName()); - userWithUpperCaseEmail.setLastName(firstUser.getLastName()); - userWithUpperCaseEmail.setEmail("TEST-register-duplicate-email@example.com"); - userWithUpperCaseEmail.setImageUrl(firstUser.getImageUrl()); - userWithUpperCaseEmail.setLangKey(firstUser.getLangKey()); - userWithUpperCaseEmail.setAuthorities(new HashSet<>(firstUser.getAuthorities())); - - // Register third (not activated) user - restMvc.perform( - post("/api/register") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(userWithUpperCaseEmail))) - .andExpect(status().isCreated()); - - Optional testUser4 = userRepository.findOneByLogin("test-register-duplicate-email-3"); - assertThat(testUser4.isPresent()).isTrue(); - assertThat(testUser4.get().getEmail()).isEqualTo("test-register-duplicate-email@example.com"); - - testUser4.get().setActivated(true); - userService.updateUser((new UserDTO(testUser4.get()))); - - // Register 4th (already activated) user - restMvc.perform( - post("/api/register") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(secondUser))) - .andExpect(status().is4xxClientError()); - } - - @Test - @Transactional - public void testRegisterAdminIsIgnored() throws Exception { - ManagedUserVM validUser = new ManagedUserVM(); - validUser.setLogin("badguy"); - validUser.setPassword("password"); - validUser.setFirstName("Bad"); - validUser.setLastName("Guy"); - validUser.setEmail("badguy@example.com"); - validUser.setActivated(true); - validUser.setImageUrl("http://placehold.it/50x50"); - validUser.setLangKey(Constants.DEFAULT_LANGUAGE); - validUser.setAuthorities(Collections.singleton(AuthoritiesConstants.ADMIN)); - - restMvc.perform( - post("/api/register") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(validUser))) - .andExpect(status().isCreated()); - - Optional userDup = userRepository.findOneByLogin("badguy"); - assertThat(userDup.isPresent()).isTrue(); - assertThat(userDup.get().getAuthorities()).hasSize(1) - .containsExactly(authorityRepository.findById(AuthoritiesConstants.USER).get()); - } - - @Test - @Transactional - public void testActivateAccount() throws Exception { - final String activationKey = "some activation key"; - User user = new User(); - user.setLogin("activate-account"); - user.setEmail("activate-account@example.com"); - user.setPassword(RandomStringUtils.random(60)); - user.setActivated(false); - user.setActivationKey(activationKey); - - userRepository.saveAndFlush(user); - - restMvc.perform(get("/api/activate?key={activationKey}", activationKey)) - .andExpect(status().isOk()); - - user = userRepository.findOneByLogin(user.getLogin()).orElse(null); - assertThat(user.getActivated()).isTrue(); - } - - @Test - @Transactional - public void testActivateAccountWithWrongKey() throws Exception { - restMvc.perform(get("/api/activate?key=wrongActivationKey")) - .andExpect(status().isInternalServerError()); - } - - @Test - @Transactional - @WithMockUser("save-account") - public void testSaveAccount() throws Exception { - User user = new User(); - user.setLogin("save-account"); - user.setEmail("save-account@example.com"); - user.setPassword(RandomStringUtils.random(60)); - user.setActivated(true); - - userRepository.saveAndFlush(user); - - UserDTO userDTO = new UserDTO(); - userDTO.setLogin("not-used"); - userDTO.setFirstName("firstname"); - userDTO.setLastName("lastname"); - userDTO.setEmail("save-account@example.com"); - userDTO.setActivated(false); - userDTO.setImageUrl("http://placehold.it/50x50"); - userDTO.setLangKey(Constants.DEFAULT_LANGUAGE); - userDTO.setAuthorities(Collections.singleton(AuthoritiesConstants.ADMIN)); - - restMvc.perform( - post("/api/account") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(userDTO))) - .andExpect(status().isOk()); - - User updatedUser = userRepository.findOneByLogin(user.getLogin()).orElse(null); - assertThat(updatedUser.getFirstName()).isEqualTo(userDTO.getFirstName()); - assertThat(updatedUser.getLastName()).isEqualTo(userDTO.getLastName()); - assertThat(updatedUser.getEmail()).isEqualTo(userDTO.getEmail()); - assertThat(updatedUser.getLangKey()).isEqualTo(userDTO.getLangKey()); - assertThat(updatedUser.getPassword()).isEqualTo(user.getPassword()); - assertThat(updatedUser.getImageUrl()).isEqualTo(userDTO.getImageUrl()); - assertThat(updatedUser.getActivated()).isEqualTo(true); - assertThat(updatedUser.getAuthorities()).isEmpty(); - } - - @Test - @Transactional - @WithMockUser("save-invalid-email") - public void testSaveInvalidEmail() throws Exception { - User user = new User(); - user.setLogin("save-invalid-email"); - user.setEmail("save-invalid-email@example.com"); - user.setPassword(RandomStringUtils.random(60)); - user.setActivated(true); - - userRepository.saveAndFlush(user); - - UserDTO userDTO = new UserDTO(); - userDTO.setLogin("not-used"); - userDTO.setFirstName("firstname"); - userDTO.setLastName("lastname"); - userDTO.setEmail("invalid email"); - userDTO.setActivated(false); - userDTO.setImageUrl("http://placehold.it/50x50"); - userDTO.setLangKey(Constants.DEFAULT_LANGUAGE); - userDTO.setAuthorities(Collections.singleton(AuthoritiesConstants.ADMIN)); - - restMvc.perform( - post("/api/account") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(userDTO))) - .andExpect(status().isBadRequest()); - - assertThat(userRepository.findOneByEmailIgnoreCase("invalid email")).isNotPresent(); - } - - @Test - @Transactional - @WithMockUser("save-existing-email") - public void testSaveExistingEmail() throws Exception { - User user = new User(); - user.setLogin("save-existing-email"); - user.setEmail("save-existing-email@example.com"); - user.setPassword(RandomStringUtils.random(60)); - user.setActivated(true); - - userRepository.saveAndFlush(user); - - User anotherUser = new User(); - anotherUser.setLogin("save-existing-email2"); - anotherUser.setEmail("save-existing-email2@example.com"); - anotherUser.setPassword(RandomStringUtils.random(60)); - anotherUser.setActivated(true); - - userRepository.saveAndFlush(anotherUser); - - UserDTO userDTO = new UserDTO(); - userDTO.setLogin("not-used"); - userDTO.setFirstName("firstname"); - userDTO.setLastName("lastname"); - userDTO.setEmail("save-existing-email2@example.com"); - userDTO.setActivated(false); - userDTO.setImageUrl("http://placehold.it/50x50"); - userDTO.setLangKey(Constants.DEFAULT_LANGUAGE); - userDTO.setAuthorities(Collections.singleton(AuthoritiesConstants.ADMIN)); - - restMvc.perform( - post("/api/account") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(userDTO))) - .andExpect(status().isBadRequest()); - - User updatedUser = userRepository.findOneByLogin("save-existing-email").orElse(null); - assertThat(updatedUser.getEmail()).isEqualTo("save-existing-email@example.com"); - } - - @Test - @Transactional - @WithMockUser("save-existing-email-and-login") - public void testSaveExistingEmailAndLogin() throws Exception { - User user = new User(); - user.setLogin("save-existing-email-and-login"); - user.setEmail("save-existing-email-and-login@example.com"); - user.setPassword(RandomStringUtils.random(60)); - user.setActivated(true); - - userRepository.saveAndFlush(user); - - UserDTO userDTO = new UserDTO(); - userDTO.setLogin("not-used"); - userDTO.setFirstName("firstname"); - userDTO.setLastName("lastname"); - userDTO.setEmail("save-existing-email-and-login@example.com"); - userDTO.setActivated(false); - userDTO.setImageUrl("http://placehold.it/50x50"); - userDTO.setLangKey(Constants.DEFAULT_LANGUAGE); - userDTO.setAuthorities(Collections.singleton(AuthoritiesConstants.ADMIN)); - - restMvc.perform( - post("/api/account") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(userDTO))) - .andExpect(status().isOk()); - - User updatedUser = userRepository.findOneByLogin("save-existing-email-and-login").orElse(null); - assertThat(updatedUser.getEmail()).isEqualTo("save-existing-email-and-login@example.com"); - } - - @Test - @Transactional - @WithMockUser("change-password-wrong-existing-password") - public void testChangePasswordWrongExistingPassword() throws Exception { - User user = new User(); - String currentPassword = RandomStringUtils.random(60); - user.setPassword(passwordEncoder.encode(currentPassword)); - user.setLogin("change-password-wrong-existing-password"); - user.setEmail("change-password-wrong-existing-password@example.com"); - userRepository.saveAndFlush(user); - - restMvc.perform(post("/api/account/change-password") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(new PasswordChangeDTO("1"+currentPassword, "new password")))) - .andExpect(status().isBadRequest()); - - User updatedUser = userRepository.findOneByLogin("change-password-wrong-existing-password").orElse(null); - assertThat(passwordEncoder.matches("new password", updatedUser.getPassword())).isFalse(); - assertThat(passwordEncoder.matches(currentPassword, updatedUser.getPassword())).isTrue(); - } - - @Test - @Transactional - @WithMockUser("change-password") - public void testChangePassword() throws Exception { - User user = new User(); - String currentPassword = RandomStringUtils.random(60); - user.setPassword(passwordEncoder.encode(currentPassword)); - user.setLogin("change-password"); - user.setEmail("change-password@example.com"); - userRepository.saveAndFlush(user); - - restMvc.perform(post("/api/account/change-password") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(new PasswordChangeDTO(currentPassword, "new password")))) - .andExpect(status().isOk()); - - User updatedUser = userRepository.findOneByLogin("change-password").orElse(null); - assertThat(passwordEncoder.matches("new password", updatedUser.getPassword())).isTrue(); - } - - @Test - @Transactional - @WithMockUser("change-password-too-small") - public void testChangePasswordTooSmall() throws Exception { - User user = new User(); - String currentPassword = RandomStringUtils.random(60); - user.setPassword(passwordEncoder.encode(currentPassword)); - user.setLogin("change-password-too-small"); - user.setEmail("change-password-too-small@example.com"); - userRepository.saveAndFlush(user); - - String newPassword = RandomStringUtils.random(ManagedUserVM.PASSWORD_MIN_LENGTH - 1); - - restMvc.perform(post("/api/account/change-password") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(new PasswordChangeDTO(currentPassword, newPassword)))) - .andExpect(status().isBadRequest()); - - User updatedUser = userRepository.findOneByLogin("change-password-too-small").orElse(null); - assertThat(updatedUser.getPassword()).isEqualTo(user.getPassword()); - } - - @Test - @Transactional - @WithMockUser("change-password-too-long") - public void testChangePasswordTooLong() throws Exception { - User user = new User(); - String currentPassword = RandomStringUtils.random(60); - user.setPassword(passwordEncoder.encode(currentPassword)); - user.setLogin("change-password-too-long"); - user.setEmail("change-password-too-long@example.com"); - userRepository.saveAndFlush(user); - - String newPassword = RandomStringUtils.random(ManagedUserVM.PASSWORD_MAX_LENGTH + 1); - - restMvc.perform(post("/api/account/change-password") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(new PasswordChangeDTO(currentPassword, newPassword)))) - .andExpect(status().isBadRequest()); - - User updatedUser = userRepository.findOneByLogin("change-password-too-long").orElse(null); - assertThat(updatedUser.getPassword()).isEqualTo(user.getPassword()); - } - - @Test - @Transactional - @WithMockUser("change-password-empty") - public void testChangePasswordEmpty() throws Exception { - User user = new User(); - String currentPassword = RandomStringUtils.random(60); - user.setPassword(passwordEncoder.encode(currentPassword)); - user.setLogin("change-password-empty"); - user.setEmail("change-password-empty@example.com"); - userRepository.saveAndFlush(user); - - restMvc.perform(post("/api/account/change-password") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(new PasswordChangeDTO(currentPassword, "")))) - .andExpect(status().isBadRequest()); - - User updatedUser = userRepository.findOneByLogin("change-password-empty").orElse(null); - assertThat(updatedUser.getPassword()).isEqualTo(user.getPassword()); - } - - @Test - @Transactional - public void testRequestPasswordReset() throws Exception { - User user = new User(); - user.setPassword(RandomStringUtils.random(60)); - user.setActivated(true); - user.setLogin("password-reset"); - user.setEmail("password-reset@example.com"); - userRepository.saveAndFlush(user); - - restMvc.perform(post("/api/account/reset-password/init") - .content("password-reset@example.com")) - .andExpect(status().isOk()); - } - - @Test - @Transactional - public void testRequestPasswordResetUpperCaseEmail() throws Exception { - User user = new User(); - user.setPassword(RandomStringUtils.random(60)); - user.setActivated(true); - user.setLogin("password-reset"); - user.setEmail("password-reset@example.com"); - userRepository.saveAndFlush(user); - - restMvc.perform(post("/api/account/reset-password/init") - .content("password-reset@EXAMPLE.COM")) - .andExpect(status().isOk()); - } - - @Test - public void testRequestPasswordResetWrongEmail() throws Exception { - restMvc.perform( - post("/api/account/reset-password/init") - .content("password-reset-wrong-email@example.com")) - .andExpect(status().isBadRequest()); - } - - @Test - @Transactional - public void testFinishPasswordReset() throws Exception { - User user = new User(); - user.setPassword(RandomStringUtils.random(60)); - user.setLogin("finish-password-reset"); - user.setEmail("finish-password-reset@example.com"); - user.setResetDate(Instant.now().plusSeconds(60)); - user.setResetKey("reset key"); - userRepository.saveAndFlush(user); - - KeyAndPasswordVM keyAndPassword = new KeyAndPasswordVM(); - keyAndPassword.setKey(user.getResetKey()); - keyAndPassword.setNewPassword("new password"); - - restMvc.perform( - post("/api/account/reset-password/finish") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(keyAndPassword))) - .andExpect(status().isOk()); - - User updatedUser = userRepository.findOneByLogin(user.getLogin()).orElse(null); - assertThat(passwordEncoder.matches(keyAndPassword.getNewPassword(), updatedUser.getPassword())).isTrue(); - } - - @Test - @Transactional - public void testFinishPasswordResetTooSmall() throws Exception { - User user = new User(); - user.setPassword(RandomStringUtils.random(60)); - user.setLogin("finish-password-reset-too-small"); - user.setEmail("finish-password-reset-too-small@example.com"); - user.setResetDate(Instant.now().plusSeconds(60)); - user.setResetKey("reset key too small"); - userRepository.saveAndFlush(user); - - KeyAndPasswordVM keyAndPassword = new KeyAndPasswordVM(); - keyAndPassword.setKey(user.getResetKey()); - keyAndPassword.setNewPassword("foo"); - - restMvc.perform( - post("/api/account/reset-password/finish") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(keyAndPassword))) - .andExpect(status().isBadRequest()); - - User updatedUser = userRepository.findOneByLogin(user.getLogin()).orElse(null); - assertThat(passwordEncoder.matches(keyAndPassword.getNewPassword(), updatedUser.getPassword())).isFalse(); - } - - - @Test - @Transactional - public void testFinishPasswordResetWrongKey() throws Exception { - KeyAndPasswordVM keyAndPassword = new KeyAndPasswordVM(); - keyAndPassword.setKey("wrong reset key"); - keyAndPassword.setNewPassword("new password"); - - restMvc.perform( - post("/api/account/reset-password/finish") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(keyAndPassword))) - .andExpect(status().isInternalServerError()); - } -} diff --git a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/AuditResourceIntegrationTest.java b/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/AuditResourceIntegrationTest.java deleted file mode 100644 index 05d8f9d503be..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/AuditResourceIntegrationTest.java +++ /dev/null @@ -1,162 +0,0 @@ -package com.baeldung.jhipster5.web.rest; - -import com.baeldung.jhipster5.BookstoreApp; -import com.baeldung.jhipster5.config.audit.AuditEventConverter; -import com.baeldung.jhipster5.domain.PersistentAuditEvent; -import com.baeldung.jhipster5.repository.PersistenceAuditEventRepository; -import com.baeldung.jhipster5.service.AuditEventService; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.MockitoAnnotations; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.data.web.PageableHandlerMethodArgumentResolver; -import org.springframework.format.support.FormattingConversionService; -import org.springframework.http.MediaType; -import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; -import org.springframework.test.context.junit4.SpringRunner; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; -import org.springframework.transaction.annotation.Transactional; - -import java.time.Instant; - -import static org.assertj.core.api.AssertionsForClassTypes.assertThat; -import static org.hamcrest.Matchers.hasItem; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -/** - * Test class for the AuditResource REST controller. - * - * @see AuditResource - */ -@RunWith(SpringRunner.class) -@SpringBootTest(classes = BookstoreApp.class) -@Transactional -public class AuditResourceIntegrationTest { - - private static final String SAMPLE_PRINCIPAL = "SAMPLE_PRINCIPAL"; - private static final String SAMPLE_TYPE = "SAMPLE_TYPE"; - private static final Instant SAMPLE_TIMESTAMP = Instant.parse("2015-08-04T10:11:30Z"); - private static final long SECONDS_PER_DAY = 60 * 60 * 24; - - @Autowired - private PersistenceAuditEventRepository auditEventRepository; - - @Autowired - private AuditEventConverter auditEventConverter; - - @Autowired - private MappingJackson2HttpMessageConverter jacksonMessageConverter; - - @Autowired - private FormattingConversionService formattingConversionService; - - @Autowired - private PageableHandlerMethodArgumentResolver pageableArgumentResolver; - - private PersistentAuditEvent auditEvent; - - private MockMvc restAuditMockMvc; - - @Before - public void setup() { - MockitoAnnotations.initMocks(this); - AuditEventService auditEventService = - new AuditEventService(auditEventRepository, auditEventConverter); - AuditResource auditResource = new AuditResource(auditEventService); - this.restAuditMockMvc = MockMvcBuilders.standaloneSetup(auditResource) - .setCustomArgumentResolvers(pageableArgumentResolver) - .setConversionService(formattingConversionService) - .setMessageConverters(jacksonMessageConverter).build(); - } - - @Before - public void initTest() { - auditEventRepository.deleteAll(); - auditEvent = new PersistentAuditEvent(); - auditEvent.setAuditEventType(SAMPLE_TYPE); - auditEvent.setPrincipal(SAMPLE_PRINCIPAL); - auditEvent.setAuditEventDate(SAMPLE_TIMESTAMP); - } - - @Test - public void getAllAudits() throws Exception { - // Initialize the database - auditEventRepository.save(auditEvent); - - // Get all the audits - restAuditMockMvc.perform(get("/management/audits")) - .andExpect(status().isOk()) - .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) - .andExpect(jsonPath("$.[*].principal").value(hasItem(SAMPLE_PRINCIPAL))); - } - - @Test - public void getAudit() throws Exception { - // Initialize the database - auditEventRepository.save(auditEvent); - - // Get the audit - restAuditMockMvc.perform(get("/management/audits/{id}", auditEvent.getId())) - .andExpect(status().isOk()) - .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) - .andExpect(jsonPath("$.principal").value(SAMPLE_PRINCIPAL)); - } - - @Test - public void getAuditsByDate() throws Exception { - // Initialize the database - auditEventRepository.save(auditEvent); - - // Generate dates for selecting audits by date, making sure the period will contain the audit - String fromDate = SAMPLE_TIMESTAMP.minusSeconds(SECONDS_PER_DAY).toString().substring(0, 10); - String toDate = SAMPLE_TIMESTAMP.plusSeconds(SECONDS_PER_DAY).toString().substring(0, 10); - - // Get the audit - restAuditMockMvc.perform(get("/management/audits?fromDate="+fromDate+"&toDate="+toDate)) - .andExpect(status().isOk()) - .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) - .andExpect(jsonPath("$.[*].principal").value(hasItem(SAMPLE_PRINCIPAL))); - } - - @Test - public void getNonExistingAuditsByDate() throws Exception { - // Initialize the database - auditEventRepository.save(auditEvent); - - // Generate dates for selecting audits by date, making sure the period will not contain the sample audit - String fromDate = SAMPLE_TIMESTAMP.minusSeconds(2*SECONDS_PER_DAY).toString().substring(0, 10); - String toDate = SAMPLE_TIMESTAMP.minusSeconds(SECONDS_PER_DAY).toString().substring(0, 10); - - // Query audits but expect no results - restAuditMockMvc.perform(get("/management/audits?fromDate=" + fromDate + "&toDate=" + toDate)) - .andExpect(status().isOk()) - .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) - .andExpect(header().string("X-Total-Count", "0")); - } - - @Test - public void getNonExistingAudit() throws Exception { - // Get the audit - restAuditMockMvc.perform(get("/management/audits/{id}", Long.MAX_VALUE)) - .andExpect(status().isNotFound()); - } - - @Test - @Transactional - public void testPersistentAuditEventEquals() throws Exception { - TestUtil.equalsVerifier(PersistentAuditEvent.class); - PersistentAuditEvent auditEvent1 = new PersistentAuditEvent(); - auditEvent1.setId(1L); - PersistentAuditEvent auditEvent2 = new PersistentAuditEvent(); - auditEvent2.setId(auditEvent1.getId()); - assertThat(auditEvent1).isEqualTo(auditEvent2); - auditEvent2.setId(2L); - assertThat(auditEvent1).isNotEqualTo(auditEvent2); - auditEvent1.setId(null); - assertThat(auditEvent1).isNotEqualTo(auditEvent2); - } -} diff --git a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/BookResourceIntegrationTest.java b/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/BookResourceIntegrationTest.java deleted file mode 100644 index 4f5cb25cdb85..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/BookResourceIntegrationTest.java +++ /dev/null @@ -1,416 +0,0 @@ -package com.baeldung.jhipster5.web.rest; - -import com.baeldung.jhipster5.BookstoreApp; - -import com.baeldung.jhipster5.domain.Book; -import com.baeldung.jhipster5.repository.BookRepository; -import com.baeldung.jhipster5.service.BookService; -import com.baeldung.jhipster5.service.dto.BookDTO; -import com.baeldung.jhipster5.service.mapper.BookMapper; -import com.baeldung.jhipster5.web.rest.errors.ExceptionTranslator; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.MockitoAnnotations; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.data.web.PageableHandlerMethodArgumentResolver; -import org.springframework.http.MediaType; -import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; -import org.springframework.test.context.junit4.SpringRunner; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.validation.Validator; - -import javax.persistence.EntityManager; -import java.time.LocalDate; -import java.time.ZoneId; -import java.util.List; - - -import static com.baeldung.jhipster5.web.rest.TestUtil.createFormattingConversionService; -import static org.assertj.core.api.Assertions.assertThat; -import static org.hamcrest.Matchers.hasItem; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -/** - * Test class for the BookResource REST controller. - * - * @see BookResource - */ -@RunWith(SpringRunner.class) -@SpringBootTest(classes = BookstoreApp.class) -public class BookResourceIntegrationTest { - - private static final String DEFAULT_TITLE = "AAAAAAAAAA"; - private static final String UPDATED_TITLE = "BBBBBBBBBB"; - - private static final String DEFAULT_AUTHOR = "AAAAAAAAAA"; - private static final String UPDATED_AUTHOR = "BBBBBBBBBB"; - - private static final LocalDate DEFAULT_PUBLISHED = LocalDate.ofEpochDay(0L); - private static final LocalDate UPDATED_PUBLISHED = LocalDate.now(ZoneId.systemDefault()); - - private static final Integer DEFAULT_QUANTITY = 0; - private static final Integer UPDATED_QUANTITY = 1; - - private static final Double DEFAULT_PRICE = 0D; - private static final Double UPDATED_PRICE = 1D; - - @Autowired - private BookRepository bookRepository; - - @Autowired - private BookMapper bookMapper; - - @Autowired - private BookService bookService; - - @Autowired - private MappingJackson2HttpMessageConverter jacksonMessageConverter; - - @Autowired - private PageableHandlerMethodArgumentResolver pageableArgumentResolver; - - @Autowired - private ExceptionTranslator exceptionTranslator; - - @Autowired - private EntityManager em; - - @Autowired - private Validator validator; - - private MockMvc restBookMockMvc; - - private Book book; - - @Before - public void setup() { - MockitoAnnotations.initMocks(this); - final BookResource bookResource = new BookResource(bookService); - this.restBookMockMvc = MockMvcBuilders.standaloneSetup(bookResource) - .setCustomArgumentResolvers(pageableArgumentResolver) - .setControllerAdvice(exceptionTranslator) - .setConversionService(createFormattingConversionService()) - .setMessageConverters(jacksonMessageConverter) - .setValidator(validator).build(); - } - - /** - * Create an entity for this test. - * - * This is a static method, as tests for other entities might also need it, - * if they test an entity which requires the current entity. - */ - public static Book createEntity(EntityManager em) { - Book book = new Book() - .title(DEFAULT_TITLE) - .author(DEFAULT_AUTHOR) - .published(DEFAULT_PUBLISHED) - .quantity(DEFAULT_QUANTITY) - .price(DEFAULT_PRICE); - return book; - } - - @Before - public void initTest() { - book = createEntity(em); - } - - @Test - @Transactional - public void createBook() throws Exception { - int databaseSizeBeforeCreate = bookRepository.findAll().size(); - - // Create the Book - BookDTO bookDTO = bookMapper.toDto(book); - restBookMockMvc.perform(post("/api/books") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(bookDTO))) - .andExpect(status().isCreated()); - - // Validate the Book in the database - List bookList = bookRepository.findAll(); - assertThat(bookList).hasSize(databaseSizeBeforeCreate + 1); - Book testBook = bookList.get(bookList.size() - 1); - assertThat(testBook.getTitle()).isEqualTo(DEFAULT_TITLE); - assertThat(testBook.getAuthor()).isEqualTo(DEFAULT_AUTHOR); - assertThat(testBook.getPublished()).isEqualTo(DEFAULT_PUBLISHED); - assertThat(testBook.getQuantity()).isEqualTo(DEFAULT_QUANTITY); - assertThat(testBook.getPrice()).isEqualTo(DEFAULT_PRICE); - } - - @Test - @Transactional - public void createBookWithExistingId() throws Exception { - int databaseSizeBeforeCreate = bookRepository.findAll().size(); - - // Create the Book with an existing ID - book.setId(1L); - BookDTO bookDTO = bookMapper.toDto(book); - - // An entity with an existing ID cannot be created, so this API call must fail - restBookMockMvc.perform(post("/api/books") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(bookDTO))) - .andExpect(status().isBadRequest()); - - // Validate the Book in the database - List bookList = bookRepository.findAll(); - assertThat(bookList).hasSize(databaseSizeBeforeCreate); - } - - @Test - @Transactional - public void checkTitleIsRequired() throws Exception { - int databaseSizeBeforeTest = bookRepository.findAll().size(); - // set the field null - book.setTitle(null); - - // Create the Book, which fails. - BookDTO bookDTO = bookMapper.toDto(book); - - restBookMockMvc.perform(post("/api/books") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(bookDTO))) - .andExpect(status().isBadRequest()); - - List bookList = bookRepository.findAll(); - assertThat(bookList).hasSize(databaseSizeBeforeTest); - } - - @Test - @Transactional - public void checkAuthorIsRequired() throws Exception { - int databaseSizeBeforeTest = bookRepository.findAll().size(); - // set the field null - book.setAuthor(null); - - // Create the Book, which fails. - BookDTO bookDTO = bookMapper.toDto(book); - - restBookMockMvc.perform(post("/api/books") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(bookDTO))) - .andExpect(status().isBadRequest()); - - List bookList = bookRepository.findAll(); - assertThat(bookList).hasSize(databaseSizeBeforeTest); - } - - @Test - @Transactional - public void checkPublishedIsRequired() throws Exception { - int databaseSizeBeforeTest = bookRepository.findAll().size(); - // set the field null - book.setPublished(null); - - // Create the Book, which fails. - BookDTO bookDTO = bookMapper.toDto(book); - - restBookMockMvc.perform(post("/api/books") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(bookDTO))) - .andExpect(status().isBadRequest()); - - List bookList = bookRepository.findAll(); - assertThat(bookList).hasSize(databaseSizeBeforeTest); - } - - @Test - @Transactional - public void checkQuantityIsRequired() throws Exception { - int databaseSizeBeforeTest = bookRepository.findAll().size(); - // set the field null - book.setQuantity(null); - - // Create the Book, which fails. - BookDTO bookDTO = bookMapper.toDto(book); - - restBookMockMvc.perform(post("/api/books") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(bookDTO))) - .andExpect(status().isBadRequest()); - - List bookList = bookRepository.findAll(); - assertThat(bookList).hasSize(databaseSizeBeforeTest); - } - - @Test - @Transactional - public void checkPriceIsRequired() throws Exception { - int databaseSizeBeforeTest = bookRepository.findAll().size(); - // set the field null - book.setPrice(null); - - // Create the Book, which fails. - BookDTO bookDTO = bookMapper.toDto(book); - - restBookMockMvc.perform(post("/api/books") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(bookDTO))) - .andExpect(status().isBadRequest()); - - List bookList = bookRepository.findAll(); - assertThat(bookList).hasSize(databaseSizeBeforeTest); - } - - @Test - @Transactional - public void getAllBooks() throws Exception { - // Initialize the database - bookRepository.saveAndFlush(book); - - // Get all the bookList - restBookMockMvc.perform(get("/api/books?sort=id,desc")) - .andExpect(status().isOk()) - .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) - .andExpect(jsonPath("$.[*].id").value(hasItem(book.getId().intValue()))) - .andExpect(jsonPath("$.[*].title").value(hasItem(DEFAULT_TITLE.toString()))) - .andExpect(jsonPath("$.[*].author").value(hasItem(DEFAULT_AUTHOR.toString()))) - .andExpect(jsonPath("$.[*].published").value(hasItem(DEFAULT_PUBLISHED.toString()))) - .andExpect(jsonPath("$.[*].quantity").value(hasItem(DEFAULT_QUANTITY))) - .andExpect(jsonPath("$.[*].price").value(hasItem(DEFAULT_PRICE.doubleValue()))); - } - - @Test - @Transactional - public void getBook() throws Exception { - // Initialize the database - bookRepository.saveAndFlush(book); - - // Get the book - restBookMockMvc.perform(get("/api/books/{id}", book.getId())) - .andExpect(status().isOk()) - .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) - .andExpect(jsonPath("$.id").value(book.getId().intValue())) - .andExpect(jsonPath("$.title").value(DEFAULT_TITLE.toString())) - .andExpect(jsonPath("$.author").value(DEFAULT_AUTHOR.toString())) - .andExpect(jsonPath("$.published").value(DEFAULT_PUBLISHED.toString())) - .andExpect(jsonPath("$.quantity").value(DEFAULT_QUANTITY)) - .andExpect(jsonPath("$.price").value(DEFAULT_PRICE.doubleValue())); - } - - @Test - @Transactional - public void getNonExistingBook() throws Exception { - // Get the book - restBookMockMvc.perform(get("/api/books/{id}", Long.MAX_VALUE)) - .andExpect(status().isNotFound()); - } - - @Test - @Transactional - public void updateBook() throws Exception { - // Initialize the database - bookRepository.saveAndFlush(book); - - int databaseSizeBeforeUpdate = bookRepository.findAll().size(); - - // Update the book - Book updatedBook = bookRepository.findById(book.getId()).get(); - // Disconnect from session so that the updates on updatedBook are not directly saved in db - em.detach(updatedBook); - updatedBook - .title(UPDATED_TITLE) - .author(UPDATED_AUTHOR) - .published(UPDATED_PUBLISHED) - .quantity(UPDATED_QUANTITY) - .price(UPDATED_PRICE); - BookDTO bookDTO = bookMapper.toDto(updatedBook); - - restBookMockMvc.perform(put("/api/books") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(bookDTO))) - .andExpect(status().isOk()); - - // Validate the Book in the database - List bookList = bookRepository.findAll(); - assertThat(bookList).hasSize(databaseSizeBeforeUpdate); - Book testBook = bookList.get(bookList.size() - 1); - assertThat(testBook.getTitle()).isEqualTo(UPDATED_TITLE); - assertThat(testBook.getAuthor()).isEqualTo(UPDATED_AUTHOR); - assertThat(testBook.getPublished()).isEqualTo(UPDATED_PUBLISHED); - assertThat(testBook.getQuantity()).isEqualTo(UPDATED_QUANTITY); - assertThat(testBook.getPrice()).isEqualTo(UPDATED_PRICE); - } - - @Test - @Transactional - public void updateNonExistingBook() throws Exception { - int databaseSizeBeforeUpdate = bookRepository.findAll().size(); - - // Create the Book - BookDTO bookDTO = bookMapper.toDto(book); - - // If the entity doesn't have an ID, it will throw BadRequestAlertException - restBookMockMvc.perform(put("/api/books") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(bookDTO))) - .andExpect(status().isBadRequest()); - - // Validate the Book in the database - List bookList = bookRepository.findAll(); - assertThat(bookList).hasSize(databaseSizeBeforeUpdate); - } - - @Test - @Transactional - public void deleteBook() throws Exception { - // Initialize the database - bookRepository.saveAndFlush(book); - - int databaseSizeBeforeDelete = bookRepository.findAll().size(); - - // Delete the book - restBookMockMvc.perform(delete("/api/books/{id}", book.getId()) - .accept(TestUtil.APPLICATION_JSON_UTF8)) - .andExpect(status().isOk()); - - // Validate the database is empty - List bookList = bookRepository.findAll(); - assertThat(bookList).hasSize(databaseSizeBeforeDelete - 1); - } - - @Test - @Transactional - public void equalsVerifier() throws Exception { - TestUtil.equalsVerifier(Book.class); - Book book1 = new Book(); - book1.setId(1L); - Book book2 = new Book(); - book2.setId(book1.getId()); - assertThat(book1).isEqualTo(book2); - book2.setId(2L); - assertThat(book1).isNotEqualTo(book2); - book1.setId(null); - assertThat(book1).isNotEqualTo(book2); - } - - @Test - @Transactional - public void dtoEqualsVerifier() throws Exception { - TestUtil.equalsVerifier(BookDTO.class); - BookDTO bookDTO1 = new BookDTO(); - bookDTO1.setId(1L); - BookDTO bookDTO2 = new BookDTO(); - assertThat(bookDTO1).isNotEqualTo(bookDTO2); - bookDTO2.setId(bookDTO1.getId()); - assertThat(bookDTO1).isEqualTo(bookDTO2); - bookDTO2.setId(2L); - assertThat(bookDTO1).isNotEqualTo(bookDTO2); - bookDTO1.setId(null); - assertThat(bookDTO1).isNotEqualTo(bookDTO2); - } - - @Test - @Transactional - public void testEntityFromId() { - assertThat(bookMapper.fromId(42L).getId()).isEqualTo(42); - assertThat(bookMapper.fromId(null)).isNull(); - } -} diff --git a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/LogsResourceIntegrationTest.java b/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/LogsResourceIntegrationTest.java deleted file mode 100644 index b045f52f873e..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/LogsResourceIntegrationTest.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.baeldung.jhipster5.web.rest; - -import com.baeldung.jhipster5.BookstoreApp; -import com.baeldung.jhipster5.web.rest.vm.LoggerVM; -import ch.qos.logback.classic.AsyncAppender; -import ch.qos.logback.classic.LoggerContext; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.slf4j.LoggerFactory; -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.setup.MockMvcBuilders; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; - -/** - * Test class for the LogsResource REST controller. - * - * @see LogsResource - */ -@RunWith(SpringRunner.class) -@SpringBootTest(classes = BookstoreApp.class) -public class LogsResourceIntegrationTest { - - private MockMvc restLogsMockMvc; - - @Before - public void setup() { - LogsResource logsResource = new LogsResource(); - this.restLogsMockMvc = MockMvcBuilders - .standaloneSetup(logsResource) - .build(); - } - - @Test - public void getAllLogs() throws Exception { - restLogsMockMvc.perform(get("/management/logs")) - .andExpect(status().isOk()) - .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)); - } - - @Test - public void changeLogs() throws Exception { - LoggerVM logger = new LoggerVM(); - logger.setLevel("INFO"); - logger.setName("ROOT"); - - restLogsMockMvc.perform(put("/management/logs") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(logger))) - .andExpect(status().isNoContent()); - } - - @Test - public void testLogstashAppender() { - LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); - assertThat(context.getLogger("ROOT").getAppender("ASYNC_LOGSTASH")).isInstanceOf(AsyncAppender.class); - } -} diff --git a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/TestUtil.java b/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/TestUtil.java deleted file mode 100644 index 403bb9c9b046..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/TestUtil.java +++ /dev/null @@ -1,141 +0,0 @@ -package com.baeldung.jhipster5.web.rest; - -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; -import org.hamcrest.Description; -import org.hamcrest.TypeSafeDiagnosingMatcher; -import org.springframework.format.datetime.standard.DateTimeFormatterRegistrar; -import org.springframework.format.support.DefaultFormattingConversionService; -import org.springframework.format.support.FormattingConversionService; -import org.springframework.http.MediaType; - -import java.io.IOException; -import java.nio.charset.StandardCharsets; -import java.time.ZonedDateTime; -import java.time.format.DateTimeParseException; - -import static org.assertj.core.api.Assertions.assertThat; - -/** - * Utility class for testing REST controllers. - */ -public final class TestUtil { - - private static final ObjectMapper mapper = createObjectMapper(); - - /** MediaType for JSON UTF8 */ - public static final MediaType APPLICATION_JSON_UTF8 = new MediaType( - MediaType.APPLICATION_JSON.getType(), - MediaType.APPLICATION_JSON.getSubtype(), StandardCharsets.UTF_8); - - - private static ObjectMapper createObjectMapper() { - ObjectMapper mapper = new ObjectMapper(); - mapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY); - mapper.registerModule(new JavaTimeModule()); - return mapper; - } - - /** - * Convert an object to JSON byte array. - * - * @param object - * the object to convert - * @return the JSON byte array - * @throws IOException - */ - public static byte[] convertObjectToJsonBytes(Object object) - throws IOException { - return mapper.writeValueAsBytes(object); - } - - /** - * Create a byte array with a specific size filled with specified data. - * - * @param size the size of the byte array - * @param data the data to put in the byte array - * @return the JSON byte array - */ - public static byte[] createByteArray(int size, String data) { - byte[] byteArray = new byte[size]; - for (int i = 0; i < size; i++) { - byteArray[i] = Byte.parseByte(data, 2); - } - return byteArray; - } - - /** - * A matcher that tests that the examined string represents the same instant as the reference datetime. - */ - public static class ZonedDateTimeMatcher extends TypeSafeDiagnosingMatcher { - - private final ZonedDateTime date; - - public ZonedDateTimeMatcher(ZonedDateTime date) { - this.date = date; - } - - @Override - protected boolean matchesSafely(String item, Description mismatchDescription) { - try { - if (!date.isEqual(ZonedDateTime.parse(item))) { - mismatchDescription.appendText("was ").appendValue(item); - return false; - } - return true; - } catch (DateTimeParseException e) { - mismatchDescription.appendText("was ").appendValue(item) - .appendText(", which could not be parsed as a ZonedDateTime"); - return false; - } - - } - - @Override - public void describeTo(Description description) { - description.appendText("a String representing the same Instant as ").appendValue(date); - } - } - - /** - * Creates a matcher that matches when the examined string reprensents the same instant as the reference datetime - * @param date the reference datetime against which the examined string is checked - */ - public static ZonedDateTimeMatcher sameInstant(ZonedDateTime date) { - return new ZonedDateTimeMatcher(date); - } - - /** - * Verifies the equals/hashcode contract on the domain object. - */ - public static void equalsVerifier(Class clazz) throws Exception { - T domainObject1 = clazz.getConstructor().newInstance(); - assertThat(domainObject1.toString()).isNotNull(); - assertThat(domainObject1).isEqualTo(domainObject1); - assertThat(domainObject1.hashCode()).isEqualTo(domainObject1.hashCode()); - // Test with an instance of another class - Object testOtherObject = new Object(); - assertThat(domainObject1).isNotEqualTo(testOtherObject); - assertThat(domainObject1).isNotEqualTo(null); - // Test with an instance of the same class - T domainObject2 = clazz.getConstructor().newInstance(); - assertThat(domainObject1).isNotEqualTo(domainObject2); - // HashCodes are equals because the objects are not persisted yet - assertThat(domainObject1.hashCode()).isEqualTo(domainObject2.hashCode()); - } - - /** - * Create a FormattingConversionService which use ISO date format, instead of the localized one. - * @return the FormattingConversionService - */ - public static FormattingConversionService createFormattingConversionService() { - DefaultFormattingConversionService dfcs = new DefaultFormattingConversionService (); - DateTimeFormatterRegistrar registrar = new DateTimeFormatterRegistrar(); - registrar.setUseIsoFormat(true); - registrar.registerFormatters(dfcs); - return dfcs; - } - - private TestUtil() {} -} diff --git a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/UserJWTControllerIntegrationTest.java b/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/UserJWTControllerIntegrationTest.java deleted file mode 100644 index 7cfc0e19fc2f..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/UserJWTControllerIntegrationTest.java +++ /dev/null @@ -1,125 +0,0 @@ -package com.baeldung.jhipster5.web.rest; - -import com.baeldung.jhipster5.BookstoreApp; -import com.baeldung.jhipster5.domain.User; -import com.baeldung.jhipster5.repository.UserRepository; -import com.baeldung.jhipster5.security.jwt.TokenProvider; -import com.baeldung.jhipster5.web.rest.errors.ExceptionTranslator; -import com.baeldung.jhipster5.web.rest.vm.LoginVM; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.security.authentication.AuthenticationManager; -import org.springframework.security.crypto.password.PasswordEncoder; -import org.springframework.test.context.junit4.SpringRunner; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; -import org.springframework.transaction.annotation.Transactional; - -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.header; -import static org.hamcrest.Matchers.nullValue; -import static org.hamcrest.Matchers.isEmptyString; -import static org.hamcrest.Matchers.not; - -/** - * Test class for the UserJWTController REST controller. - * - * @see UserJWTController - */ -@RunWith(SpringRunner.class) -@SpringBootTest(classes = BookstoreApp.class) -public class UserJWTControllerIntegrationTest { - - @Autowired - private TokenProvider tokenProvider; - - @Autowired - private AuthenticationManager authenticationManager; - - @Autowired - private UserRepository userRepository; - - @Autowired - private PasswordEncoder passwordEncoder; - - @Autowired - private ExceptionTranslator exceptionTranslator; - - private MockMvc mockMvc; - - @Before - public void setup() { - UserJWTController userJWTController = new UserJWTController(tokenProvider, authenticationManager); - this.mockMvc = MockMvcBuilders.standaloneSetup(userJWTController) - .setControllerAdvice(exceptionTranslator) - .build(); - } - - @Test - @Transactional - public void testAuthorize() throws Exception { - User user = new User(); - user.setLogin("user-jwt-controller"); - user.setEmail("user-jwt-controller@example.com"); - user.setActivated(true); - user.setPassword(passwordEncoder.encode("test")); - - userRepository.saveAndFlush(user); - - LoginVM login = new LoginVM(); - login.setUsername("user-jwt-controller"); - login.setPassword("test"); - mockMvc.perform(post("/api/authenticate") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(login))) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.id_token").isString()) - .andExpect(jsonPath("$.id_token").isNotEmpty()) - .andExpect(header().string("Authorization", not(nullValue()))) - .andExpect(header().string("Authorization", not(isEmptyString()))); - } - - @Test - @Transactional - public void testAuthorizeWithRememberMe() throws Exception { - User user = new User(); - user.setLogin("user-jwt-controller-remember-me"); - user.setEmail("user-jwt-controller-remember-me@example.com"); - user.setActivated(true); - user.setPassword(passwordEncoder.encode("test")); - - userRepository.saveAndFlush(user); - - LoginVM login = new LoginVM(); - login.setUsername("user-jwt-controller-remember-me"); - login.setPassword("test"); - login.setRememberMe(true); - mockMvc.perform(post("/api/authenticate") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(login))) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.id_token").isString()) - .andExpect(jsonPath("$.id_token").isNotEmpty()) - .andExpect(header().string("Authorization", not(nullValue()))) - .andExpect(header().string("Authorization", not(isEmptyString()))); - } - - @Test - @Transactional - public void testAuthorizeFails() throws Exception { - LoginVM login = new LoginVM(); - login.setUsername("wrong-user"); - login.setPassword("wrong password"); - mockMvc.perform(post("/api/authenticate") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(login))) - .andExpect(status().isUnauthorized()) - .andExpect(jsonPath("$.id_token").doesNotExist()) - .andExpect(header().doesNotExist("Authorization")); - } -} diff --git a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/UserResourceIntegrationTest.java b/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/UserResourceIntegrationTest.java deleted file mode 100644 index c0abc042fbe9..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/UserResourceIntegrationTest.java +++ /dev/null @@ -1,596 +0,0 @@ -package com.baeldung.jhipster5.web.rest; - -import com.baeldung.jhipster5.BookstoreApp; -import com.baeldung.jhipster5.domain.Authority; -import com.baeldung.jhipster5.domain.User; -import com.baeldung.jhipster5.repository.UserRepository; -import com.baeldung.jhipster5.security.AuthoritiesConstants; -import com.baeldung.jhipster5.service.MailService; -import com.baeldung.jhipster5.service.UserService; -import com.baeldung.jhipster5.service.dto.UserDTO; -import com.baeldung.jhipster5.service.mapper.UserMapper; -import com.baeldung.jhipster5.web.rest.errors.ExceptionTranslator; -import com.baeldung.jhipster5.web.rest.vm.ManagedUserVM; -import org.apache.commons.lang3.RandomStringUtils; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.data.web.PageableHandlerMethodArgumentResolver; -import org.springframework.http.MediaType; -import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; -import org.springframework.test.context.junit4.SpringRunner; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; -import org.springframework.transaction.annotation.Transactional; - -import javax.persistence.EntityManager; -import java.time.Instant; -import java.util.*; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.hamcrest.Matchers.hasItems; -import static org.hamcrest.Matchers.hasItem; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -/** - * Test class for the UserResource REST controller. - * - * @see UserResource - */ -@RunWith(SpringRunner.class) -@SpringBootTest(classes = BookstoreApp.class) -public class UserResourceIntegrationTest { - - private static final String DEFAULT_LOGIN = "johndoe"; - private static final String UPDATED_LOGIN = "jhipster"; - - private static final Long DEFAULT_ID = 1L; - - private static final String DEFAULT_PASSWORD = "passjohndoe"; - private static final String UPDATED_PASSWORD = "passjhipster"; - - private static final String DEFAULT_EMAIL = "johndoe@localhost"; - private static final String UPDATED_EMAIL = "jhipster@localhost"; - - private static final String DEFAULT_FIRSTNAME = "john"; - private static final String UPDATED_FIRSTNAME = "jhipsterFirstName"; - - private static final String DEFAULT_LASTNAME = "doe"; - private static final String UPDATED_LASTNAME = "jhipsterLastName"; - - private static final String DEFAULT_IMAGEURL = "http://placehold.it/50x50"; - private static final String UPDATED_IMAGEURL = "http://placehold.it/40x40"; - - private static final String DEFAULT_LANGKEY = "en"; - private static final String UPDATED_LANGKEY = "fr"; - - @Autowired - private UserRepository userRepository; - - @Autowired - private MailService mailService; - - @Autowired - private UserService userService; - - @Autowired - private UserMapper userMapper; - - @Autowired - private MappingJackson2HttpMessageConverter jacksonMessageConverter; - - @Autowired - private PageableHandlerMethodArgumentResolver pageableArgumentResolver; - - @Autowired - private ExceptionTranslator exceptionTranslator; - - @Autowired - private EntityManager em; - - private MockMvc restUserMockMvc; - - private User user; - - @Before - public void setup() { - UserResource userResource = new UserResource(userService, userRepository, mailService); - - this.restUserMockMvc = MockMvcBuilders.standaloneSetup(userResource) - .setCustomArgumentResolvers(pageableArgumentResolver) - .setControllerAdvice(exceptionTranslator) - .setMessageConverters(jacksonMessageConverter) - .build(); - } - - /** - * Create a User. - * - * This is a static method, as tests for other entities might also need it, - * if they test an entity which has a required relationship to the User entity. - */ - public static User createEntity(EntityManager em) { - User user = new User(); - user.setLogin(DEFAULT_LOGIN + RandomStringUtils.randomAlphabetic(5)); - user.setPassword(RandomStringUtils.random(60)); - user.setActivated(true); - user.setEmail(RandomStringUtils.randomAlphabetic(5) + DEFAULT_EMAIL); - user.setFirstName(DEFAULT_FIRSTNAME); - user.setLastName(DEFAULT_LASTNAME); - user.setImageUrl(DEFAULT_IMAGEURL); - user.setLangKey(DEFAULT_LANGKEY); - return user; - } - - @Before - public void initTest() { - user = createEntity(em); - user.setLogin(DEFAULT_LOGIN); - user.setEmail(DEFAULT_EMAIL); - } - - @Test - @Transactional - public void createUser() throws Exception { - int databaseSizeBeforeCreate = userRepository.findAll().size(); - - // Create the User - ManagedUserVM managedUserVM = new ManagedUserVM(); - managedUserVM.setLogin(DEFAULT_LOGIN); - managedUserVM.setPassword(DEFAULT_PASSWORD); - managedUserVM.setFirstName(DEFAULT_FIRSTNAME); - managedUserVM.setLastName(DEFAULT_LASTNAME); - managedUserVM.setEmail(DEFAULT_EMAIL); - managedUserVM.setActivated(true); - managedUserVM.setImageUrl(DEFAULT_IMAGEURL); - managedUserVM.setLangKey(DEFAULT_LANGKEY); - managedUserVM.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); - - restUserMockMvc.perform(post("/api/users") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(managedUserVM))) - .andExpect(status().isCreated()); - - // Validate the User in the database - List userList = userRepository.findAll(); - assertThat(userList).hasSize(databaseSizeBeforeCreate + 1); - User testUser = userList.get(userList.size() - 1); - assertThat(testUser.getLogin()).isEqualTo(DEFAULT_LOGIN); - assertThat(testUser.getFirstName()).isEqualTo(DEFAULT_FIRSTNAME); - assertThat(testUser.getLastName()).isEqualTo(DEFAULT_LASTNAME); - assertThat(testUser.getEmail()).isEqualTo(DEFAULT_EMAIL); - assertThat(testUser.getImageUrl()).isEqualTo(DEFAULT_IMAGEURL); - assertThat(testUser.getLangKey()).isEqualTo(DEFAULT_LANGKEY); - } - - @Test - @Transactional - public void createUserWithExistingId() throws Exception { - int databaseSizeBeforeCreate = userRepository.findAll().size(); - - ManagedUserVM managedUserVM = new ManagedUserVM(); - managedUserVM.setId(1L); - managedUserVM.setLogin(DEFAULT_LOGIN); - managedUserVM.setPassword(DEFAULT_PASSWORD); - managedUserVM.setFirstName(DEFAULT_FIRSTNAME); - managedUserVM.setLastName(DEFAULT_LASTNAME); - managedUserVM.setEmail(DEFAULT_EMAIL); - managedUserVM.setActivated(true); - managedUserVM.setImageUrl(DEFAULT_IMAGEURL); - managedUserVM.setLangKey(DEFAULT_LANGKEY); - managedUserVM.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); - - // An entity with an existing ID cannot be created, so this API call must fail - restUserMockMvc.perform(post("/api/users") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(managedUserVM))) - .andExpect(status().isBadRequest()); - - // Validate the User in the database - List userList = userRepository.findAll(); - assertThat(userList).hasSize(databaseSizeBeforeCreate); - } - - @Test - @Transactional - public void createUserWithExistingLogin() throws Exception { - // Initialize the database - userRepository.saveAndFlush(user); - int databaseSizeBeforeCreate = userRepository.findAll().size(); - - ManagedUserVM managedUserVM = new ManagedUserVM(); - managedUserVM.setLogin(DEFAULT_LOGIN);// this login should already be used - managedUserVM.setPassword(DEFAULT_PASSWORD); - managedUserVM.setFirstName(DEFAULT_FIRSTNAME); - managedUserVM.setLastName(DEFAULT_LASTNAME); - managedUserVM.setEmail("anothermail@localhost"); - managedUserVM.setActivated(true); - managedUserVM.setImageUrl(DEFAULT_IMAGEURL); - managedUserVM.setLangKey(DEFAULT_LANGKEY); - managedUserVM.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); - - // Create the User - restUserMockMvc.perform(post("/api/users") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(managedUserVM))) - .andExpect(status().isBadRequest()); - - // Validate the User in the database - List userList = userRepository.findAll(); - assertThat(userList).hasSize(databaseSizeBeforeCreate); - } - - @Test - @Transactional - public void createUserWithExistingEmail() throws Exception { - // Initialize the database - userRepository.saveAndFlush(user); - int databaseSizeBeforeCreate = userRepository.findAll().size(); - - ManagedUserVM managedUserVM = new ManagedUserVM(); - managedUserVM.setLogin("anotherlogin"); - managedUserVM.setPassword(DEFAULT_PASSWORD); - managedUserVM.setFirstName(DEFAULT_FIRSTNAME); - managedUserVM.setLastName(DEFAULT_LASTNAME); - managedUserVM.setEmail(DEFAULT_EMAIL);// this email should already be used - managedUserVM.setActivated(true); - managedUserVM.setImageUrl(DEFAULT_IMAGEURL); - managedUserVM.setLangKey(DEFAULT_LANGKEY); - managedUserVM.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); - - // Create the User - restUserMockMvc.perform(post("/api/users") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(managedUserVM))) - .andExpect(status().isBadRequest()); - - // Validate the User in the database - List userList = userRepository.findAll(); - assertThat(userList).hasSize(databaseSizeBeforeCreate); - } - - @Test - @Transactional - public void getAllUsers() throws Exception { - // Initialize the database - userRepository.saveAndFlush(user); - - // Get all the users - restUserMockMvc.perform(get("/api/users?sort=id,desc") - .accept(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()) - .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) - .andExpect(jsonPath("$.[*].login").value(hasItem(DEFAULT_LOGIN))) - .andExpect(jsonPath("$.[*].firstName").value(hasItem(DEFAULT_FIRSTNAME))) - .andExpect(jsonPath("$.[*].lastName").value(hasItem(DEFAULT_LASTNAME))) - .andExpect(jsonPath("$.[*].email").value(hasItem(DEFAULT_EMAIL))) - .andExpect(jsonPath("$.[*].imageUrl").value(hasItem(DEFAULT_IMAGEURL))) - .andExpect(jsonPath("$.[*].langKey").value(hasItem(DEFAULT_LANGKEY))); - } - - @Test - @Transactional - public void getUser() throws Exception { - // Initialize the database - userRepository.saveAndFlush(user); - - // Get the user - restUserMockMvc.perform(get("/api/users/{login}", user.getLogin())) - .andExpect(status().isOk()) - .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) - .andExpect(jsonPath("$.login").value(user.getLogin())) - .andExpect(jsonPath("$.firstName").value(DEFAULT_FIRSTNAME)) - .andExpect(jsonPath("$.lastName").value(DEFAULT_LASTNAME)) - .andExpect(jsonPath("$.email").value(DEFAULT_EMAIL)) - .andExpect(jsonPath("$.imageUrl").value(DEFAULT_IMAGEURL)) - .andExpect(jsonPath("$.langKey").value(DEFAULT_LANGKEY)); - } - - @Test - @Transactional - public void getNonExistingUser() throws Exception { - restUserMockMvc.perform(get("/api/users/unknown")) - .andExpect(status().isNotFound()); - } - - @Test - @Transactional - public void updateUser() throws Exception { - // Initialize the database - userRepository.saveAndFlush(user); - int databaseSizeBeforeUpdate = userRepository.findAll().size(); - - // Update the user - User updatedUser = userRepository.findById(user.getId()).get(); - - ManagedUserVM managedUserVM = new ManagedUserVM(); - managedUserVM.setId(updatedUser.getId()); - managedUserVM.setLogin(updatedUser.getLogin()); - managedUserVM.setPassword(UPDATED_PASSWORD); - managedUserVM.setFirstName(UPDATED_FIRSTNAME); - managedUserVM.setLastName(UPDATED_LASTNAME); - managedUserVM.setEmail(UPDATED_EMAIL); - managedUserVM.setActivated(updatedUser.getActivated()); - managedUserVM.setImageUrl(UPDATED_IMAGEURL); - managedUserVM.setLangKey(UPDATED_LANGKEY); - managedUserVM.setCreatedBy(updatedUser.getCreatedBy()); - managedUserVM.setCreatedDate(updatedUser.getCreatedDate()); - managedUserVM.setLastModifiedBy(updatedUser.getLastModifiedBy()); - managedUserVM.setLastModifiedDate(updatedUser.getLastModifiedDate()); - managedUserVM.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); - - restUserMockMvc.perform(put("/api/users") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(managedUserVM))) - .andExpect(status().isOk()); - - // Validate the User in the database - List userList = userRepository.findAll(); - assertThat(userList).hasSize(databaseSizeBeforeUpdate); - User testUser = userList.get(userList.size() - 1); - assertThat(testUser.getFirstName()).isEqualTo(UPDATED_FIRSTNAME); - assertThat(testUser.getLastName()).isEqualTo(UPDATED_LASTNAME); - assertThat(testUser.getEmail()).isEqualTo(UPDATED_EMAIL); - assertThat(testUser.getImageUrl()).isEqualTo(UPDATED_IMAGEURL); - assertThat(testUser.getLangKey()).isEqualTo(UPDATED_LANGKEY); - } - - @Test - @Transactional - public void updateUserLogin() throws Exception { - // Initialize the database - userRepository.saveAndFlush(user); - int databaseSizeBeforeUpdate = userRepository.findAll().size(); - - // Update the user - User updatedUser = userRepository.findById(user.getId()).get(); - - ManagedUserVM managedUserVM = new ManagedUserVM(); - managedUserVM.setId(updatedUser.getId()); - managedUserVM.setLogin(UPDATED_LOGIN); - managedUserVM.setPassword(UPDATED_PASSWORD); - managedUserVM.setFirstName(UPDATED_FIRSTNAME); - managedUserVM.setLastName(UPDATED_LASTNAME); - managedUserVM.setEmail(UPDATED_EMAIL); - managedUserVM.setActivated(updatedUser.getActivated()); - managedUserVM.setImageUrl(UPDATED_IMAGEURL); - managedUserVM.setLangKey(UPDATED_LANGKEY); - managedUserVM.setCreatedBy(updatedUser.getCreatedBy()); - managedUserVM.setCreatedDate(updatedUser.getCreatedDate()); - managedUserVM.setLastModifiedBy(updatedUser.getLastModifiedBy()); - managedUserVM.setLastModifiedDate(updatedUser.getLastModifiedDate()); - managedUserVM.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); - - restUserMockMvc.perform(put("/api/users") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(managedUserVM))) - .andExpect(status().isOk()); - - // Validate the User in the database - List userList = userRepository.findAll(); - assertThat(userList).hasSize(databaseSizeBeforeUpdate); - User testUser = userList.get(userList.size() - 1); - assertThat(testUser.getLogin()).isEqualTo(UPDATED_LOGIN); - assertThat(testUser.getFirstName()).isEqualTo(UPDATED_FIRSTNAME); - assertThat(testUser.getLastName()).isEqualTo(UPDATED_LASTNAME); - assertThat(testUser.getEmail()).isEqualTo(UPDATED_EMAIL); - assertThat(testUser.getImageUrl()).isEqualTo(UPDATED_IMAGEURL); - assertThat(testUser.getLangKey()).isEqualTo(UPDATED_LANGKEY); - } - - @Test - @Transactional - public void updateUserExistingEmail() throws Exception { - // Initialize the database with 2 users - userRepository.saveAndFlush(user); - - User anotherUser = new User(); - anotherUser.setLogin("jhipster"); - anotherUser.setPassword(RandomStringUtils.random(60)); - anotherUser.setActivated(true); - anotherUser.setEmail("jhipster@localhost"); - anotherUser.setFirstName("java"); - anotherUser.setLastName("hipster"); - anotherUser.setImageUrl(""); - anotherUser.setLangKey("en"); - userRepository.saveAndFlush(anotherUser); - - // Update the user - User updatedUser = userRepository.findById(user.getId()).get(); - - ManagedUserVM managedUserVM = new ManagedUserVM(); - managedUserVM.setId(updatedUser.getId()); - managedUserVM.setLogin(updatedUser.getLogin()); - managedUserVM.setPassword(updatedUser.getPassword()); - managedUserVM.setFirstName(updatedUser.getFirstName()); - managedUserVM.setLastName(updatedUser.getLastName()); - managedUserVM.setEmail("jhipster@localhost");// this email should already be used by anotherUser - managedUserVM.setActivated(updatedUser.getActivated()); - managedUserVM.setImageUrl(updatedUser.getImageUrl()); - managedUserVM.setLangKey(updatedUser.getLangKey()); - managedUserVM.setCreatedBy(updatedUser.getCreatedBy()); - managedUserVM.setCreatedDate(updatedUser.getCreatedDate()); - managedUserVM.setLastModifiedBy(updatedUser.getLastModifiedBy()); - managedUserVM.setLastModifiedDate(updatedUser.getLastModifiedDate()); - managedUserVM.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); - - restUserMockMvc.perform(put("/api/users") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(managedUserVM))) - .andExpect(status().isBadRequest()); - } - - @Test - @Transactional - public void updateUserExistingLogin() throws Exception { - // Initialize the database - userRepository.saveAndFlush(user); - - User anotherUser = new User(); - anotherUser.setLogin("jhipster"); - anotherUser.setPassword(RandomStringUtils.random(60)); - anotherUser.setActivated(true); - anotherUser.setEmail("jhipster@localhost"); - anotherUser.setFirstName("java"); - anotherUser.setLastName("hipster"); - anotherUser.setImageUrl(""); - anotherUser.setLangKey("en"); - userRepository.saveAndFlush(anotherUser); - - // Update the user - User updatedUser = userRepository.findById(user.getId()).get(); - - ManagedUserVM managedUserVM = new ManagedUserVM(); - managedUserVM.setId(updatedUser.getId()); - managedUserVM.setLogin("jhipster");// this login should already be used by anotherUser - managedUserVM.setPassword(updatedUser.getPassword()); - managedUserVM.setFirstName(updatedUser.getFirstName()); - managedUserVM.setLastName(updatedUser.getLastName()); - managedUserVM.setEmail(updatedUser.getEmail()); - managedUserVM.setActivated(updatedUser.getActivated()); - managedUserVM.setImageUrl(updatedUser.getImageUrl()); - managedUserVM.setLangKey(updatedUser.getLangKey()); - managedUserVM.setCreatedBy(updatedUser.getCreatedBy()); - managedUserVM.setCreatedDate(updatedUser.getCreatedDate()); - managedUserVM.setLastModifiedBy(updatedUser.getLastModifiedBy()); - managedUserVM.setLastModifiedDate(updatedUser.getLastModifiedDate()); - managedUserVM.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); - - restUserMockMvc.perform(put("/api/users") - .contentType(TestUtil.APPLICATION_JSON_UTF8) - .content(TestUtil.convertObjectToJsonBytes(managedUserVM))) - .andExpect(status().isBadRequest()); - } - - @Test - @Transactional - public void deleteUser() throws Exception { - // Initialize the database - userRepository.saveAndFlush(user); - int databaseSizeBeforeDelete = userRepository.findAll().size(); - - // Delete the user - restUserMockMvc.perform(delete("/api/users/{login}", user.getLogin()) - .accept(TestUtil.APPLICATION_JSON_UTF8)) - .andExpect(status().isOk()); - - // Validate the database is empty - List userList = userRepository.findAll(); - assertThat(userList).hasSize(databaseSizeBeforeDelete - 1); - } - - @Test - @Transactional - public void getAllAuthorities() throws Exception { - restUserMockMvc.perform(get("/api/users/authorities") - .accept(TestUtil.APPLICATION_JSON_UTF8) - .contentType(TestUtil.APPLICATION_JSON_UTF8)) - .andExpect(status().isOk()) - .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) - .andExpect(jsonPath("$").isArray()) - .andExpect(jsonPath("$").value(hasItems(AuthoritiesConstants.USER, AuthoritiesConstants.ADMIN))); - } - - @Test - @Transactional - public void testUserEquals() throws Exception { - TestUtil.equalsVerifier(User.class); - User user1 = new User(); - user1.setId(1L); - User user2 = new User(); - user2.setId(user1.getId()); - assertThat(user1).isEqualTo(user2); - user2.setId(2L); - assertThat(user1).isNotEqualTo(user2); - user1.setId(null); - assertThat(user1).isNotEqualTo(user2); - } - - @Test - public void testUserDTOtoUser() { - UserDTO userDTO = new UserDTO(); - userDTO.setId(DEFAULT_ID); - userDTO.setLogin(DEFAULT_LOGIN); - userDTO.setFirstName(DEFAULT_FIRSTNAME); - userDTO.setLastName(DEFAULT_LASTNAME); - userDTO.setEmail(DEFAULT_EMAIL); - userDTO.setActivated(true); - userDTO.setImageUrl(DEFAULT_IMAGEURL); - userDTO.setLangKey(DEFAULT_LANGKEY); - userDTO.setCreatedBy(DEFAULT_LOGIN); - userDTO.setLastModifiedBy(DEFAULT_LOGIN); - userDTO.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); - - User user = userMapper.userDTOToUser(userDTO); - assertThat(user.getId()).isEqualTo(DEFAULT_ID); - assertThat(user.getLogin()).isEqualTo(DEFAULT_LOGIN); - assertThat(user.getFirstName()).isEqualTo(DEFAULT_FIRSTNAME); - assertThat(user.getLastName()).isEqualTo(DEFAULT_LASTNAME); - assertThat(user.getEmail()).isEqualTo(DEFAULT_EMAIL); - assertThat(user.getActivated()).isEqualTo(true); - assertThat(user.getImageUrl()).isEqualTo(DEFAULT_IMAGEURL); - assertThat(user.getLangKey()).isEqualTo(DEFAULT_LANGKEY); - assertThat(user.getCreatedBy()).isNull(); - assertThat(user.getCreatedDate()).isNotNull(); - assertThat(user.getLastModifiedBy()).isNull(); - assertThat(user.getLastModifiedDate()).isNotNull(); - assertThat(user.getAuthorities()).extracting("name").containsExactly(AuthoritiesConstants.USER); - } - - @Test - public void testUserToUserDTO() { - user.setId(DEFAULT_ID); - user.setCreatedBy(DEFAULT_LOGIN); - user.setCreatedDate(Instant.now()); - user.setLastModifiedBy(DEFAULT_LOGIN); - user.setLastModifiedDate(Instant.now()); - Set authorities = new HashSet<>(); - Authority authority = new Authority(); - authority.setName(AuthoritiesConstants.USER); - authorities.add(authority); - user.setAuthorities(authorities); - - UserDTO userDTO = userMapper.userToUserDTO(user); - - assertThat(userDTO.getId()).isEqualTo(DEFAULT_ID); - assertThat(userDTO.getLogin()).isEqualTo(DEFAULT_LOGIN); - assertThat(userDTO.getFirstName()).isEqualTo(DEFAULT_FIRSTNAME); - assertThat(userDTO.getLastName()).isEqualTo(DEFAULT_LASTNAME); - assertThat(userDTO.getEmail()).isEqualTo(DEFAULT_EMAIL); - assertThat(userDTO.isActivated()).isEqualTo(true); - assertThat(userDTO.getImageUrl()).isEqualTo(DEFAULT_IMAGEURL); - assertThat(userDTO.getLangKey()).isEqualTo(DEFAULT_LANGKEY); - assertThat(userDTO.getCreatedBy()).isEqualTo(DEFAULT_LOGIN); - assertThat(userDTO.getCreatedDate()).isEqualTo(user.getCreatedDate()); - assertThat(userDTO.getLastModifiedBy()).isEqualTo(DEFAULT_LOGIN); - assertThat(userDTO.getLastModifiedDate()).isEqualTo(user.getLastModifiedDate()); - assertThat(userDTO.getAuthorities()).containsExactly(AuthoritiesConstants.USER); - assertThat(userDTO.toString()).isNotNull(); - } - - @Test - public void testAuthorityEquals() { - Authority authorityA = new Authority(); - assertThat(authorityA).isEqualTo(authorityA); - assertThat(authorityA).isNotEqualTo(null); - assertThat(authorityA).isNotEqualTo(new Object()); - assertThat(authorityA.hashCode()).isEqualTo(0); - assertThat(authorityA.toString()).isNotNull(); - - Authority authorityB = new Authority(); - assertThat(authorityA).isEqualTo(authorityB); - - authorityB.setName(AuthoritiesConstants.ADMIN); - assertThat(authorityA).isNotEqualTo(authorityB); - - authorityA.setName(AuthoritiesConstants.USER); - assertThat(authorityA).isNotEqualTo(authorityB); - - authorityB.setName(AuthoritiesConstants.USER); - assertThat(authorityA).isEqualTo(authorityB); - assertThat(authorityA.hashCode()).isEqualTo(authorityB.hashCode()); - } -} diff --git a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/errors/ExceptionTranslatorIntegrationTest.java b/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/errors/ExceptionTranslatorIntegrationTest.java deleted file mode 100644 index e5ef08ee9cea..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/errors/ExceptionTranslatorIntegrationTest.java +++ /dev/null @@ -1,150 +0,0 @@ -package com.baeldung.jhipster5.web.rest.errors; - -import com.baeldung.jhipster5.BookstoreApp; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.http.MediaType; -import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; -import org.springframework.test.context.junit4.SpringRunner; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; - -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; - -/** - * Test class for the ExceptionTranslator controller advice. - * - * @see ExceptionTranslator - */ -@RunWith(SpringRunner.class) -@SpringBootTest(classes = BookstoreApp.class) -public class ExceptionTranslatorIntegrationTest { - - @Autowired - private ExceptionTranslatorTestController controller; - - @Autowired - private ExceptionTranslator exceptionTranslator; - - @Autowired - private MappingJackson2HttpMessageConverter jacksonMessageConverter; - - private MockMvc mockMvc; - - @Before - public void setup() { - mockMvc = MockMvcBuilders.standaloneSetup(controller) - .setControllerAdvice(exceptionTranslator) - .setMessageConverters(jacksonMessageConverter) - .build(); - } - - @Test - public void testConcurrencyFailure() throws Exception { - mockMvc.perform(get("/test/concurrency-failure")) - .andExpect(status().isConflict()) - .andExpect(content().contentType(MediaType.APPLICATION_PROBLEM_JSON)) - .andExpect(jsonPath("$.message").value(ErrorConstants.ERR_CONCURRENCY_FAILURE)); - } - - @Test - public void testMethodArgumentNotValid() throws Exception { - mockMvc.perform(post("/test/method-argument").content("{}").contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isBadRequest()) - .andExpect(content().contentType(MediaType.APPLICATION_PROBLEM_JSON)) - .andExpect(jsonPath("$.message").value(ErrorConstants.ERR_VALIDATION)) - .andExpect(jsonPath("$.fieldErrors.[0].objectName").value("testDTO")) - .andExpect(jsonPath("$.fieldErrors.[0].field").value("test")) - .andExpect(jsonPath("$.fieldErrors.[0].message").value("NotNull")); - } - - @Test - public void testParameterizedError() throws Exception { - mockMvc.perform(get("/test/parameterized-error")) - .andExpect(status().isBadRequest()) - .andExpect(content().contentType(MediaType.APPLICATION_PROBLEM_JSON)) - .andExpect(jsonPath("$.message").value("test parameterized error")) - .andExpect(jsonPath("$.params.param0").value("param0_value")) - .andExpect(jsonPath("$.params.param1").value("param1_value")); - } - - @Test - public void testParameterizedError2() throws Exception { - mockMvc.perform(get("/test/parameterized-error2")) - .andExpect(status().isBadRequest()) - .andExpect(content().contentType(MediaType.APPLICATION_PROBLEM_JSON)) - .andExpect(jsonPath("$.message").value("test parameterized error")) - .andExpect(jsonPath("$.params.foo").value("foo_value")) - .andExpect(jsonPath("$.params.bar").value("bar_value")); - } - - @Test - public void testMissingServletRequestPartException() throws Exception { - mockMvc.perform(get("/test/missing-servlet-request-part")) - .andExpect(status().isBadRequest()) - .andExpect(content().contentType(MediaType.APPLICATION_PROBLEM_JSON)) - .andExpect(jsonPath("$.message").value("error.http.400")); - } - - @Test - public void testMissingServletRequestParameterException() throws Exception { - mockMvc.perform(get("/test/missing-servlet-request-parameter")) - .andExpect(status().isBadRequest()) - .andExpect(content().contentType(MediaType.APPLICATION_PROBLEM_JSON)) - .andExpect(jsonPath("$.message").value("error.http.400")); - } - - @Test - public void testAccessDenied() throws Exception { - mockMvc.perform(get("/test/access-denied")) - .andExpect(status().isForbidden()) - .andExpect(content().contentType(MediaType.APPLICATION_PROBLEM_JSON)) - .andExpect(jsonPath("$.message").value("error.http.403")) - .andExpect(jsonPath("$.detail").value("test access denied!")); - } - - @Test - public void testUnauthorized() throws Exception { - mockMvc.perform(get("/test/unauthorized")) - .andExpect(status().isUnauthorized()) - .andExpect(content().contentType(MediaType.APPLICATION_PROBLEM_JSON)) - .andExpect(jsonPath("$.message").value("error.http.401")) - .andExpect(jsonPath("$.path").value("/test/unauthorized")) - .andExpect(jsonPath("$.detail").value("test authentication failed!")); - } - - @Test - public void testMethodNotSupported() throws Exception { - mockMvc.perform(post("/test/access-denied")) - .andExpect(status().isMethodNotAllowed()) - .andExpect(content().contentType(MediaType.APPLICATION_PROBLEM_JSON)) - .andExpect(jsonPath("$.message").value("error.http.405")) - .andExpect(jsonPath("$.detail").value("Request method 'POST' not supported")); - } - - @Test - public void testExceptionWithResponseStatus() throws Exception { - mockMvc.perform(get("/test/response-status")) - .andExpect(status().isBadRequest()) - .andExpect(content().contentType(MediaType.APPLICATION_PROBLEM_JSON)) - .andExpect(jsonPath("$.message").value("error.http.400")) - .andExpect(jsonPath("$.title").value("test response status")); - } - - @Test - public void testInternalServerError() throws Exception { - mockMvc.perform(get("/test/internal-server-error")) - .andExpect(status().isInternalServerError()) - .andExpect(content().contentType(MediaType.APPLICATION_PROBLEM_JSON)) - .andExpect(jsonPath("$.message").value("error.http.500")) - .andExpect(jsonPath("$.title").value("Internal Server Error")); - } - -} diff --git a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/errors/ExceptionTranslatorTestController.java b/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/errors/ExceptionTranslatorTestController.java deleted file mode 100644 index f8d84151b903..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/errors/ExceptionTranslatorTestController.java +++ /dev/null @@ -1,86 +0,0 @@ -package com.baeldung.jhipster5.web.rest.errors; - -import org.springframework.dao.ConcurrencyFailureException; -import org.springframework.http.HttpStatus; -import org.springframework.security.access.AccessDeniedException; -import org.springframework.security.authentication.BadCredentialsException; -import org.springframework.web.bind.annotation.*; - -import javax.validation.Valid; -import javax.validation.constraints.NotNull; -import java.util.HashMap; -import java.util.Map; - -@RestController -public class ExceptionTranslatorTestController { - - @GetMapping("/test/concurrency-failure") - public void concurrencyFailure() { - throw new ConcurrencyFailureException("test concurrency failure"); - } - - @PostMapping("/test/method-argument") - public void methodArgument(@Valid @RequestBody TestDTO testDTO) { - } - - @GetMapping("/test/parameterized-error") - public void parameterizedError() { - throw new CustomParameterizedException("test parameterized error", "param0_value", "param1_value"); - } - - @GetMapping("/test/parameterized-error2") - public void parameterizedError2() { - Map params = new HashMap<>(); - params.put("foo", "foo_value"); - params.put("bar", "bar_value"); - throw new CustomParameterizedException("test parameterized error", params); - } - - @GetMapping("/test/missing-servlet-request-part") - public void missingServletRequestPartException(@RequestPart String part) { - } - - @GetMapping("/test/missing-servlet-request-parameter") - public void missingServletRequestParameterException(@RequestParam String param) { - } - - @GetMapping("/test/access-denied") - public void accessdenied() { - throw new AccessDeniedException("test access denied!"); - } - - @GetMapping("/test/unauthorized") - public void unauthorized() { - throw new BadCredentialsException("test authentication failed!"); - } - - @GetMapping("/test/response-status") - public void exceptionWithReponseStatus() { - throw new TestResponseStatusException(); - } - - @GetMapping("/test/internal-server-error") - public void internalServerError() { - throw new RuntimeException(); - } - - public static class TestDTO { - - @NotNull - private String test; - - public String getTest() { - return test; - } - - public void setTest(String test) { - this.test = test; - } - } - - @ResponseStatus(value = HttpStatus.BAD_REQUEST, reason = "test response status") - @SuppressWarnings("serial") - public static class TestResponseStatusException extends RuntimeException { - } - -} diff --git a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/util/PaginationUtilUnitTest.java b/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/util/PaginationUtilUnitTest.java deleted file mode 100644 index 78b17ee8595a..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/web/rest/util/PaginationUtilUnitTest.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.baeldung.jhipster5.web.rest.util; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; - -import java.util.ArrayList; -import java.util.List; - -import org.junit.Test; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.PageImpl; -import org.springframework.data.domain.PageRequest; -import org.springframework.http.HttpHeaders; - -/** - * Tests based on parsing algorithm in app/components/util/pagination-util.service.js - * - * @see PaginationUtil - */ -public class PaginationUtilUnitTest { - - @Test - public void generatePaginationHttpHeadersTest() { - String baseUrl = "/api/_search/example"; - List content = new ArrayList<>(); - Page page = new PageImpl<>(content, PageRequest.of(6, 50), 400L); - HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(page, baseUrl); - List strHeaders = headers.get(HttpHeaders.LINK); - assertNotNull(strHeaders); - assertTrue(strHeaders.size() == 1); - String headerData = strHeaders.get(0); - assertTrue(headerData.split(",").length == 4); - String expectedData = "; rel=\"next\"," - + "; rel=\"prev\"," - + "; rel=\"last\"," - + "; rel=\"first\""; - assertEquals(expectedData, headerData); - List xTotalCountHeaders = headers.get("X-Total-Count"); - assertTrue(xTotalCountHeaders.size() == 1); - assertTrue(Long.valueOf(xTotalCountHeaders.get(0)).equals(400L)); - } - -} diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/jest-global-mocks.ts b/jhipster-5/bookstore-monolith/src/test/javascript/jest-global-mocks.ts deleted file mode 100644 index a99825985793..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/jest-global-mocks.ts +++ /dev/null @@ -1,15 +0,0 @@ -const mock = () => { - let storage = {}; - return { - getItem: key => (key in storage ? storage[key] : null), - setItem: (key, value) => (storage[key] = value || ''), - removeItem: key => delete storage[key], - clear: () => (storage = {}) - }; -}; - -Object.defineProperty(window, 'localStorage', { value: mock() }); -Object.defineProperty(window, 'sessionStorage', { value: mock() }); -Object.defineProperty(window, 'getComputedStyle', { - value: () => ['-webkit-appearance'] -}); diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/jest.conf.js b/jhipster-5/bookstore-monolith/src/test/javascript/jest.conf.js deleted file mode 100644 index 05054a94b82f..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/jest.conf.js +++ /dev/null @@ -1,26 +0,0 @@ -module.exports = { - preset: 'jest-preset-angular', - setupTestFrameworkScriptFile: '/src/test/javascript/jest.ts', - coverageDirectory: '/target/test-results/', - globals: { - 'ts-jest': { - tsConfigFile: 'tsconfig.json' - }, - __TRANSFORM_HTML__: true - }, - coveragePathIgnorePatterns: [ - '/src/test/javascript' - ], - moduleNameMapper: { - 'app/(.*)': '/src/main/webapp/app/$1' - }, - reporters: [ - 'default', - [ 'jest-junit', { output: './target/test-results/TESTS-results-jest.xml' } ] - ], - testResultsProcessor: 'jest-sonar-reporter', - transformIgnorePatterns: ['node_modules/(?!@angular/common/locales)'], - testMatch: ['/src/test/javascript/spec/**/+(*.)+(spec.ts)'], - rootDir: '../../../', - testURL: "http://localhost/" -}; diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/jest.ts b/jhipster-5/bookstore-monolith/src/test/javascript/jest.ts deleted file mode 100644 index 904329f538cb..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/jest.ts +++ /dev/null @@ -1,2 +0,0 @@ -import 'jest-preset-angular'; -import './jest-global-mocks'; diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/account/activate/activate.component.spec.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/account/activate/activate.component.spec.ts deleted file mode 100644 index 87a550e8ef03..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/account/activate/activate.component.spec.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { TestBed, async, tick, fakeAsync, inject } from '@angular/core/testing'; -import { ActivatedRoute } from '@angular/router'; -import { Observable, of, throwError } from 'rxjs'; - -import { BookstoreTestModule } from '../../../test.module'; -import { MockActivatedRoute } from '../../../helpers/mock-route.service'; -import { ActivateService } from 'app/account/activate/activate.service'; -import { ActivateComponent } from 'app/account/activate/activate.component'; - -describe('Component Tests', () => { - describe('ActivateComponent', () => { - let comp: ActivateComponent; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - imports: [BookstoreTestModule], - declarations: [ActivateComponent], - providers: [ - { - provide: ActivatedRoute, - useValue: new MockActivatedRoute({ key: 'ABC123' }) - } - ] - }) - .overrideTemplate(ActivateComponent, '') - .compileComponents(); - })); - - beforeEach(() => { - const fixture = TestBed.createComponent(ActivateComponent); - comp = fixture.componentInstance; - }); - - it('calls activate.get with the key from params', inject( - [ActivateService], - fakeAsync((service: ActivateService) => { - spyOn(service, 'get').and.returnValue(of()); - - comp.ngOnInit(); - tick(); - - expect(service.get).toHaveBeenCalledWith('ABC123'); - }) - )); - - it('should set set success to OK upon successful activation', inject( - [ActivateService], - fakeAsync((service: ActivateService) => { - spyOn(service, 'get').and.returnValue(of({})); - - comp.ngOnInit(); - tick(); - - expect(comp.error).toBe(null); - expect(comp.success).toEqual('OK'); - }) - )); - - it('should set set error to ERROR upon activation failure', inject( - [ActivateService], - fakeAsync((service: ActivateService) => { - spyOn(service, 'get').and.returnValue(throwError('ERROR')); - - comp.ngOnInit(); - tick(); - - expect(comp.error).toBe('ERROR'); - expect(comp.success).toEqual(null); - }) - )); - }); -}); diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/account/password-reset/finish/password-reset-finish.component.spec.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/account/password-reset/finish/password-reset-finish.component.spec.ts deleted file mode 100644 index 36a3b8db65e0..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/account/password-reset/finish/password-reset-finish.component.spec.ts +++ /dev/null @@ -1,119 +0,0 @@ -import { ComponentFixture, TestBed, inject, tick, fakeAsync } from '@angular/core/testing'; -import { Observable, of, throwError } from 'rxjs'; -import { Renderer, ElementRef } from '@angular/core'; -import { ActivatedRoute } from '@angular/router'; - -import { BookstoreTestModule } from '../../../../test.module'; -import { PasswordResetFinishComponent } from 'app/account/password-reset/finish/password-reset-finish.component'; -import { PasswordResetFinishService } from 'app/account/password-reset/finish/password-reset-finish.service'; -import { MockActivatedRoute } from '../../../../helpers/mock-route.service'; - -describe('Component Tests', () => { - describe('PasswordResetFinishComponent', () => { - let fixture: ComponentFixture; - let comp: PasswordResetFinishComponent; - - beforeEach(() => { - fixture = TestBed.configureTestingModule({ - imports: [BookstoreTestModule], - declarations: [PasswordResetFinishComponent], - providers: [ - { - provide: ActivatedRoute, - useValue: new MockActivatedRoute({ key: 'XYZPDQ' }) - }, - { - provide: Renderer, - useValue: { - invokeElementMethod(renderElement: any, methodName: string, args?: any[]) {} - } - }, - { - provide: ElementRef, - useValue: new ElementRef(null) - } - ] - }) - .overrideTemplate(PasswordResetFinishComponent, '') - .createComponent(PasswordResetFinishComponent); - }); - - beforeEach(() => { - fixture = TestBed.createComponent(PasswordResetFinishComponent); - comp = fixture.componentInstance; - comp.ngOnInit(); - }); - - it('should define its initial state', () => { - comp.ngOnInit(); - - expect(comp.keyMissing).toBeFalsy(); - expect(comp.key).toEqual('XYZPDQ'); - expect(comp.resetAccount).toEqual({}); - }); - - it('sets focus after the view has been initialized', inject([ElementRef], (elementRef: ElementRef) => { - const element = fixture.nativeElement; - const node = { - focus() {} - }; - - elementRef.nativeElement = element; - spyOn(element, 'querySelector').and.returnValue(node); - spyOn(node, 'focus'); - - comp.ngAfterViewInit(); - - expect(element.querySelector).toHaveBeenCalledWith('#password'); - expect(node.focus).toHaveBeenCalled(); - })); - - it('should ensure the two passwords entered match', () => { - comp.resetAccount.password = 'password'; - comp.confirmPassword = 'non-matching'; - - comp.finishReset(); - - expect(comp.doNotMatch).toEqual('ERROR'); - }); - - it('should update success to OK after resetting password', inject( - [PasswordResetFinishService], - fakeAsync((service: PasswordResetFinishService) => { - spyOn(service, 'save').and.returnValue(of({})); - - comp.resetAccount.password = 'password'; - comp.confirmPassword = 'password'; - - comp.finishReset(); - tick(); - - expect(service.save).toHaveBeenCalledWith({ - key: 'XYZPDQ', - newPassword: 'password' - }); - expect(comp.success).toEqual('OK'); - }) - )); - - it('should notify of generic error', inject( - [PasswordResetFinishService], - fakeAsync((service: PasswordResetFinishService) => { - spyOn(service, 'save').and.returnValue(throwError('ERROR')); - - comp.resetAccount.password = 'password'; - comp.confirmPassword = 'password'; - - comp.finishReset(); - tick(); - - expect(service.save).toHaveBeenCalledWith({ - key: 'XYZPDQ', - newPassword: 'password' - }); - expect(comp.success).toBeNull(); - expect(comp.error).toEqual('ERROR'); - }) - )); - }); -}); diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/account/password-reset/init/password-reset-init.component.spec.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/account/password-reset/init/password-reset-init.component.spec.ts deleted file mode 100644 index f121a4dd2792..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/account/password-reset/init/password-reset-init.component.spec.ts +++ /dev/null @@ -1,110 +0,0 @@ -import { ComponentFixture, TestBed, inject } from '@angular/core/testing'; -import { Renderer, ElementRef } from '@angular/core'; -import { Observable, of, throwError } from 'rxjs'; - -import { BookstoreTestModule } from '../../../../test.module'; -import { PasswordResetInitComponent } from 'app/account/password-reset/init/password-reset-init.component'; -import { PasswordResetInitService } from 'app/account/password-reset/init/password-reset-init.service'; -import { EMAIL_NOT_FOUND_TYPE } from 'app/shared'; - -describe('Component Tests', () => { - describe('PasswordResetInitComponent', () => { - let fixture: ComponentFixture; - let comp: PasswordResetInitComponent; - - beforeEach(() => { - fixture = TestBed.configureTestingModule({ - imports: [BookstoreTestModule], - declarations: [PasswordResetInitComponent], - providers: [ - { - provide: Renderer, - useValue: { - invokeElementMethod(renderElement: any, methodName: string, args?: any[]) {} - } - }, - { - provide: ElementRef, - useValue: new ElementRef(null) - } - ] - }) - .overrideTemplate(PasswordResetInitComponent, '') - .createComponent(PasswordResetInitComponent); - comp = fixture.componentInstance; - comp.ngOnInit(); - }); - - it('should define its initial state', () => { - expect(comp.success).toBeUndefined(); - expect(comp.error).toBeUndefined(); - expect(comp.errorEmailNotExists).toBeUndefined(); - expect(comp.resetAccount).toEqual({}); - }); - - it('sets focus after the view has been initialized', inject([ElementRef], (elementRef: ElementRef) => { - const element = fixture.nativeElement; - const node = { - focus() {} - }; - - elementRef.nativeElement = element; - spyOn(element, 'querySelector').and.returnValue(node); - spyOn(node, 'focus'); - - comp.ngAfterViewInit(); - - expect(element.querySelector).toHaveBeenCalledWith('#email'); - expect(node.focus).toHaveBeenCalled(); - })); - - it('notifies of success upon successful requestReset', inject([PasswordResetInitService], (service: PasswordResetInitService) => { - spyOn(service, 'save').and.returnValue(of({})); - comp.resetAccount.email = 'user@domain.com'; - - comp.requestReset(); - - expect(service.save).toHaveBeenCalledWith('user@domain.com'); - expect(comp.success).toEqual('OK'); - expect(comp.error).toBeNull(); - expect(comp.errorEmailNotExists).toBeNull(); - })); - - it('notifies of unknown email upon email address not registered/400', inject( - [PasswordResetInitService], - (service: PasswordResetInitService) => { - spyOn(service, 'save').and.returnValue( - throwError({ - status: 400, - error: { type: EMAIL_NOT_FOUND_TYPE } - }) - ); - comp.resetAccount.email = 'user@domain.com'; - - comp.requestReset(); - - expect(service.save).toHaveBeenCalledWith('user@domain.com'); - expect(comp.success).toBeNull(); - expect(comp.error).toBeNull(); - expect(comp.errorEmailNotExists).toEqual('ERROR'); - } - )); - - it('notifies of error upon error response', inject([PasswordResetInitService], (service: PasswordResetInitService) => { - spyOn(service, 'save').and.returnValue( - throwError({ - status: 503, - data: 'something else' - }) - ); - comp.resetAccount.email = 'user@domain.com'; - - comp.requestReset(); - - expect(service.save).toHaveBeenCalledWith('user@domain.com'); - expect(comp.success).toBeNull(); - expect(comp.errorEmailNotExists).toBeNull(); - expect(comp.error).toEqual('ERROR'); - })); - }); -}); diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/account/password/password-strength-bar.component.spec.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/account/password/password-strength-bar.component.spec.ts deleted file mode 100644 index 35e923ac00fb..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/account/password/password-strength-bar.component.spec.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { ComponentFixture, TestBed, async } from '@angular/core/testing'; - -import { PasswordStrengthBarComponent } from 'app/account/password/password-strength-bar.component'; - -describe('Component Tests', () => { - describe('PasswordStrengthBarComponent', () => { - let comp: PasswordStrengthBarComponent; - let fixture: ComponentFixture; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - declarations: [PasswordStrengthBarComponent] - }) - .overrideTemplate(PasswordStrengthBarComponent, '') - .compileComponents(); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(PasswordStrengthBarComponent); - comp = fixture.componentInstance; - }); - - describe('PasswordStrengthBarComponents', () => { - it('should initialize with default values', () => { - expect(comp.measureStrength('')).toBe(0); - expect(comp.colors).toEqual(['#F00', '#F90', '#FF0', '#9F0', '#0F0']); - expect(comp.getColor(0).idx).toBe(1); - expect(comp.getColor(0).col).toBe(comp.colors[0]); - }); - - it('should increase strength upon password value change', () => { - expect(comp.measureStrength('')).toBe(0); - expect(comp.measureStrength('aa')).toBeGreaterThanOrEqual(comp.measureStrength('')); - expect(comp.measureStrength('aa^6')).toBeGreaterThanOrEqual(comp.measureStrength('aa')); - expect(comp.measureStrength('Aa090(**)')).toBeGreaterThanOrEqual(comp.measureStrength('aa^6')); - expect(comp.measureStrength('Aa090(**)+-07365')).toBeGreaterThanOrEqual(comp.measureStrength('Aa090(**)')); - }); - - it('should change the color based on strength', () => { - expect(comp.getColor(0).col).toBe(comp.colors[0]); - expect(comp.getColor(11).col).toBe(comp.colors[1]); - expect(comp.getColor(22).col).toBe(comp.colors[2]); - expect(comp.getColor(33).col).toBe(comp.colors[3]); - expect(comp.getColor(44).col).toBe(comp.colors[4]); - }); - }); - }); -}); diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/account/password/password.component.spec.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/account/password/password.component.spec.ts deleted file mode 100644 index 86edf940bde0..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/account/password/password.component.spec.ts +++ /dev/null @@ -1,89 +0,0 @@ -import { ComponentFixture, TestBed, async } from '@angular/core/testing'; -import { HttpResponse } from '@angular/common/http'; -import { Observable, of, throwError } from 'rxjs'; - -import { BookstoreTestModule } from '../../../test.module'; -import { PasswordComponent } from 'app/account/password/password.component'; -import { PasswordService } from 'app/account/password/password.service'; - -describe('Component Tests', () => { - describe('PasswordComponent', () => { - let comp: PasswordComponent; - let fixture: ComponentFixture; - let service: PasswordService; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - imports: [BookstoreTestModule], - declarations: [PasswordComponent], - providers: [] - }) - .overrideTemplate(PasswordComponent, '') - .compileComponents(); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(PasswordComponent); - comp = fixture.componentInstance; - service = fixture.debugElement.injector.get(PasswordService); - }); - - it('should show error if passwords do not match', () => { - // GIVEN - comp.newPassword = 'password1'; - comp.confirmPassword = 'password2'; - // WHEN - comp.changePassword(); - // THEN - expect(comp.doNotMatch).toBe('ERROR'); - expect(comp.error).toBeNull(); - expect(comp.success).toBeNull(); - }); - - it('should call Auth.changePassword when passwords match', () => { - // GIVEN - const passwordValues = { - currentPassword: 'oldPassword', - newPassword: 'myPassword' - }; - - spyOn(service, 'save').and.returnValue(of(new HttpResponse({ body: true }))); - comp.currentPassword = passwordValues.currentPassword; - comp.newPassword = comp.confirmPassword = passwordValues.newPassword; - - // WHEN - comp.changePassword(); - - // THEN - expect(service.save).toHaveBeenCalledWith(passwordValues.newPassword, passwordValues.currentPassword); - }); - - it('should set success to OK upon success', function() { - // GIVEN - spyOn(service, 'save').and.returnValue(of(new HttpResponse({ body: true }))); - comp.newPassword = comp.confirmPassword = 'myPassword'; - - // WHEN - comp.changePassword(); - - // THEN - expect(comp.doNotMatch).toBeNull(); - expect(comp.error).toBeNull(); - expect(comp.success).toBe('OK'); - }); - - it('should notify of error if change password fails', function() { - // GIVEN - spyOn(service, 'save').and.returnValue(throwError('ERROR')); - comp.newPassword = comp.confirmPassword = 'myPassword'; - - // WHEN - comp.changePassword(); - - // THEN - expect(comp.doNotMatch).toBeNull(); - expect(comp.success).toBeNull(); - expect(comp.error).toBe('ERROR'); - }); - }); -}); diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/account/register/register.component.spec.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/account/register/register.component.spec.ts deleted file mode 100644 index ae02abbb91e4..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/account/register/register.component.spec.ts +++ /dev/null @@ -1,118 +0,0 @@ -import { ComponentFixture, TestBed, async, inject, tick, fakeAsync } from '@angular/core/testing'; -import { Observable, of, throwError } from 'rxjs'; - -import { BookstoreTestModule } from '../../../test.module'; -import { EMAIL_ALREADY_USED_TYPE, LOGIN_ALREADY_USED_TYPE } from 'app/shared'; -import { Register } from 'app/account/register/register.service'; -import { RegisterComponent } from 'app/account/register/register.component'; - -describe('Component Tests', () => { - describe('RegisterComponent', () => { - let fixture: ComponentFixture; - let comp: RegisterComponent; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - imports: [BookstoreTestModule], - declarations: [RegisterComponent] - }) - .overrideTemplate(RegisterComponent, '') - .compileComponents(); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(RegisterComponent); - comp = fixture.componentInstance; - comp.ngOnInit(); - }); - - it('should ensure the two passwords entered match', () => { - comp.registerAccount.password = 'password'; - comp.confirmPassword = 'non-matching'; - - comp.register(); - - expect(comp.doNotMatch).toEqual('ERROR'); - }); - - it('should update success to OK after creating an account', inject( - [Register], - fakeAsync((service: Register) => { - spyOn(service, 'save').and.returnValue(of({})); - comp.registerAccount.password = comp.confirmPassword = 'password'; - - comp.register(); - tick(); - - expect(service.save).toHaveBeenCalledWith({ - password: 'password', - langKey: 'en' - }); - expect(comp.success).toEqual(true); - expect(comp.registerAccount.langKey).toEqual('en'); - expect(comp.errorUserExists).toBeNull(); - expect(comp.errorEmailExists).toBeNull(); - expect(comp.error).toBeNull(); - }) - )); - - it('should notify of user existence upon 400/login already in use', inject( - [Register], - fakeAsync((service: Register) => { - spyOn(service, 'save').and.returnValue( - throwError({ - status: 400, - error: { type: LOGIN_ALREADY_USED_TYPE } - }) - ); - comp.registerAccount.password = comp.confirmPassword = 'password'; - - comp.register(); - tick(); - - expect(comp.errorUserExists).toEqual('ERROR'); - expect(comp.errorEmailExists).toBeNull(); - expect(comp.error).toBeNull(); - }) - )); - - it('should notify of email existence upon 400/email address already in use', inject( - [Register], - fakeAsync((service: Register) => { - spyOn(service, 'save').and.returnValue( - throwError({ - status: 400, - error: { type: EMAIL_ALREADY_USED_TYPE } - }) - ); - comp.registerAccount.password = comp.confirmPassword = 'password'; - - comp.register(); - tick(); - - expect(comp.errorEmailExists).toEqual('ERROR'); - expect(comp.errorUserExists).toBeNull(); - expect(comp.error).toBeNull(); - }) - )); - - it('should notify of generic error', inject( - [Register], - fakeAsync((service: Register) => { - spyOn(service, 'save').and.returnValue( - throwError({ - status: 503 - }) - ); - comp.registerAccount.password = comp.confirmPassword = 'password'; - - comp.register(); - tick(); - - expect(comp.errorUserExists).toBeNull(); - expect(comp.errorEmailExists).toBeNull(); - expect(comp.error).toEqual('ERROR'); - }) - )); - }); -}); diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/account/settings/settings.component.spec.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/account/settings/settings.component.spec.ts deleted file mode 100644 index b6a6d34c1915..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/account/settings/settings.component.spec.ts +++ /dev/null @@ -1,81 +0,0 @@ -import { ComponentFixture, TestBed, async } from '@angular/core/testing'; -import { Observable, throwError } from 'rxjs'; - -import { BookstoreTestModule } from '../../../test.module'; -import { AccountService } from 'app/core'; -import { SettingsComponent } from 'app/account/settings/settings.component'; - -describe('Component Tests', () => { - describe('SettingsComponent', () => { - let comp: SettingsComponent; - let fixture: ComponentFixture; - let mockAuth: any; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - imports: [BookstoreTestModule], - declarations: [SettingsComponent], - providers: [] - }) - .overrideTemplate(SettingsComponent, '') - .compileComponents(); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(SettingsComponent); - comp = fixture.componentInstance; - mockAuth = fixture.debugElement.injector.get(AccountService); - }); - - it('should send the current identity upon save', () => { - // GIVEN - const accountValues = { - firstName: 'John', - lastName: 'Doe', - - activated: true, - email: 'john.doe@mail.com', - langKey: 'en', - login: 'john' - }; - mockAuth.setIdentityResponse(accountValues); - - // WHEN - comp.settingsAccount = accountValues; - comp.save(); - - // THEN - expect(mockAuth.identitySpy).toHaveBeenCalled(); - expect(mockAuth.saveSpy).toHaveBeenCalledWith(accountValues); - expect(comp.settingsAccount).toEqual(accountValues); - }); - - it('should notify of success upon successful save', () => { - // GIVEN - const accountValues = { - firstName: 'John', - lastName: 'Doe' - }; - mockAuth.setIdentityResponse(accountValues); - - // WHEN - comp.save(); - - // THEN - expect(comp.error).toBeNull(); - expect(comp.success).toBe('OK'); - }); - - it('should notify of error upon failed save', () => { - // GIVEN - mockAuth.saveSpy.and.returnValue(throwError('ERROR')); - - // WHEN - comp.save(); - - // THEN - expect(comp.error).toEqual('ERROR'); - expect(comp.success).toBeNull(); - }); - }); -}); diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/audits/audits.component.spec.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/audits/audits.component.spec.ts deleted file mode 100644 index 254791f51ab0..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/audits/audits.component.spec.ts +++ /dev/null @@ -1,133 +0,0 @@ -import { ComponentFixture, TestBed, async } from '@angular/core/testing'; -import { Observable, of } from 'rxjs'; -import { HttpHeaders, HttpResponse } from '@angular/common/http'; - -import { BookstoreTestModule } from '../../../test.module'; -import { AuditsComponent } from 'app/admin/audits/audits.component'; -import { AuditsService } from 'app/admin/audits/audits.service'; -import { Audit } from 'app/admin/audits/audit.model'; -import { ITEMS_PER_PAGE } from 'app/shared'; - -function build2DigitsDatePart(datePart: number) { - return `0${datePart}`.slice(-2); -} - -function getDate(isToday = true) { - let date: Date = new Date(); - if (isToday) { - // Today + 1 day - needed if the current day must be included - date.setDate(date.getDate() + 1); - } else { - // get last month - if (date.getMonth() === 0) { - date = new Date(date.getFullYear() - 1, 11, date.getDate()); - } else { - date = new Date(date.getFullYear(), date.getMonth() - 1, date.getDate()); - } - } - const monthString = build2DigitsDatePart(date.getMonth() + 1); - const dateString = build2DigitsDatePart(date.getDate()); - return `${date.getFullYear()}-${monthString}-${dateString}`; -} - -describe('Component Tests', () => { - describe('AuditsComponent', () => { - let comp: AuditsComponent; - let fixture: ComponentFixture; - let service: AuditsService; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - imports: [BookstoreTestModule], - declarations: [AuditsComponent], - providers: [AuditsService] - }) - .overrideTemplate(AuditsComponent, '') - .compileComponents(); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(AuditsComponent); - comp = fixture.componentInstance; - service = fixture.debugElement.injector.get(AuditsService); - }); - - describe('today function ', () => { - it('should set toDate to current date', () => { - comp.today(); - expect(comp.toDate).toBe(getDate()); - }); - }); - - describe('previousMonth function ', () => { - it('should set fromDate to current date', () => { - comp.previousMonth(); - expect(comp.fromDate).toBe(getDate(false)); - }); - }); - - describe('By default, on init', () => { - it('should set all default values correctly', () => { - fixture.detectChanges(); - expect(comp.toDate).toBe(getDate()); - expect(comp.fromDate).toBe(getDate(false)); - expect(comp.itemsPerPage).toBe(ITEMS_PER_PAGE); - expect(comp.page).toBe(10); - expect(comp.reverse).toBeFalsy(); - expect(comp.predicate).toBe('id'); - }); - }); - - describe('OnInit', () => { - it('Should call load all on init', () => { - // GIVEN - const headers = new HttpHeaders().append('link', 'link;link'); - const audit = new Audit({ remoteAddress: '127.0.0.1', sessionId: '123' }, 'user', '20140101', 'AUTHENTICATION_SUCCESS'); - spyOn(service, 'query').and.returnValue( - of( - new HttpResponse({ - body: [audit], - headers - }) - ) - ); - - // WHEN - comp.ngOnInit(); - - // THEN - expect(service.query).toHaveBeenCalled(); - expect(comp.audits[0]).toEqual(jasmine.objectContaining(audit)); - }); - }); - - describe('Create sort object', () => { - it('Should sort only by id asc', () => { - // GIVEN - comp.predicate = 'id'; - comp.reverse = false; - - // WHEN - const sort = comp.sort(); - - // THEN - expect(sort.length).toEqual(1); - expect(sort[0]).toEqual('id,desc'); - }); - - it('Should sort by timestamp asc then by id', () => { - // GIVEN - comp.predicate = 'timestamp'; - comp.reverse = true; - - // WHEN - const sort = comp.sort(); - - // THEN - expect(sort.length).toEqual(2); - expect(sort[0]).toEqual('timestamp,asc'); - expect(sort[1]).toEqual('id'); - }); - }); - }); -}); diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/audits/audits.service.spec.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/audits/audits.service.spec.ts deleted file mode 100644 index 84ff79f633d5..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/audits/audits.service.spec.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { TestBed } from '@angular/core/testing'; - -import { AuditsService } from 'app/admin/audits/audits.service'; -import { Audit } from 'app/admin/audits/audit.model'; -import { SERVER_API_URL } from 'app/app.constants'; -import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; - -describe('Service Tests', () => { - describe('Audits Service', () => { - let service: AuditsService; - let httpMock; - - beforeEach(() => { - TestBed.configureTestingModule({ - imports: [HttpClientTestingModule] - }); - - service = TestBed.get(AuditsService); - httpMock = TestBed.get(HttpTestingController); - }); - - afterEach(() => { - httpMock.verify(); - }); - - describe('Service methods', () => { - it('should call correct URL', () => { - service.query({}).subscribe(() => {}); - - const req = httpMock.expectOne({ method: 'GET' }); - const resourceUrl = SERVER_API_URL + 'management/audits'; - expect(req.request.url).toEqual(resourceUrl); - }); - - it('should return Audits', () => { - const audit = new Audit({ remoteAddress: '127.0.0.1', sessionId: '123' }, 'user', '20140101', 'AUTHENTICATION_SUCCESS'); - - service.query({}).subscribe(received => { - expect(received.body[0]).toEqual(audit); - }); - - const req = httpMock.expectOne({ method: 'GET' }); - req.flush([audit]); - }); - - it('should propagate not found response', () => { - service.query({}).subscribe(null, (_error: any) => { - expect(_error.status).toEqual(404); - }); - - const req = httpMock.expectOne({ method: 'GET' }); - req.flush('Invalid request parameters', { - status: 404, - statusText: 'Bad Request' - }); - }); - }); - }); -}); diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/configuration/configuration.component.spec.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/configuration/configuration.component.spec.ts deleted file mode 100644 index d21f87b57b66..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/configuration/configuration.component.spec.ts +++ /dev/null @@ -1,71 +0,0 @@ -import { ComponentFixture, TestBed, async } from '@angular/core/testing'; -import { of } from 'rxjs'; -import { HttpHeaders, HttpResponse } from '@angular/common/http'; - -import { BookstoreTestModule } from '../../../test.module'; -import { JhiConfigurationComponent } from 'app/admin/configuration/configuration.component'; -import { JhiConfigurationService } from 'app/admin/configuration/configuration.service'; -import { ITEMS_PER_PAGE } from 'app/shared'; -import { Log } from 'app/admin'; - -describe('Component Tests', () => { - describe('JhiConfigurationComponent', () => { - let comp: JhiConfigurationComponent; - let fixture: ComponentFixture; - let service: JhiConfigurationService; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - imports: [BookstoreTestModule], - declarations: [JhiConfigurationComponent], - providers: [JhiConfigurationService] - }) - .overrideTemplate(JhiConfigurationComponent, '') - .compileComponents(); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(JhiConfigurationComponent); - comp = fixture.componentInstance; - service = fixture.debugElement.injector.get(JhiConfigurationService); - }); - - describe('OnInit', () => { - it('should set all default values correctly', () => { - expect(comp.configKeys).toEqual([]); - expect(comp.filter).toBe(''); - expect(comp.orderProp).toBe('prefix'); - expect(comp.reverse).toBe(false); - }); - it('Should call load all on init', () => { - // GIVEN - const body = [{ config: 'test', properties: 'test' }, { config: 'test2' }]; - const envConfig = { envConfig: 'test' }; - spyOn(service, 'get').and.returnValue(of(body)); - spyOn(service, 'getEnv').and.returnValue(of(envConfig)); - - // WHEN - comp.ngOnInit(); - - // THEN - expect(service.get).toHaveBeenCalled(); - expect(service.getEnv).toHaveBeenCalled(); - expect(comp.configKeys).toEqual([['0', '1', '2', '3']]); - expect(comp.allConfiguration).toEqual(envConfig); - }); - }); - describe('keys method', () => { - it('should return the keys of an Object', () => { - // GIVEN - const data = { - key1: 'test', - key2: 'test2' - }; - - // THEN - expect(comp.keys(data)).toEqual(['key1', 'key2']); - expect(comp.keys(undefined)).toEqual([]); - }); - }); - }); -}); diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/configuration/configuration.service.spec.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/configuration/configuration.service.spec.ts deleted file mode 100644 index 6039044b7f9d..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/configuration/configuration.service.spec.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { TestBed } from '@angular/core/testing'; - -import { JhiConfigurationService } from 'app/admin/configuration/configuration.service'; -import { SERVER_API_URL } from 'app/app.constants'; -import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; -import { HttpResponse } from '@angular/common/http'; - -describe('Service Tests', () => { - describe('Logs Service', () => { - let service: JhiConfigurationService; - let httpMock; - - beforeEach(() => { - TestBed.configureTestingModule({ - imports: [HttpClientTestingModule] - }); - - service = TestBed.get(JhiConfigurationService); - httpMock = TestBed.get(HttpTestingController); - }); - - afterEach(() => { - httpMock.verify(); - }); - - describe('Service methods', () => { - it('should call correct URL', () => { - service.get().subscribe(() => {}); - - const req = httpMock.expectOne({ method: 'GET' }); - const resourceUrl = SERVER_API_URL + 'management/configprops'; - expect(req.request.url).toEqual(resourceUrl); - }); - - it('should get the config', () => { - const angularConfig = { - contexts: { - angular: { - beans: ['test2'] - } - } - }; - service.get().subscribe(received => { - expect(received.body[0]).toEqual(angularConfig); - }); - - const req = httpMock.expectOne({ method: 'GET' }); - req.flush(angularConfig); - }); - - it('should get the env', () => { - const propertySources = new HttpResponse({ - body: [{ name: 'test1', properties: 'test1' }, { name: 'test2', properties: 'test2' }] - }); - service.get().subscribe(received => { - expect(received.body[0]).toEqual(propertySources); - }); - - const req = httpMock.expectOne({ method: 'GET' }); - req.flush(propertySources); - }); - }); - }); -}); diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/health/health.component.spec.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/health/health.component.spec.ts deleted file mode 100644 index 549b430f6702..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/health/health.component.spec.ts +++ /dev/null @@ -1,321 +0,0 @@ -import { ComponentFixture, TestBed, async } from '@angular/core/testing'; -import { HttpResponse, HttpErrorResponse } from '@angular/common/http'; -import { of, throwError } from 'rxjs'; - -import { BookstoreTestModule } from '../../../test.module'; -import { JhiHealthCheckComponent } from 'app/admin/health/health.component'; -import { JhiHealthService } from 'app/admin/health/health.service'; - -describe('Component Tests', () => { - describe('JhiHealthCheckComponent', () => { - let comp: JhiHealthCheckComponent; - let fixture: ComponentFixture; - let service: JhiHealthService; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - imports: [BookstoreTestModule], - declarations: [JhiHealthCheckComponent] - }) - .overrideTemplate(JhiHealthCheckComponent, '') - .compileComponents(); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(JhiHealthCheckComponent); - comp = fixture.componentInstance; - service = fixture.debugElement.injector.get(JhiHealthService); - }); - - describe('baseName and subSystemName', () => { - it('should return the basename when it has no sub system', () => { - expect(comp.baseName('base')).toBe('base'); - }); - - it('should return the basename when it has sub systems', () => { - expect(comp.baseName('base.subsystem.system')).toBe('base'); - }); - - it('should return the sub system name', () => { - expect(comp.subSystemName('subsystem')).toBe(''); - }); - - it('should return the subsystem when it has multiple keys', () => { - expect(comp.subSystemName('subsystem.subsystem.system')).toBe(' - subsystem.system'); - }); - }); - - describe('transformHealthData', () => { - it('should flatten empty health data', () => { - const data = {}; - const expected = []; - expect(service.transformHealthData(data)).toEqual(expected); - }); - - it('should flatten health data with no subsystems', () => { - const data = { - details: { - status: 'UP', - db: { - status: 'UP', - database: 'H2', - hello: '1' - }, - mail: { - status: 'UP', - error: 'mail.a.b.c' - } - } - }; - const expected = [ - { - name: 'db', - status: 'UP', - details: { - database: 'H2', - hello: '1' - } - }, - { - name: 'mail', - error: 'mail.a.b.c', - status: 'UP' - } - ]; - expect(service.transformHealthData(data)).toEqual(expected); - }); - - it('should flatten health data with subsystems at level 1, main system has no additional information', () => { - const data = { - details: { - status: 'UP', - db: { - status: 'UP', - database: 'H2', - hello: '1' - }, - mail: { - status: 'UP', - error: 'mail.a.b.c' - }, - system: { - status: 'DOWN', - subsystem1: { - status: 'UP', - property1: 'system.subsystem1.property1' - }, - subsystem2: { - status: 'DOWN', - error: 'system.subsystem1.error', - property2: 'system.subsystem2.property2' - } - } - } - }; - const expected = [ - { - name: 'db', - status: 'UP', - details: { - database: 'H2', - hello: '1' - } - }, - { - name: 'mail', - error: 'mail.a.b.c', - status: 'UP' - }, - { - name: 'system.subsystem1', - status: 'UP', - details: { - property1: 'system.subsystem1.property1' - } - }, - { - name: 'system.subsystem2', - error: 'system.subsystem1.error', - status: 'DOWN', - details: { - property2: 'system.subsystem2.property2' - } - } - ]; - expect(service.transformHealthData(data)).toEqual(expected); - }); - - it('should flatten health data with subsystems at level 1, main system has additional information', () => { - const data = { - details: { - status: 'UP', - db: { - status: 'UP', - database: 'H2', - hello: '1' - }, - mail: { - status: 'UP', - error: 'mail.a.b.c' - }, - system: { - status: 'DOWN', - property1: 'system.property1', - subsystem1: { - status: 'UP', - property1: 'system.subsystem1.property1' - }, - subsystem2: { - status: 'DOWN', - error: 'system.subsystem1.error', - property2: 'system.subsystem2.property2' - } - } - } - }; - const expected = [ - { - name: 'db', - status: 'UP', - details: { - database: 'H2', - hello: '1' - } - }, - { - name: 'mail', - error: 'mail.a.b.c', - status: 'UP' - }, - { - name: 'system', - status: 'DOWN', - details: { - property1: 'system.property1' - } - }, - { - name: 'system.subsystem1', - status: 'UP', - details: { - property1: 'system.subsystem1.property1' - } - }, - { - name: 'system.subsystem2', - error: 'system.subsystem1.error', - status: 'DOWN', - details: { - property2: 'system.subsystem2.property2' - } - } - ]; - expect(service.transformHealthData(data)).toEqual(expected); - }); - - it('should flatten health data with subsystems at level 1, main system has additional error', () => { - const data = { - details: { - status: 'UP', - db: { - status: 'UP', - database: 'H2', - hello: '1' - }, - mail: { - status: 'UP', - error: 'mail.a.b.c' - }, - system: { - status: 'DOWN', - error: 'show me', - subsystem1: { - status: 'UP', - property1: 'system.subsystem1.property1' - }, - subsystem2: { - status: 'DOWN', - error: 'system.subsystem1.error', - property2: 'system.subsystem2.property2' - } - } - } - }; - const expected = [ - { - name: 'db', - status: 'UP', - details: { - database: 'H2', - hello: '1' - } - }, - { - name: 'mail', - error: 'mail.a.b.c', - status: 'UP' - }, - { - name: 'system', - error: 'show me', - status: 'DOWN' - }, - { - name: 'system.subsystem1', - status: 'UP', - details: { - property1: 'system.subsystem1.property1' - } - }, - { - name: 'system.subsystem2', - error: 'system.subsystem1.error', - status: 'DOWN', - details: { - property2: 'system.subsystem2.property2' - } - } - ]; - expect(service.transformHealthData(data)).toEqual(expected); - }); - }); - - describe('getBadgeClass', () => { - it('should get badge class', () => { - const upBadgeClass = comp.getBadgeClass('UP'); - const downBadgeClass = comp.getBadgeClass('DOWN'); - expect(upBadgeClass).toEqual('badge-success'); - expect(downBadgeClass).toEqual('badge-danger'); - }); - }); - - describe('refresh', () => { - it('should call refresh on init', () => { - // GIVEN - spyOn(service, 'checkHealth').and.returnValue(of(new HttpResponse())); - spyOn(service, 'transformHealthData').and.returnValue(of({ data: 'test' })); - - // WHEN - comp.ngOnInit(); - - // THEN - expect(service.checkHealth).toHaveBeenCalled(); - expect(service.transformHealthData).toHaveBeenCalled(); - expect(comp.healthData.value).toEqual({ data: 'test' }); - }); - it('should handle a 503 on refreshing health data', () => { - // GIVEN - spyOn(service, 'checkHealth').and.returnValue(throwError(new HttpErrorResponse({ status: 503, error: 'Mail down' }))); - spyOn(service, 'transformHealthData').and.returnValue(of({ health: 'down' })); - - // WHEN - comp.refresh(); - - // THEN - expect(service.checkHealth).toHaveBeenCalled(); - expect(service.transformHealthData).toHaveBeenCalled(); - expect(comp.healthData.value).toEqual({ health: 'down' }); - }); - }); - }); -}); diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/logs/logs.component.spec.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/logs/logs.component.spec.ts deleted file mode 100644 index def356c0f2cc..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/logs/logs.component.spec.ts +++ /dev/null @@ -1,77 +0,0 @@ -import { ComponentFixture, TestBed, async } from '@angular/core/testing'; -import { of } from 'rxjs'; -import { HttpHeaders, HttpResponse } from '@angular/common/http'; - -import { BookstoreTestModule } from '../../../test.module'; -import { LogsComponent } from 'app/admin/logs/logs.component'; -import { LogsService } from 'app/admin/logs/logs.service'; -import { ITEMS_PER_PAGE } from 'app/shared'; -import { Log } from 'app/admin'; - -describe('Component Tests', () => { - describe('LogsComponent', () => { - let comp: LogsComponent; - let fixture: ComponentFixture; - let service: LogsService; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - imports: [BookstoreTestModule], - declarations: [LogsComponent], - providers: [LogsService] - }) - .overrideTemplate(LogsComponent, '') - .compileComponents(); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(LogsComponent); - comp = fixture.componentInstance; - service = fixture.debugElement.injector.get(LogsService); - }); - - describe('OnInit', () => { - it('should set all default values correctly', () => { - expect(comp.filter).toBe(''); - expect(comp.orderProp).toBe('name'); - expect(comp.reverse).toBe(false); - }); - it('Should call load all on init', () => { - // GIVEN - const headers = new HttpHeaders().append('link', 'link;link'); - const log = new Log('main', 'WARN'); - spyOn(service, 'findAll').and.returnValue( - of( - new HttpResponse({ - body: [log], - headers - }) - ) - ); - - // WHEN - comp.ngOnInit(); - - // THEN - expect(service.findAll).toHaveBeenCalled(); - expect(comp.loggers[0]).toEqual(jasmine.objectContaining(log)); - }); - }); - describe('change log level', () => { - it('should change log level correctly', () => { - // GIVEN - const log = new Log('main', 'ERROR'); - spyOn(service, 'changeLevel').and.returnValue(of(new HttpResponse())); - spyOn(service, 'findAll').and.returnValue(of(new HttpResponse({ body: [log] }))); - - // WHEN - comp.changeLevel('main', 'ERROR'); - - // THEN - expect(service.changeLevel).toHaveBeenCalled(); - expect(service.findAll).toHaveBeenCalled(); - expect(comp.loggers[0]).toEqual(jasmine.objectContaining(log)); - }); - }); - }); -}); diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/logs/logs.service.spec.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/logs/logs.service.spec.ts deleted file mode 100644 index c34833922e99..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/logs/logs.service.spec.ts +++ /dev/null @@ -1,58 +0,0 @@ -import { TestBed } from '@angular/core/testing'; - -import { LogsService } from 'app/admin/logs/logs.service'; -import { Log } from 'app/admin/logs/log.model'; -import { SERVER_API_URL } from 'app/app.constants'; -import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; - -describe('Service Tests', () => { - describe('Logs Service', () => { - let service: LogsService; - let httpMock; - - beforeEach(() => { - TestBed.configureTestingModule({ - imports: [HttpClientTestingModule] - }); - - service = TestBed.get(LogsService); - httpMock = TestBed.get(HttpTestingController); - }); - - afterEach(() => { - httpMock.verify(); - }); - - describe('Service methods', () => { - it('should call correct URL', () => { - service.findAll().subscribe(() => {}); - - const req = httpMock.expectOne({ method: 'GET' }); - const resourceUrl = SERVER_API_URL + 'management/logs'; - expect(req.request.url).toEqual(resourceUrl); - }); - - it('should return Logs', () => { - const log = new Log('main', 'ERROR'); - - service.findAll().subscribe(received => { - expect(received.body[0]).toEqual(log); - }); - - const req = httpMock.expectOne({ method: 'GET' }); - req.flush([log]); - }); - - it('should change log level', () => { - const log = new Log('main', 'ERROR'); - - service.changeLevel(log).subscribe(received => { - expect(received.body[0]).toEqual(log); - }); - - const req = httpMock.expectOne({ method: 'PUT' }); - req.flush([log]); - }); - }); - }); -}); diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/metrics/metrics.component.spec.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/metrics/metrics.component.spec.ts deleted file mode 100644 index d4a992b9633a..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/metrics/metrics.component.spec.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { ComponentFixture, TestBed, async } from '@angular/core/testing'; -import { HttpResponse, HttpErrorResponse } from '@angular/common/http'; -import { of, throwError } from 'rxjs'; - -import { BookstoreTestModule } from '../../../test.module'; -import { JhiMetricsMonitoringComponent } from 'app/admin/metrics/metrics.component'; -import { JhiMetricsService } from 'app/admin/metrics/metrics.service'; - -describe('Component Tests', () => { - describe('JhiMetricsMonitoringComponent', () => { - let comp: JhiMetricsMonitoringComponent; - let fixture: ComponentFixture; - let service: JhiMetricsService; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - imports: [BookstoreTestModule], - declarations: [JhiMetricsMonitoringComponent] - }) - .overrideTemplate(JhiMetricsMonitoringComponent, '') - .compileComponents(); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(JhiMetricsMonitoringComponent); - comp = fixture.componentInstance; - service = fixture.debugElement.injector.get(JhiMetricsService); - }); - - describe('refresh', () => { - it('should call refresh on init', () => { - // GIVEN - const response = { - timers: { - service: 'test', - unrelatedKey: 'test' - }, - gauges: { - 'jcache.statistics': { - value: 2 - }, - unrelatedKey: 'test' - } - }; - spyOn(service, 'getMetrics').and.returnValue(of(response)); - - // WHEN - comp.ngOnInit(); - - // THEN - expect(service.getMetrics).toHaveBeenCalled(); - }); - }); - }); -}); diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/metrics/metrics.service.spec.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/metrics/metrics.service.spec.ts deleted file mode 100644 index 2c3665b06269..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/metrics/metrics.service.spec.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { TestBed } from '@angular/core/testing'; - -import { JhiMetricsService } from 'app/admin/metrics/metrics.service'; -import { SERVER_API_URL } from 'app/app.constants'; -import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; - -describe('Service Tests', () => { - describe('Logs Service', () => { - let service: JhiMetricsService; - let httpMock; - - beforeEach(() => { - TestBed.configureTestingModule({ - imports: [HttpClientTestingModule] - }); - - service = TestBed.get(JhiMetricsService); - httpMock = TestBed.get(HttpTestingController); - }); - - afterEach(() => { - httpMock.verify(); - }); - - describe('Service methods', () => { - it('should call correct URL', () => { - service.getMetrics().subscribe(() => {}); - - const req = httpMock.expectOne({ method: 'GET' }); - const resourceUrl = SERVER_API_URL + 'management/jhi-metrics'; - expect(req.request.url).toEqual(resourceUrl); - }); - - it('should return Metrics', () => { - const metrics = []; - - service.getMetrics().subscribe(received => { - expect(received.body[0]).toEqual(metrics); - }); - - const req = httpMock.expectOne({ method: 'GET' }); - req.flush([metrics]); - }); - - it('should return Thread Dump', () => { - const dump = [{ name: 'test1', threadState: 'RUNNABLE' }]; - - service.threadDump().subscribe(received => { - expect(received.body[0]).toEqual(dump); - }); - - const req = httpMock.expectOne({ method: 'GET' }); - req.flush([dump]); - }); - }); - }); -}); diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/user-management/user-management-delete-dialog.component.spec.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/user-management/user-management-delete-dialog.component.spec.ts deleted file mode 100644 index 596e1b560994..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/user-management/user-management-delete-dialog.component.spec.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { ComponentFixture, TestBed, async, inject, fakeAsync, tick } from '@angular/core/testing'; -import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; -import { Observable, of } from 'rxjs'; -import { JhiEventManager } from 'ng-jhipster'; - -import { BookstoreTestModule } from '../../../test.module'; -import { UserMgmtDeleteDialogComponent } from 'app/admin/user-management/user-management-delete-dialog.component'; -import { UserService } from 'app/core'; - -describe('Component Tests', () => { - describe('User Management Delete Component', () => { - let comp: UserMgmtDeleteDialogComponent; - let fixture: ComponentFixture; - let service: UserService; - let mockEventManager: any; - let mockActiveModal: any; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - imports: [BookstoreTestModule], - declarations: [UserMgmtDeleteDialogComponent] - }) - .overrideTemplate(UserMgmtDeleteDialogComponent, '') - .compileComponents(); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(UserMgmtDeleteDialogComponent); - comp = fixture.componentInstance; - service = fixture.debugElement.injector.get(UserService); - mockEventManager = fixture.debugElement.injector.get(JhiEventManager); - mockActiveModal = fixture.debugElement.injector.get(NgbActiveModal); - }); - - describe('confirmDelete', () => { - it('Should call delete service on confirmDelete', inject( - [], - fakeAsync(() => { - // GIVEN - spyOn(service, 'delete').and.returnValue(of({})); - - // WHEN - comp.confirmDelete('user'); - tick(); - - // THEN - expect(service.delete).toHaveBeenCalledWith('user'); - expect(mockActiveModal.dismissSpy).toHaveBeenCalled(); - expect(mockEventManager.broadcastSpy).toHaveBeenCalled(); - }) - )); - }); - }); -}); diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/user-management/user-management-detail.component.spec.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/user-management/user-management-detail.component.spec.ts deleted file mode 100644 index f64b8bb88b9d..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/user-management/user-management-detail.component.spec.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { ComponentFixture, TestBed, async } from '@angular/core/testing'; -import { ActivatedRoute } from '@angular/router'; -import { of } from 'rxjs'; - -import { BookstoreTestModule } from '../../../test.module'; -import { UserMgmtDetailComponent } from 'app/admin/user-management/user-management-detail.component'; -import { User } from 'app/core'; - -describe('Component Tests', () => { - describe('User Management Detail Component', () => { - let comp: UserMgmtDetailComponent; - let fixture: ComponentFixture; - const route = ({ - data: of({ user: new User(1, 'user', 'first', 'last', 'first@last.com', true, 'en', ['ROLE_USER'], 'admin', null, null, null) }) - } as any) as ActivatedRoute; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - imports: [BookstoreTestModule], - declarations: [UserMgmtDetailComponent], - providers: [ - { - provide: ActivatedRoute, - useValue: route - } - ] - }) - .overrideTemplate(UserMgmtDetailComponent, '') - .compileComponents(); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(UserMgmtDetailComponent); - comp = fixture.componentInstance; - }); - - describe('OnInit', () => { - it('Should call load all on init', () => { - // GIVEN - - // WHEN - comp.ngOnInit(); - - // THEN - expect(comp.user).toEqual( - jasmine.objectContaining({ - id: 1, - login: 'user', - firstName: 'first', - lastName: 'last', - email: 'first@last.com', - activated: true, - langKey: 'en', - authorities: ['ROLE_USER'], - createdBy: 'admin', - createdDate: null, - lastModifiedBy: null, - lastModifiedDate: null, - password: null - }) - ); - }); - }); - }); -}); diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/user-management/user-management-update.component.spec.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/user-management/user-management-update.component.spec.ts deleted file mode 100644 index c98694ba823e..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/user-management/user-management-update.component.spec.ts +++ /dev/null @@ -1,99 +0,0 @@ -import { ComponentFixture, TestBed, async, inject, fakeAsync, tick } from '@angular/core/testing'; -import { HttpResponse } from '@angular/common/http'; -import { ActivatedRoute } from '@angular/router'; -import { Observable, of } from 'rxjs'; - -import { BookstoreTestModule } from '../../../test.module'; -import { UserMgmtUpdateComponent } from 'app/admin/user-management/user-management-update.component'; -import { UserService, User } from 'app/core'; - -describe('Component Tests', () => { - describe('User Management Update Component', () => { - let comp: UserMgmtUpdateComponent; - let fixture: ComponentFixture; - let service: UserService; - const route = ({ - data: of({ user: new User(1, 'user', 'first', 'last', 'first@last.com', true, 'en', ['ROLE_USER'], 'admin', null, null, null) }) - } as any) as ActivatedRoute; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - imports: [BookstoreTestModule], - declarations: [UserMgmtUpdateComponent], - providers: [ - { - provide: ActivatedRoute, - useValue: route - } - ] - }) - .overrideTemplate(UserMgmtUpdateComponent, '') - .compileComponents(); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(UserMgmtUpdateComponent); - comp = fixture.componentInstance; - service = fixture.debugElement.injector.get(UserService); - }); - - describe('OnInit', () => { - it('Should load authorities and language on init', inject( - [], - fakeAsync(() => { - // GIVEN - spyOn(service, 'authorities').and.returnValue(of(['USER'])); - - // WHEN - comp.ngOnInit(); - - // THEN - expect(service.authorities).toHaveBeenCalled(); - expect(comp.authorities).toEqual(['USER']); - }) - )); - }); - - describe('save', () => { - it('Should call update service on save for existing user', inject( - [], - fakeAsync(() => { - // GIVEN - const entity = new User(123); - spyOn(service, 'update').and.returnValue( - of( - new HttpResponse({ - body: entity - }) - ) - ); - comp.user = entity; - // WHEN - comp.save(); - tick(); // simulate async - - // THEN - expect(service.update).toHaveBeenCalledWith(entity); - expect(comp.isSaving).toEqual(false); - }) - )); - - it('Should call create service on save for new user', inject( - [], - fakeAsync(() => { - // GIVEN - const entity = new User(); - spyOn(service, 'create').and.returnValue(of(new HttpResponse({ body: entity }))); - comp.user = entity; - // WHEN - comp.save(); - tick(); // simulate async - - // THEN - expect(service.create).toHaveBeenCalledWith(entity); - expect(comp.isSaving).toEqual(false); - }) - )); - }); - }); -}); diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/user-management/user-management.component.spec.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/user-management/user-management.component.spec.ts deleted file mode 100644 index 31fea387b81d..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/admin/user-management/user-management.component.spec.ts +++ /dev/null @@ -1,85 +0,0 @@ -import { ComponentFixture, TestBed, async, inject, fakeAsync, tick } from '@angular/core/testing'; -import { Observable, of } from 'rxjs'; -import { HttpHeaders, HttpResponse } from '@angular/common/http'; - -import { BookstoreTestModule } from '../../../test.module'; -import { UserMgmtComponent } from 'app/admin/user-management/user-management.component'; -import { UserService, User } from 'app/core'; - -describe('Component Tests', () => { - describe('User Management Component', () => { - let comp: UserMgmtComponent; - let fixture: ComponentFixture; - let service: UserService; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - imports: [BookstoreTestModule], - declarations: [UserMgmtComponent] - }) - .overrideTemplate(UserMgmtComponent, '') - .compileComponents(); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(UserMgmtComponent); - comp = fixture.componentInstance; - service = fixture.debugElement.injector.get(UserService); - }); - - describe('OnInit', () => { - it('Should call load all on init', inject( - [], - fakeAsync(() => { - // GIVEN - const headers = new HttpHeaders().append('link', 'link;link'); - spyOn(service, 'query').and.returnValue( - of( - new HttpResponse({ - body: [new User(123)], - headers - }) - ) - ); - - // WHEN - comp.ngOnInit(); - tick(); // simulate async - - // THEN - expect(service.query).toHaveBeenCalled(); - expect(comp.users[0]).toEqual(jasmine.objectContaining({ id: 123 })); - }) - )); - }); - - describe('setActive', () => { - it('Should update user and call load all', inject( - [], - fakeAsync(() => { - // GIVEN - const headers = new HttpHeaders().append('link', 'link;link'); - const user = new User(123); - spyOn(service, 'query').and.returnValue( - of( - new HttpResponse({ - body: [user], - headers - }) - ) - ); - spyOn(service, 'update').and.returnValue(of(new HttpResponse({ status: 200 }))); - - // WHEN - comp.setActive(user, true); - tick(); // simulate async - - // THEN - expect(service.update).toHaveBeenCalledWith(user); - expect(service.query).toHaveBeenCalled(); - expect(comp.users[0]).toEqual(jasmine.objectContaining({ id: 123 })); - }) - )); - }); - }); -}); diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/core/user/account.service.spec.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/core/user/account.service.spec.ts deleted file mode 100644 index 01ed421f57b3..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/core/user/account.service.spec.ts +++ /dev/null @@ -1,102 +0,0 @@ -import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; -import { TestBed } from '@angular/core/testing'; -import { SERVER_API_URL } from 'app/app.constants'; -import { AccountService } from 'app/core'; -import { JhiDateUtils } from 'ng-jhipster'; -import { SessionStorageService } from 'ngx-webstorage'; - -describe('Service Tests', () => { - describe('Account Service', () => { - let service: AccountService; - let httpMock; - - beforeEach(() => { - TestBed.configureTestingModule({ - imports: [HttpClientTestingModule], - providers: [JhiDateUtils, SessionStorageService] - }); - - service = TestBed.get(AccountService); - httpMock = TestBed.get(HttpTestingController); - }); - - afterEach(() => { - httpMock.verify(); - }); - - describe('Service methods', () => { - it('should call /account if user is undefined', () => { - service.identity().then(() => {}); - const req = httpMock.expectOne({ method: 'GET' }); - const resourceUrl = SERVER_API_URL + 'api/account'; - - expect(req.request.url).toEqual(`${resourceUrl}`); - }); - - it('should call /account only once', () => { - service.identity().then(() => service.identity().then(() => {})); - const req = httpMock.expectOne({ method: 'GET' }); - const resourceUrl = SERVER_API_URL + 'api/account'; - - expect(req.request.url).toEqual(`${resourceUrl}`); - req.flush({ - firstName: 'John' - }); - }); - - describe('hasAuthority', () => { - it('should return false if user is not logged', async () => { - const hasAuthority = await service.hasAuthority('ROLE_USER'); - expect(hasAuthority).toBeFalsy(); - }); - - it('should return false if user is logged and has not authority', async () => { - service.authenticate({ - authorities: ['ROLE_USER'] - }); - - const hasAuthority = await service.hasAuthority('ROLE_ADMIN'); - - expect(hasAuthority).toBeFalsy(); - }); - - it('should return true if user is logged and has authority', async () => { - service.authenticate({ - authorities: ['ROLE_USER'] - }); - - const hasAuthority = await service.hasAuthority('ROLE_USER'); - - expect(hasAuthority).toBeTruthy(); - }); - }); - - describe('hasAnyAuthority', () => { - it('should return false if user is not logged', async () => { - const hasAuthority = await service.hasAnyAuthority(['ROLE_USER']); - expect(hasAuthority).toBeFalsy(); - }); - - it('should return false if user is logged and has not authority', async () => { - service.authenticate({ - authorities: ['ROLE_USER'] - }); - - const hasAuthority = await service.hasAnyAuthority(['ROLE_ADMIN']); - - expect(hasAuthority).toBeFalsy(); - }); - - it('should return true if user is logged and has authority', async () => { - service.authenticate({ - authorities: ['ROLE_USER'] - }); - - const hasAuthority = await service.hasAnyAuthority(['ROLE_USER', 'ROLE_ADMIN']); - - expect(hasAuthority).toBeTruthy(); - }); - }); - }); - }); -}); diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/core/user/user.service.spec.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/core/user/user.service.spec.ts deleted file mode 100644 index 9c05839a5712..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/core/user/user.service.spec.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { TestBed } from '@angular/core/testing'; -import { JhiDateUtils } from 'ng-jhipster'; - -import { UserService, User } from 'app/core'; -import { SERVER_API_URL } from 'app/app.constants'; -import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; - -describe('Service Tests', () => { - describe('User Service', () => { - let service: UserService; - let httpMock; - - beforeEach(() => { - TestBed.configureTestingModule({ - imports: [HttpClientTestingModule], - providers: [JhiDateUtils] - }); - - service = TestBed.get(UserService); - httpMock = TestBed.get(HttpTestingController); - }); - - afterEach(() => { - httpMock.verify(); - }); - - describe('Service methods', () => { - it('should call correct URL', () => { - service.find('user').subscribe(() => {}); - - const req = httpMock.expectOne({ method: 'GET' }); - const resourceUrl = SERVER_API_URL + 'api/users'; - expect(req.request.url).toEqual(`${resourceUrl}/user`); - }); - it('should return User', () => { - service.find('user').subscribe(received => { - expect(received.body.login).toEqual('user'); - }); - - const req = httpMock.expectOne({ method: 'GET' }); - req.flush(new User(1, 'user')); - }); - - it('should return Authorities', () => { - service.authorities().subscribe(_authorities => { - expect(_authorities).toEqual(['ROLE_USER', 'ROLE_ADMIN']); - }); - const req = httpMock.expectOne({ method: 'GET' }); - - req.flush(['ROLE_USER', 'ROLE_ADMIN']); - }); - - it('should propagate not found response', () => { - service.find('user').subscribe(null, (_error: any) => { - expect(_error.status).toEqual(404); - }); - - const req = httpMock.expectOne({ method: 'GET' }); - req.flush('Invalid request parameters', { - status: 404, - statusText: 'Bad Request' - }); - }); - }); - }); -}); diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/entities/book/book-delete-dialog.component.spec.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/entities/book/book-delete-dialog.component.spec.ts deleted file mode 100644 index 6ffba6ee1e7b..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/entities/book/book-delete-dialog.component.spec.ts +++ /dev/null @@ -1,52 +0,0 @@ -/* tslint:disable max-line-length */ -import { ComponentFixture, TestBed, inject, fakeAsync, tick } from '@angular/core/testing'; -import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; -import { Observable, of } from 'rxjs'; -import { JhiEventManager } from 'ng-jhipster'; - -import { BookstoreTestModule } from '../../../test.module'; -import { BookDeleteDialogComponent } from 'app/entities/book/book-delete-dialog.component'; -import { BookService } from 'app/entities/book/book.service'; - -describe('Component Tests', () => { - describe('Book Management Delete Component', () => { - let comp: BookDeleteDialogComponent; - let fixture: ComponentFixture; - let service: BookService; - let mockEventManager: any; - let mockActiveModal: any; - - beforeEach(() => { - TestBed.configureTestingModule({ - imports: [BookstoreTestModule], - declarations: [BookDeleteDialogComponent] - }) - .overrideTemplate(BookDeleteDialogComponent, '') - .compileComponents(); - fixture = TestBed.createComponent(BookDeleteDialogComponent); - comp = fixture.componentInstance; - service = fixture.debugElement.injector.get(BookService); - mockEventManager = fixture.debugElement.injector.get(JhiEventManager); - mockActiveModal = fixture.debugElement.injector.get(NgbActiveModal); - }); - - describe('confirmDelete', () => { - it('Should call delete service on confirmDelete', inject( - [], - fakeAsync(() => { - // GIVEN - spyOn(service, 'delete').and.returnValue(of({})); - - // WHEN - comp.confirmDelete(123); - tick(); - - // THEN - expect(service.delete).toHaveBeenCalledWith(123); - expect(mockActiveModal.dismissSpy).toHaveBeenCalled(); - expect(mockEventManager.broadcastSpy).toHaveBeenCalled(); - }) - )); - }); - }); -}); diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/entities/book/book-detail.component.spec.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/entities/book/book-detail.component.spec.ts deleted file mode 100644 index b0ff94b3ea77..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/entities/book/book-detail.component.spec.ts +++ /dev/null @@ -1,40 +0,0 @@ -/* tslint:disable max-line-length */ -import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { ActivatedRoute } from '@angular/router'; -import { of } from 'rxjs'; - -import { BookstoreTestModule } from '../../../test.module'; -import { BookDetailComponent } from 'app/entities/book/book-detail.component'; -import { Book } from 'app/shared/model/book.model'; - -describe('Component Tests', () => { - describe('Book Management Detail Component', () => { - let comp: BookDetailComponent; - let fixture: ComponentFixture; - const route = ({ data: of({ book: new Book(123) }) } as any) as ActivatedRoute; - - beforeEach(() => { - TestBed.configureTestingModule({ - imports: [BookstoreTestModule], - declarations: [BookDetailComponent], - providers: [{ provide: ActivatedRoute, useValue: route }] - }) - .overrideTemplate(BookDetailComponent, '') - .compileComponents(); - fixture = TestBed.createComponent(BookDetailComponent); - comp = fixture.componentInstance; - }); - - describe('OnInit', () => { - it('Should call load all on init', () => { - // GIVEN - - // WHEN - comp.ngOnInit(); - - // THEN - expect(comp.book).toEqual(jasmine.objectContaining({ id: 123 })); - }); - }); - }); -}); diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/entities/book/book-update.component.spec.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/entities/book/book-update.component.spec.ts deleted file mode 100644 index 336a2e2397ed..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/entities/book/book-update.component.spec.ts +++ /dev/null @@ -1,60 +0,0 @@ -/* tslint:disable max-line-length */ -import { ComponentFixture, TestBed, fakeAsync, tick } from '@angular/core/testing'; -import { HttpResponse } from '@angular/common/http'; -import { Observable, of } from 'rxjs'; - -import { BookstoreTestModule } from '../../../test.module'; -import { BookUpdateComponent } from 'app/entities/book/book-update.component'; -import { BookService } from 'app/entities/book/book.service'; -import { Book } from 'app/shared/model/book.model'; - -describe('Component Tests', () => { - describe('Book Management Update Component', () => { - let comp: BookUpdateComponent; - let fixture: ComponentFixture; - let service: BookService; - - beforeEach(() => { - TestBed.configureTestingModule({ - imports: [BookstoreTestModule], - declarations: [BookUpdateComponent] - }) - .overrideTemplate(BookUpdateComponent, '') - .compileComponents(); - - fixture = TestBed.createComponent(BookUpdateComponent); - comp = fixture.componentInstance; - service = fixture.debugElement.injector.get(BookService); - }); - - describe('save', () => { - it('Should call update service on save for existing entity', fakeAsync(() => { - // GIVEN - const entity = new Book(123); - spyOn(service, 'update').and.returnValue(of(new HttpResponse({ body: entity }))); - comp.book = entity; - // WHEN - comp.save(); - tick(); // simulate async - - // THEN - expect(service.update).toHaveBeenCalledWith(entity); - expect(comp.isSaving).toEqual(false); - })); - - it('Should call create service on save for new entity', fakeAsync(() => { - // GIVEN - const entity = new Book(); - spyOn(service, 'create').and.returnValue(of(new HttpResponse({ body: entity }))); - comp.book = entity; - // WHEN - comp.save(); - tick(); // simulate async - - // THEN - expect(service.create).toHaveBeenCalledWith(entity); - expect(comp.isSaving).toEqual(false); - })); - }); - }); -}); diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/entities/book/book.component.spec.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/entities/book/book.component.spec.ts deleted file mode 100644 index 3b3d4726508a..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/entities/book/book.component.spec.ts +++ /dev/null @@ -1,51 +0,0 @@ -/* tslint:disable max-line-length */ -import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { Observable, of } from 'rxjs'; -import { HttpHeaders, HttpResponse } from '@angular/common/http'; - -import { BookstoreTestModule } from '../../../test.module'; -import { BookComponent } from 'app/entities/book/book.component'; -import { BookService } from 'app/entities/book/book.service'; -import { Book } from 'app/shared/model/book.model'; - -describe('Component Tests', () => { - describe('Book Management Component', () => { - let comp: BookComponent; - let fixture: ComponentFixture; - let service: BookService; - - beforeEach(() => { - TestBed.configureTestingModule({ - imports: [BookstoreTestModule], - declarations: [BookComponent], - providers: [] - }) - .overrideTemplate(BookComponent, '') - .compileComponents(); - - fixture = TestBed.createComponent(BookComponent); - comp = fixture.componentInstance; - service = fixture.debugElement.injector.get(BookService); - }); - - it('Should call load all on init', () => { - // GIVEN - const headers = new HttpHeaders().append('link', 'link;link'); - spyOn(service, 'query').and.returnValue( - of( - new HttpResponse({ - body: [new Book(123)], - headers - }) - ) - ); - - // WHEN - comp.ngOnInit(); - - // THEN - expect(service.query).toHaveBeenCalled(); - expect(comp.books[0]).toEqual(jasmine.objectContaining({ id: 123 })); - }); - }); -}); diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/entities/book/book.service.spec.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/entities/book/book.service.spec.ts deleted file mode 100644 index cd0c5b731808..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/entities/book/book.service.spec.ts +++ /dev/null @@ -1,137 +0,0 @@ -/* tslint:disable max-line-length */ -import { TestBed, getTestBed } from '@angular/core/testing'; -import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; -import { HttpClient, HttpResponse } from '@angular/common/http'; -import { of } from 'rxjs'; -import { take, map } from 'rxjs/operators'; -import * as moment from 'moment'; -import { DATE_FORMAT } from 'app/shared/constants/input.constants'; -import { BookService } from 'app/entities/book/book.service'; -import { IBook, Book } from 'app/shared/model/book.model'; - -describe('Service Tests', () => { - describe('Book Service', () => { - let injector: TestBed; - let service: BookService; - let httpMock: HttpTestingController; - let elemDefault: IBook; - let currentDate: moment.Moment; - beforeEach(() => { - TestBed.configureTestingModule({ - imports: [HttpClientTestingModule] - }); - injector = getTestBed(); - service = injector.get(BookService); - httpMock = injector.get(HttpTestingController); - currentDate = moment(); - - elemDefault = new Book(0, 'AAAAAAA', 'AAAAAAA', currentDate, 0, 0); - }); - - describe('Service methods', async () => { - it('should find an element', async () => { - const returnedFromService = Object.assign( - { - published: currentDate.format(DATE_FORMAT) - }, - elemDefault - ); - service - .find(123) - .pipe(take(1)) - .subscribe(resp => expect(resp).toMatchObject({ body: elemDefault })); - - const req = httpMock.expectOne({ method: 'GET' }); - req.flush(JSON.stringify(returnedFromService)); - }); - - it('should create a Book', async () => { - const returnedFromService = Object.assign( - { - id: 0, - published: currentDate.format(DATE_FORMAT) - }, - elemDefault - ); - const expected = Object.assign( - { - published: currentDate - }, - returnedFromService - ); - service - .create(new Book(null)) - .pipe(take(1)) - .subscribe(resp => expect(resp).toMatchObject({ body: expected })); - const req = httpMock.expectOne({ method: 'POST' }); - req.flush(JSON.stringify(returnedFromService)); - }); - - it('should update a Book', async () => { - const returnedFromService = Object.assign( - { - title: 'BBBBBB', - author: 'BBBBBB', - published: currentDate.format(DATE_FORMAT), - quantity: 1, - price: 1 - }, - elemDefault - ); - - const expected = Object.assign( - { - published: currentDate - }, - returnedFromService - ); - service - .update(expected) - .pipe(take(1)) - .subscribe(resp => expect(resp).toMatchObject({ body: expected })); - const req = httpMock.expectOne({ method: 'PUT' }); - req.flush(JSON.stringify(returnedFromService)); - }); - - it('should return a list of Book', async () => { - const returnedFromService = Object.assign( - { - title: 'BBBBBB', - author: 'BBBBBB', - published: currentDate.format(DATE_FORMAT), - quantity: 1, - price: 1 - }, - elemDefault - ); - const expected = Object.assign( - { - published: currentDate - }, - returnedFromService - ); - service - .query(expected) - .pipe( - take(1), - map(resp => resp.body) - ) - .subscribe(body => expect(body).toContainEqual(expected)); - const req = httpMock.expectOne({ method: 'GET' }); - req.flush(JSON.stringify([returnedFromService])); - httpMock.verify(); - }); - - it('should delete a Book', async () => { - const rxPromise = service.delete(123).subscribe(resp => expect(resp.ok)); - - const req = httpMock.expectOne({ method: 'DELETE' }); - req.flush({ status: 200 }); - }); - }); - - afterEach(() => { - httpMock.verify(); - }); - }); -}); diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/shared/alert/alert-error.component.spec.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/shared/alert/alert-error.component.spec.ts deleted file mode 100644 index 93f344e63383..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/shared/alert/alert-error.component.spec.ts +++ /dev/null @@ -1,134 +0,0 @@ -import { ComponentFixture, TestBed, async, inject, fakeAsync, tick } from '@angular/core/testing'; -import { HttpErrorResponse, HttpHeaders } from '@angular/common/http'; -import { JhiAlertService, JhiEventManager } from 'ng-jhipster'; - -import { BookstoreTestModule } from '../../../test.module'; -import { JhiAlertErrorComponent } from 'app/shared/alert/alert-error.component'; -import { MockAlertService } from '../../../helpers/mock-alert.service'; - -describe('Component Tests', () => { - describe('Alert Error Component', () => { - let comp: JhiAlertErrorComponent; - let fixture: ComponentFixture; - let eventManager: JhiEventManager; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - imports: [BookstoreTestModule], - declarations: [JhiAlertErrorComponent], - providers: [ - JhiEventManager, - { - provide: JhiAlertService, - useClass: MockAlertService - } - ] - }) - .overrideTemplate(JhiAlertErrorComponent, '') - .compileComponents(); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(JhiAlertErrorComponent); - comp = fixture.componentInstance; - eventManager = fixture.debugElement.injector.get(JhiEventManager); - }); - - describe('Error Handling', () => { - it('Should display an alert on status 0', () => { - // GIVEN - eventManager.broadcast({ name: 'bookstoreApp.httpError', content: { status: 0 } }); - // THEN - expect(comp.alerts.length).toBe(1); - expect(comp.alerts[0].msg).toBe('Server not reachable'); - }); - it('Should display an alert on status 404', () => { - // GIVEN - eventManager.broadcast({ name: 'bookstoreApp.httpError', content: { status: 404 } }); - // THEN - expect(comp.alerts.length).toBe(1); - expect(comp.alerts[0].msg).toBe('Not found'); - }); - it('Should display an alert on generic error', () => { - // GIVEN - eventManager.broadcast({ name: 'bookstoreApp.httpError', content: { error: { message: 'Error Message' } } }); - eventManager.broadcast({ name: 'bookstoreApp.httpError', content: { error: 'Second Error Message' } }); - // THEN - expect(comp.alerts.length).toBe(2); - expect(comp.alerts[0].msg).toBe('Error Message'); - expect(comp.alerts[1].msg).toBe('Second Error Message'); - }); - it('Should display an alert on status 400 for generic error', () => { - // GIVEN - const response = new HttpErrorResponse({ - url: 'http://localhost:8080/api/foos', - headers: new HttpHeaders(), - status: 400, - statusText: 'Bad Request', - error: { - type: 'https://www.jhipster.tech/problem/constraint-violation', - title: 'Bad Request', - status: 400, - path: '/api/foos', - message: 'error.validation' - } - }); - eventManager.broadcast({ name: 'bookstoreApp.httpError', content: response }); - // THEN - expect(comp.alerts.length).toBe(1); - expect(comp.alerts[0].msg).toBe('error.validation'); - }); - it('Should display an alert on status 400 for generic error without message', () => { - // GIVEN - const response = new HttpErrorResponse({ - url: 'http://localhost:8080/api/foos', - headers: new HttpHeaders(), - status: 400, - error: 'Bad Request' - }); - eventManager.broadcast({ name: 'bookstoreApp.httpError', content: response }); - // THEN - expect(comp.alerts.length).toBe(1); - expect(comp.alerts[0].msg).toBe('Bad Request'); - }); - it('Should display an alert on status 400 for invalid parameters', () => { - // GIVEN - const response = new HttpErrorResponse({ - url: 'http://localhost:8080/api/foos', - headers: new HttpHeaders(), - status: 400, - statusText: 'Bad Request', - error: { - type: 'https://www.jhipster.tech/problem/constraint-violation', - title: 'Method argument not valid', - status: 400, - path: '/api/foos', - message: 'error.validation', - fieldErrors: [{ objectName: 'foo', field: 'minField', message: 'Min' }] - } - }); - eventManager.broadcast({ name: 'bookstoreApp.httpError', content: response }); - // THEN - expect(comp.alerts.length).toBe(1); - expect(comp.alerts[0].msg).toBe('Error on field "MinField"'); - }); - it('Should display an alert on status 400 for error headers', () => { - // GIVEN - const response = new HttpErrorResponse({ - url: 'http://localhost:8080/api/foos', - headers: new HttpHeaders().append('app-error', 'Error Message').append('app-params', 'foo'), - status: 400, - statusText: 'Bad Request', - error: { - status: 400, - message: 'error.validation' - } - }); - eventManager.broadcast({ name: 'bookstoreApp.httpError', content: response }); - // THEN - expect(comp.alerts.length).toBe(1); - expect(comp.alerts[0].msg).toBe('Error Message'); - }); - }); - }); -}); diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/shared/login/login.component.spec.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/shared/login/login.component.spec.ts deleted file mode 100644 index 814af6461079..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/app/shared/login/login.component.spec.ts +++ /dev/null @@ -1,157 +0,0 @@ -import { ComponentFixture, TestBed, async, inject, fakeAsync, tick } from '@angular/core/testing'; -import { Router } from '@angular/router'; -import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; -import { JhiEventManager } from 'ng-jhipster'; - -import { LoginService } from 'app/core/login/login.service'; -import { JhiLoginModalComponent } from 'app/shared/login/login.component'; -import { StateStorageService } from 'app/core/auth/state-storage.service'; -import { BookstoreTestModule } from '../../../test.module'; -import { MockLoginService } from '../../../helpers/mock-login.service'; -import { MockStateStorageService } from '../../../helpers/mock-state-storage.service'; - -describe('Component Tests', () => { - describe('LoginComponent', () => { - let comp: JhiLoginModalComponent; - let fixture: ComponentFixture; - let mockLoginService: any; - let mockStateStorageService: any; - let mockRouter: any; - let mockEventManager: any; - let mockActiveModal: any; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - imports: [BookstoreTestModule], - declarations: [JhiLoginModalComponent], - providers: [ - { - provide: LoginService, - useClass: MockLoginService - }, - { - provide: StateStorageService, - useClass: MockStateStorageService - } - ] - }) - .overrideTemplate(JhiLoginModalComponent, '') - .compileComponents(); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(JhiLoginModalComponent); - comp = fixture.componentInstance; - mockLoginService = fixture.debugElement.injector.get(LoginService); - mockStateStorageService = fixture.debugElement.injector.get(StateStorageService); - mockRouter = fixture.debugElement.injector.get(Router); - mockEventManager = fixture.debugElement.injector.get(JhiEventManager); - mockActiveModal = fixture.debugElement.injector.get(NgbActiveModal); - }); - - it('should authenticate the user upon login when previous state was set', inject( - [], - fakeAsync(() => { - // GIVEN - const credentials = { - username: 'admin', - password: 'admin', - rememberMe: true - }; - comp.username = 'admin'; - comp.password = 'admin'; - comp.rememberMe = true; - comp.credentials = credentials; - mockLoginService.setResponse({}); - mockStateStorageService.setResponse({ redirect: 'dummy' }); - - // WHEN/ - comp.login(); - tick(); // simulate async - - // THEN - expect(comp.authenticationError).toEqual(false); - expect(mockActiveModal.dismissSpy).toHaveBeenCalledWith('login success'); - expect(mockEventManager.broadcastSpy).toHaveBeenCalledTimes(1); - expect(mockLoginService.loginSpy).toHaveBeenCalledWith(credentials); - expect(mockStateStorageService.getUrlSpy).toHaveBeenCalledTimes(1); - expect(mockStateStorageService.storeUrlSpy).toHaveBeenCalledWith(null); - expect(mockRouter.navigateSpy).toHaveBeenCalledWith([{ redirect: 'dummy' }]); - }) - )); - - it('should authenticate the user upon login when previous state was not set', inject( - [], - fakeAsync(() => { - // GIVEN - const credentials = { - username: 'admin', - password: 'admin', - rememberMe: true - }; - comp.username = 'admin'; - comp.password = 'admin'; - comp.rememberMe = true; - comp.credentials = credentials; - mockLoginService.setResponse({}); - mockStateStorageService.setResponse(null); - - // WHEN - comp.login(); - tick(); // simulate async - - // THEN - expect(comp.authenticationError).toEqual(false); - expect(mockActiveModal.dismissSpy).toHaveBeenCalledWith('login success'); - expect(mockEventManager.broadcastSpy).toHaveBeenCalledTimes(1); - expect(mockLoginService.loginSpy).toHaveBeenCalledWith(credentials); - expect(mockStateStorageService.getUrlSpy).toHaveBeenCalledTimes(1); - expect(mockStateStorageService.storeUrlSpy).not.toHaveBeenCalled(); - expect(mockRouter.navigateSpy).not.toHaveBeenCalled(); - }) - )); - - it('should empty the credentials upon cancel', () => { - // GIVEN - const credentials = { - username: 'admin', - password: 'admin', - rememberMe: true - }; - - const expected = { - username: null, - password: null, - rememberMe: true - }; - - comp.credentials = credentials; - - // WHEN - comp.cancel(); - - // THEN - expect(comp.authenticationError).toEqual(false); - expect(comp.credentials).toEqual(expected); - expect(mockActiveModal.dismissSpy).toHaveBeenCalledWith('cancel'); - }); - - it('should redirect user when register', () => { - // WHEN - comp.register(); - - // THEN - expect(mockActiveModal.dismissSpy).toHaveBeenCalledWith('to state register'); - expect(mockRouter.navigateSpy).toHaveBeenCalledWith(['/register']); - }); - - it('should redirect user when request password', () => { - // WHEN - comp.requestResetPassword(); - - // THEN - expect(mockActiveModal.dismissSpy).toHaveBeenCalledWith('to state requestReset'); - expect(mockRouter.navigateSpy).toHaveBeenCalledWith(['/reset', 'request']); - }); - }); -}); diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/helpers/mock-account.service.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/helpers/mock-account.service.ts deleted file mode 100644 index 659bf4d37930..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/helpers/mock-account.service.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { SpyObject } from './spyobject'; -import { AccountService } from 'app/core/auth/account.service'; -import Spy = jasmine.Spy; - -export class MockAccountService extends SpyObject { - getSpy: Spy; - saveSpy: Spy; - fakeResponse: any; - identitySpy: Spy; - - constructor() { - super(AccountService); - - this.fakeResponse = null; - this.getSpy = this.spy('get').andReturn(this); - this.saveSpy = this.spy('save').andReturn(this); - this.setIdentitySpy({}); - } - - subscribe(callback: any) { - callback(this.fakeResponse); - } - - setResponse(json: any): void { - this.fakeResponse = json; - } - - setIdentitySpy(json: any): any { - this.identitySpy = this.spy('identity').andReturn(Promise.resolve(json)); - } - - setIdentityResponse(json: any): void { - this.setIdentitySpy(json); - } -} diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/helpers/mock-active-modal.service.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/helpers/mock-active-modal.service.ts deleted file mode 100644 index 8bf0cc966fa3..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/helpers/mock-active-modal.service.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { SpyObject } from './spyobject'; -import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; -import Spy = jasmine.Spy; - -export class MockActiveModal extends SpyObject { - dismissSpy: Spy; - - constructor() { - super(NgbActiveModal); - this.dismissSpy = this.spy('dismiss').andReturn(this); - } -} diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/helpers/mock-alert.service.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/helpers/mock-alert.service.ts deleted file mode 100644 index 87f36c71e2f0..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/helpers/mock-alert.service.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { SpyObject } from './spyobject'; -import { JhiAlertService, JhiAlert } from 'ng-jhipster'; - -export class MockAlertService extends SpyObject { - constructor() { - super(JhiAlertService); - } - addAlert(alertOptions: JhiAlert) { - return alertOptions; - } -} diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/helpers/mock-event-manager.service.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/helpers/mock-event-manager.service.ts deleted file mode 100644 index a71b5d931421..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/helpers/mock-event-manager.service.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { SpyObject } from './spyobject'; -import { JhiEventManager } from 'ng-jhipster'; -import Spy = jasmine.Spy; - -export class MockEventManager extends SpyObject { - broadcastSpy: Spy; - - constructor() { - super(JhiEventManager); - this.broadcastSpy = this.spy('broadcast').andReturn(this); - } -} diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/helpers/mock-login.service.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/helpers/mock-login.service.ts deleted file mode 100644 index 93a8ca575f21..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/helpers/mock-login.service.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { SpyObject } from './spyobject'; -import { LoginService } from 'app/core/login/login.service'; -import Spy = jasmine.Spy; - -export class MockLoginService extends SpyObject { - loginSpy: Spy; - logoutSpy: Spy; - registerSpy: Spy; - requestResetPasswordSpy: Spy; - cancelSpy: Spy; - - constructor() { - super(LoginService); - - this.setLoginSpy({}); - this.logoutSpy = this.spy('logout').andReturn(this); - this.registerSpy = this.spy('register').andReturn(this); - this.requestResetPasswordSpy = this.spy('requestResetPassword').andReturn(this); - this.cancelSpy = this.spy('cancel').andReturn(this); - } - - setLoginSpy(json: any) { - this.loginSpy = this.spy('login').andReturn(Promise.resolve(json)); - } - - setResponse(json: any): void { - this.setLoginSpy(json); - } -} diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/helpers/mock-route.service.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/helpers/mock-route.service.ts deleted file mode 100644 index 3465e055248c..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/helpers/mock-route.service.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { ActivatedRoute, Router } from '@angular/router'; -import { SpyObject } from './spyobject'; -import { Observable, of } from 'rxjs'; -import Spy = jasmine.Spy; - -export class MockActivatedRoute extends ActivatedRoute { - constructor(parameters?: any) { - super(); - this.queryParams = of(parameters); - this.params = of(parameters); - this.data = of({ - ...parameters, - pagingParams: { - page: 10, - ascending: false, - predicate: 'id' - } - }); - } -} - -export class MockRouter extends SpyObject { - navigateSpy: Spy; - - constructor() { - super(Router); - this.navigateSpy = this.spy('navigate'); - } -} diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/helpers/mock-state-storage.service.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/helpers/mock-state-storage.service.ts deleted file mode 100644 index 1398c7b28be7..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/helpers/mock-state-storage.service.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { SpyObject } from './spyobject'; -import { StateStorageService } from 'app/core/auth/state-storage.service'; -import Spy = jasmine.Spy; - -export class MockStateStorageService extends SpyObject { - getUrlSpy: Spy; - storeUrlSpy: Spy; - - constructor() { - super(StateStorageService); - this.setUrlSpy({}); - this.storeUrlSpy = this.spy('storeUrl').andReturn(this); - } - - setUrlSpy(json) { - this.getUrlSpy = this.spy('getUrl').andReturn(json); - } - - setResponse(json: any): void { - this.setUrlSpy(json); - } -} diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/helpers/spyobject.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/helpers/spyobject.ts deleted file mode 100644 index 949e067ef58f..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/helpers/spyobject.ts +++ /dev/null @@ -1,69 +0,0 @@ -export interface GuinessCompatibleSpy extends jasmine.Spy { - /** By chaining the spy with and.returnValue, all calls to the function will return a specific - * value. */ - andReturn(val: any): void; - /** By chaining the spy with and.callFake, all calls to the spy will delegate to the supplied - * function. */ - andCallFake(fn: Function): GuinessCompatibleSpy; - /** removes all recorded calls */ - reset(); -} - -export class SpyObject { - static stub(object = null, config = null, overrides = null) { - if (!(object instanceof SpyObject)) { - overrides = config; - config = object; - object = new SpyObject(); - } - - const m = {}; - Object.keys(config).forEach(key => (m[key] = config[key])); - Object.keys(overrides).forEach(key => (m[key] = overrides[key])); - Object.keys(m).forEach(key => { - object.spy(key).andReturn(m[key]); - }); - return object; - } - - constructor(type = null) { - if (type) { - Object.keys(type.prototype).forEach(prop => { - let m = null; - try { - m = type.prototype[prop]; - } catch (e) { - // As we are creating spys for abstract classes, - // these classes might have getters that throw when they are accessed. - // As we are only auto creating spys for methods, this - // should not matter. - } - if (typeof m === 'function') { - this.spy(prop); - } - }); - } - } - - spy(name) { - if (!this[name]) { - this[name] = this._createGuinnessCompatibleSpy(name); - } - return this[name]; - } - - prop(name, value) { - this[name] = value; - } - - /** @internal */ - _createGuinnessCompatibleSpy(name): GuinessCompatibleSpy { - const newSpy: GuinessCompatibleSpy = jasmine.createSpy(name); - newSpy.andCallFake = newSpy.and.callFake; - newSpy.andReturn = newSpy.and.returnValue; - newSpy.reset = newSpy.calls.reset; - // revisit return null here (previously needed for rtts_assert). - newSpy.and.returnValue(null); - return newSpy; - } -} diff --git a/jhipster-5/bookstore-monolith/src/test/javascript/spec/test.module.ts b/jhipster-5/bookstore-monolith/src/test/javascript/spec/test.module.ts deleted file mode 100644 index c66241f9bbce..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/javascript/spec/test.module.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { DatePipe } from '@angular/common'; -import { ActivatedRoute, Router } from '@angular/router'; -import { NgModule, ElementRef, Renderer } from '@angular/core'; -import { HttpClientTestingModule } from '@angular/common/http/testing'; -import { NgbActiveModal, NgbModal } from '@ng-bootstrap/ng-bootstrap'; -import { JhiDataUtils, JhiDateUtils, JhiEventManager, JhiAlertService, JhiParseLinks } from 'ng-jhipster'; - -import { AccountService, LoginModalService } from 'app/core'; -import { MockAccountService } from './helpers/mock-account.service'; -import { MockActivatedRoute, MockRouter } from './helpers/mock-route.service'; -import { MockActiveModal } from './helpers/mock-active-modal.service'; -import { MockEventManager } from './helpers/mock-event-manager.service'; - -@NgModule({ - providers: [ - DatePipe, - JhiDataUtils, - JhiDateUtils, - JhiParseLinks, - { - provide: JhiEventManager, - useClass: MockEventManager - }, - { - provide: NgbActiveModal, - useClass: MockActiveModal - }, - { - provide: ActivatedRoute, - useValue: new MockActivatedRoute({ id: 123 }) - }, - { - provide: Router, - useClass: MockRouter - }, - { - provide: AccountService, - useClass: MockAccountService - }, - { - provide: LoginModalService, - useValue: null - }, - { - provide: ElementRef, - useValue: null - }, - { - provide: Renderer, - useValue: null - }, - { - provide: JhiAlertService, - useValue: null - }, - { - provide: NgbModal, - useValue: null - } - ], - imports: [HttpClientTestingModule] -}) -export class BookstoreTestModule {} diff --git a/jhipster-5/bookstore-monolith/src/test/resources/config/application.yml b/jhipster-5/bookstore-monolith/src/test/resources/config/application.yml deleted file mode 100644 index 34c6ca3e159c..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/resources/config/application.yml +++ /dev/null @@ -1,105 +0,0 @@ -# =================================================================== -# Spring Boot configuration. -# -# This configuration is used for unit/integration tests. -# -# More information on profiles: https://www.jhipster.tech/profiles/ -# More information on configuration properties: https://www.jhipster.tech/common-application-properties/ -# =================================================================== - -# =================================================================== -# Standard Spring Boot properties. -# Full reference is available at: -# http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html -# =================================================================== - - -spring: - application: - name: Bookstore - datasource: - type: com.zaxxer.hikari.HikariDataSource - url: jdbc:h2:mem:Bookstore;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE - name: - username: - password: - hikari: - auto-commit: false - jpa: - database-platform: io.github.jhipster.domain.util.FixedH2Dialect - database: H2 - open-in-view: false - show-sql: false - hibernate: - ddl-auto: none - naming: - physical-strategy: org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy - implicit-strategy: org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy - properties: - hibernate.id.new_generator_mappings: true - hibernate.connection.provider_disables_autocommit: true - hibernate.cache.use_second_level_cache: false - hibernate.cache.use_query_cache: false - hibernate.generate_statistics: false - hibernate.hbm2ddl.auto: validate - hibernate.jdbc.time_zone: UTC - liquibase: - contexts: test - mail: - host: localhost - messages: - basename: i18n/messages - mvc: - favicon: - enabled: false - thymeleaf: - mode: HTML - - -server: - port: 10344 - address: localhost - -# =================================================================== -# JHipster specific properties -# -# Full reference is available at: https://www.jhipster.tech/common-application-properties/ -# =================================================================== - -jhipster: - async: - core-pool-size: 1 - max-pool-size: 50 - queue-capacity: 10000 - # To test logstash appender - logging: - logstash: - enabled: true - host: localhost - port: 5000 - queue-size: 512 - mail: - from: test@localhost - base-url: http://127.0.0.1:8080 - security: - authentication: - jwt: - # This token must be encoded using Base64 (you can type `echo 'secret-key'|base64` on your command line) - base64-secret: NDJmOTVlZjI2NzhlZDRjNmVkNTM1NDE2NjkyNDljZDJiNzBlMjI5YmZjMjY3MzdjZmZlMjI3NjE4OTRkNzc5MWYzNDNlYWMzYmJjOWRmMjc5ZWQyZTZmOWZkOTMxZWZhNWE1MTVmM2U2NjFmYjhlNDc2Y2Q3NzliMGY0YzFkNmI= - # Token is valid 24 hours - token-validity-in-seconds: 86400 - metrics: - logs: # Reports metrics in the logs - enabled: true - report-frequency: 60 # in seconds - -# =================================================================== -# Application specific properties -# Add your own application properties here, see the ApplicationProperties class -# to have type-safe configuration, like in the JHipsterProperties above -# -# More documentation is available at: -# https://www.jhipster.tech/common-application-properties/ -# =================================================================== - -# application: diff --git a/jhipster-5/bookstore-monolith/src/test/resources/i18n/messages_en.properties b/jhipster-5/bookstore-monolith/src/test/resources/i18n/messages_en.properties deleted file mode 100644 index f19db8692f20..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/resources/i18n/messages_en.properties +++ /dev/null @@ -1 +0,0 @@ -email.test.title=test title diff --git a/jhipster-5/bookstore-monolith/src/test/resources/logback.xml b/jhipster-5/bookstore-monolith/src/test/resources/logback.xml deleted file mode 100644 index 6244807dfae0..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/resources/logback.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jhipster-5/bookstore-monolith/src/test/resources/templates/mail/testEmail.html b/jhipster-5/bookstore-monolith/src/test/resources/templates/mail/testEmail.html deleted file mode 100644 index a4ca16a79f05..000000000000 --- a/jhipster-5/bookstore-monolith/src/test/resources/templates/mail/testEmail.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/jhipster-5/bookstore-monolith/tsconfig-aot.json b/jhipster-5/bookstore-monolith/tsconfig-aot.json deleted file mode 100644 index 110cde9fd6d4..000000000000 --- a/jhipster-5/bookstore-monolith/tsconfig-aot.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "compilerOptions": { - "target": "es5", - "module": "es2015", - "moduleResolution": "node", - "sourceMap": false, - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - "removeComments": false, - "noImplicitAny": false, - "suppressImplicitAnyIndexErrors": true, - "skipLibCheck": true, - "outDir": "target/www/app", - "lib": ["es7", "dom"], - "typeRoots": ["node_modules/@types"], - "baseUrl": "./", - "paths": { - "app/*": ["src/main/webapp/app/*"] - }, - "importHelpers": true - }, - "angularCompilerOptions": { - "genDir": "target/aot", - "skipMetadataEmit": true, - "fullTemplateTypeCheck": true, - "preserveWhitespaces": true - } -} diff --git a/jhipster-5/bookstore-monolith/tsconfig.json b/jhipster-5/bookstore-monolith/tsconfig.json deleted file mode 100644 index dd6343ab6278..000000000000 --- a/jhipster-5/bookstore-monolith/tsconfig.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "compilerOptions": { - "target": "es5", - "module": "commonjs", - "moduleResolution": "node", - "sourceMap": true, - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - "removeComments": false, - "noImplicitAny": false, - "skipLibCheck": true, - "suppressImplicitAnyIndexErrors": true, - "outDir": "target/www/app", - "lib": ["es7", "dom"], - "typeRoots": ["node_modules/@types"], - "baseUrl": "./", - "paths": { - "app/*": ["src/main/webapp/app/*"] - }, - "importHelpers": true, - "allowJs": true - }, - "include": ["src/main/webapp/app", "src/test/javascript/"], - "exclude": ["node_modules"] -} diff --git a/jhipster-5/bookstore-monolith/tslint.json b/jhipster-5/bookstore-monolith/tslint.json deleted file mode 100644 index 3b8456d2fda3..000000000000 --- a/jhipster-5/bookstore-monolith/tslint.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "rulesDirectory": ["node_modules/codelyzer"], - "extends": ["tslint-config-prettier"], - "rules": { - "class-name": true, - "comment-format": [true, "check-space"], - "curly": true, - "eofline": true, - "forin": true, - "indent": [true, "spaces"], - "label-position": true, - "member-access": false, - "member-ordering": [true, "static-before-instance", "variables-before-functions"], - "no-arg": true, - "no-bitwise": true, - "no-console": [true, "debug", "info", "time", "timeEnd", "trace"], - "no-construct": true, - "no-debugger": true, - "no-duplicate-variable": true, - "no-empty": false, - "no-eval": true, - "no-inferrable-types": [true], - "no-shadowed-variable": true, - "no-string-literal": false, - "no-switch-case-fall-through": true, - "no-trailing-whitespace": true, - "no-unused-expression": true, - "no-var-keyword": true, - "object-literal-sort-keys": false, - "one-line": [true, "check-open-brace", "check-catch", "check-else", "check-whitespace"], - "quotemark": [true, "single", "avoid-escape"], - "radix": true, - "semicolon": [true, "always", "ignore-bound-class-methods"], - "triple-equals": [true, "allow-null-check"], - "typedef-whitespace": [ - true, - { - "call-signature": "nospace", - "index-signature": "nospace", - "parameter": "nospace", - "property-declaration": "nospace", - "variable-declaration": "nospace" - } - ], - "variable-name": false, - "whitespace": [true, "check-branch", "check-decl", "check-operator", "check-separator", "check-type"], - "prefer-const": true, - "arrow-parens": [true, "ban-single-arg-parens"], - "arrow-return-shorthand": [true], - "import-spacing": true, - "no-consecutive-blank-lines": [true], - "object-literal-shorthand": true, - "space-before-function-paren": [ - true, - { - "asyncArrow": "always", - "anonymous": "never", - "constructor": "never", - "method": "never", - "named": "never" - } - ], - - "directive-selector": [true, "attribute", "jhi", "camelCase"], - "component-selector": [true, "element", "jhi", "kebab-case"], - "use-input-property-decorator": true, - "use-output-property-decorator": true, - "use-host-property-decorator": true, - "no-input-rename": true, - "no-output-rename": true, - "use-life-cycle-interface": true, - "use-pipe-transform-interface": false, - "component-class-suffix": true, - "directive-class-suffix": true - } -} diff --git a/jhipster-5/bookstore-monolith/webpack/logo-jhipster.png b/jhipster-5/bookstore-monolith/webpack/logo-jhipster.png deleted file mode 100644 index d8eb48da05c157571eed9fd7303f8d9566f2ea12..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4459 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 { - if (err) { - throw new Error('Failed to parse pom.xml: ' + err); - } - if (result.project.version && result.project.version[0]) { - version = result.project.version[0]; - } else if (result.project.parent && result.project.parent[0] && result.project.parent[0].version && result.project.parent[0].version[0]) { - version = result.project.parent[0].version[0]; - } - }); - if (version === null) { - throw new Error('pom.xml is malformed. No version is defined'); - } - return version; -} - -const _root = path.resolve(__dirname, '..'); - -function root(args) { - args = Array.prototype.slice.call(arguments, 0); - return path.join.apply(path, [_root].concat(args)); -} - -function isExternalLib(module, check = /node_modules/) { - const req = module.userRequest; - if (typeof req !== 'string') { - return false; - } - return req.search(check) >= 0; -} diff --git a/jhipster-5/bookstore-monolith/webpack/webpack.common.js b/jhipster-5/bookstore-monolith/webpack/webpack.common.js deleted file mode 100644 index d8fd26c1578b..000000000000 --- a/jhipster-5/bookstore-monolith/webpack/webpack.common.js +++ /dev/null @@ -1,86 +0,0 @@ -const webpack = require('webpack'); -const CopyWebpackPlugin = require('copy-webpack-plugin'); -const HtmlWebpackPlugin = require('html-webpack-plugin'); -const rxPaths = require('rxjs/_esm5/path-mapping'); - -const utils = require('./utils.js'); - -module.exports = (options) => ({ - resolve: { - extensions: ['.ts', '.js'], - modules: ['node_modules'], - alias: { - app: utils.root('src/main/webapp/app/'), - ...rxPaths() - } - }, - stats: { - children: false - }, - module: { - rules: [ - { - test: /\.html$/, - loader: 'html-loader', - options: { - minimize: true, - caseSensitive: true, - removeAttributeQuotes:false, - minifyJS:false, - minifyCSS:false - }, - exclude: /(src\/main\/webapp\/index.html)/ - }, - { - test: /\.(jpe?g|png|gif|svg|woff2?|ttf|eot)$/i, - loader: 'file-loader', - options: { - digest: 'hex', - hash: 'sha512', - name: 'content/[hash].[ext]' - } - }, - { - test: /manifest.webapp$/, - loader: 'file-loader', - options: { - name: 'manifest.webapp' - } - }, - // Ignore warnings about System.import in Angular - { test: /[\/\\]@angular[\/\\].+\.js$/, parser: { system: true } }, - ] - }, - plugins: [ - new webpack.DefinePlugin({ - 'process.env': { - NODE_ENV: `'${options.env}'`, - BUILD_TIMESTAMP: `'${new Date().getTime()}'`, - VERSION: `'${utils.parseVersion()}'`, - DEBUG_INFO_ENABLED: options.env === 'development', - // The root URL for API calls, ending with a '/' - for example: `"https://www.jhipster.tech:8081/myservice/"`. - // If this URL is left empty (""), then it will be relative to the current context. - // If you use an API server, in `prod` mode, you will need to enable CORS - // (see the `jhipster.cors` common JHipster property in the `application-*.yml` configurations) - SERVER_API_URL: `''` - } - }), - new CopyWebpackPlugin([ - { from: './node_modules/swagger-ui/dist/css', to: 'swagger-ui/dist/css' }, - { from: './node_modules/swagger-ui/dist/lib', to: 'swagger-ui/dist/lib' }, - { from: './node_modules/swagger-ui/dist/swagger-ui.min.js', to: 'swagger-ui/dist/swagger-ui.min.js' }, - { from: './src/main/webapp/swagger-ui/', to: 'swagger-ui' }, - { from: './src/main/webapp/content/', to: 'content' }, - { from: './src/main/webapp/favicon.ico', to: 'favicon.ico' }, - { from: './src/main/webapp/manifest.webapp', to: 'manifest.webapp' }, - // jhipster-needle-add-assets-to-webpack - JHipster will add/remove third-party resources in this array - { from: './src/main/webapp/robots.txt', to: 'robots.txt' } - ]), - new HtmlWebpackPlugin({ - template: './src/main/webapp/index.html', - chunks: ['vendors', 'polyfills', 'main', 'global'], - chunksSortMode: 'manual', - inject: 'body' - }) - ] -}); diff --git a/jhipster-5/bookstore-monolith/webpack/webpack.dev.js b/jhipster-5/bookstore-monolith/webpack/webpack.dev.js deleted file mode 100644 index d05a7ddea830..000000000000 --- a/jhipster-5/bookstore-monolith/webpack/webpack.dev.js +++ /dev/null @@ -1,148 +0,0 @@ -const webpack = require('webpack'); -const writeFilePlugin = require('write-file-webpack-plugin'); -const webpackMerge = require('webpack-merge'); -const BrowserSyncPlugin = require('browser-sync-webpack-plugin'); -const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin'); -const FriendlyErrorsWebpackPlugin = require('friendly-errors-webpack-plugin'); -const SimpleProgressWebpackPlugin = require('simple-progress-webpack-plugin'); -const WebpackNotifierPlugin = require('webpack-notifier'); -const path = require('path'); -const sass = require('sass'); - -const utils = require('./utils.js'); -const commonConfig = require('./webpack.common.js'); - -const ENV = 'development'; - -module.exports = (options) => webpackMerge(commonConfig({ env: ENV }), { - devtool: 'eval-source-map', - devServer: { - contentBase: './target/www', - proxy: [{ - context: [ - /* jhipster-needle-add-entity-to-webpack - JHipster will add entity api paths here */ - '/api', - '/management', - '/swagger-resources', - '/v2/api-docs', - '/h2-console', - '/auth' - ], - target: `http${options.tls ? 's' : ''}://127.0.0.1:8080`, - secure: false, - changeOrigin: options.tls, - headers: { host: 'localhost:9000' } - }], - stats: options.stats, - watchOptions: { - ignored: /node_modules/ - } - }, - entry: { - polyfills: './src/main/webapp/app/polyfills', - global: './src/main/webapp/content/scss/global.scss', - main: './src/main/webapp/app/app.main' - }, - output: { - path: utils.root('target/www'), - filename: 'app/[name].bundle.js', - chunkFilename: 'app/[id].chunk.js' - }, - module: { - rules: [{ - test: /\.ts$/, - enforce: 'pre', - loader: 'tslint-loader', - exclude: [/(node_modules)/, new RegExp('reflect-metadata\\' + path.sep + 'Reflect\\.ts')] - }, - { - test: /\.ts$/, - use: [ - 'angular2-template-loader', - { - loader: 'cache-loader', - options: { - cacheDirectory: path.resolve('target/cache-loader') - } - }, - { - loader: 'thread-loader', - options: { - // there should be 1 cpu for the fork-ts-checker-webpack-plugin - workers: require('os').cpus().length - 1 - } - }, - { - loader: 'ts-loader', - options: { - transpileOnly: true, - happyPackMode: true - } - }, - 'angular-router-loader' - ], - exclude: /(node_modules)/ - }, - { - test: /\.scss$/, - use: ['to-string-loader', 'css-loader', { - loader: 'sass-loader', - options: { implementation: sass } - }], - exclude: /(vendor\.scss|global\.scss)/ - }, - { - test: /(vendor\.scss|global\.scss)/, - use: ['style-loader', 'css-loader', 'postcss-loader', { - loader: 'sass-loader', - options: { implementation: sass } - }] - }, - { - test: /\.css$/, - use: ['to-string-loader', 'css-loader'], - exclude: /(vendor\.css|global\.css)/ - }, - { - test: /(vendor\.css|global\.css)/, - use: ['style-loader', 'css-loader'] - }] - }, - stats: process.env.JHI_DISABLE_WEBPACK_LOGS ? 'none' : options.stats, - plugins: [ - process.env.JHI_DISABLE_WEBPACK_LOGS - ? null - : new SimpleProgressWebpackPlugin({ - format: options.stats === 'minimal' ? 'compact' : 'expanded' - }), - new FriendlyErrorsWebpackPlugin(), - new ForkTsCheckerWebpackPlugin(), - new BrowserSyncPlugin({ - host: 'localhost', - port: 9000, - proxy: { - target: 'http://localhost:9060' - }, - socket: { - clients: { - heartbeatTimeout: 60000 - } - } - }, { - reload: false - }), - new webpack.ContextReplacementPlugin( - /angular(\\|\/)core(\\|\/)/, - path.resolve(__dirname, './src/main/webapp') - ), - new writeFilePlugin(), - new webpack.WatchIgnorePlugin([ - utils.root('src/test'), - ]), - new WebpackNotifierPlugin({ - title: 'JHipster', - contentImage: path.join(__dirname, 'logo-jhipster.png') - }) - ].filter(Boolean), - mode: 'development' -}); diff --git a/jhipster-5/bookstore-monolith/webpack/webpack.prod.js b/jhipster-5/bookstore-monolith/webpack/webpack.prod.js deleted file mode 100644 index ebafa2f631fc..000000000000 --- a/jhipster-5/bookstore-monolith/webpack/webpack.prod.js +++ /dev/null @@ -1,144 +0,0 @@ -const webpack = require('webpack'); -const webpackMerge = require('webpack-merge'); -const MiniCssExtractPlugin = require('mini-css-extract-plugin'); -const OptimizeCSSAssetsPlugin = require("optimize-css-assets-webpack-plugin"); -const Visualizer = require('webpack-visualizer-plugin'); -const MomentLocalesPlugin = require('moment-locales-webpack-plugin'); -const TerserPlugin = require('terser-webpack-plugin'); -const WorkboxPlugin = require('workbox-webpack-plugin'); -const AngularCompilerPlugin = require('@ngtools/webpack').AngularCompilerPlugin; -const path = require('path'); - -const utils = require('./utils.js'); -const commonConfig = require('./webpack.common.js'); - -const ENV = 'production'; -const sass = require('sass'); - -module.exports = webpackMerge(commonConfig({ env: ENV }), { - // Enable source maps. Please note that this will slow down the build. - // You have to enable it in UglifyJSPlugin config below and in tsconfig-aot.json as well - // devtool: 'source-map', - entry: { - polyfills: './src/main/webapp/app/polyfills', - global: './src/main/webapp/content/scss/global.scss', - main: './src/main/webapp/app/app.main' - }, - output: { - path: utils.root('target/www'), - filename: 'app/[name].[hash].bundle.js', - chunkFilename: 'app/[id].[hash].chunk.js' - }, - module: { - rules: [{ - test: /(?:\.ngfactory\.js|\.ngstyle\.js|\.ts)$/, - loader: '@ngtools/webpack' - }, - { - test: /\.scss$/, - use: ['to-string-loader', 'css-loader', { - loader: 'sass-loader', - options: { implementation: sass } - }], - exclude: /(vendor\.scss|global\.scss)/ - }, - { - test: /(vendor\.scss|global\.scss)/, - use: [ - MiniCssExtractPlugin.loader, - 'css-loader', - 'postcss-loader', - { - loader: 'sass-loader', - options: { implementation: sass } - } - ] - }, - { - test: /\.css$/, - use: ['to-string-loader', 'css-loader'], - exclude: /(vendor\.css|global\.css)/ - }, - { - test: /(vendor\.css|global\.css)/, - use: [ - MiniCssExtractPlugin.loader, - 'css-loader', - 'postcss-loader' - ] - }] - }, - optimization: { - runtimeChunk: false, - splitChunks: { - cacheGroups: { - commons: { - test: /[\\/]node_modules[\\/]/, - name: 'vendors', - chunks: 'all' - } - } - }, - minimizer: [ - new TerserPlugin({ - parallel: true, - cache: true, - terserOptions: { - ie8: false, - // sourceMap: true, // Enable source maps. Please note that this will slow down the build - compress: { - dead_code: true, - warnings: false, - properties: true, - drop_debugger: true, - conditionals: true, - booleans: true, - loops: true, - unused: true, - toplevel: true, - if_return: true, - inline: true, - join_vars: true - }, - output: { - comments: false, - beautify: false, - indent_level: 2 - } - } - }), - new OptimizeCSSAssetsPlugin({}) - ] - }, - plugins: [ - new MiniCssExtractPlugin({ - // Options similar to the same options in webpackOptions.output - // both options are optional - filename: '[name].[contenthash].css', - chunkFilename: '[id].css' - }), - new MomentLocalesPlugin({ - localesToKeep: [ - // jhipster-needle-i18n-language-moment-webpack - JHipster will add/remove languages in this array - ] - }), - new Visualizer({ - // Webpack statistics in target folder - filename: '../stats.html' - }), - new AngularCompilerPlugin({ - mainPath: utils.root('src/main/webapp/app/app.main.ts'), - tsConfigPath: utils.root('tsconfig-aot.json'), - sourceMap: true - }), - new webpack.LoaderOptionsPlugin({ - minimize: true, - debug: false - }), - new WorkboxPlugin.GenerateSW({ - clientsClaim: true, - skipWaiting: true, - }) - ], - mode: 'production' -}); diff --git a/jhipster-5/pom.xml b/jhipster-5/pom.xml deleted file mode 100644 index 2a5132e50e2d..000000000000 --- a/jhipster-5/pom.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - 4.0.0 - com.baeldung.jhipster - jhipster-5 - 1.0.0-SNAPSHOT - jhipster-5 - pom - - - parent-boot-2 - com.baeldung - 0.0.1-SNAPSHOT - ../parent-boot-2 - - - - bookstore-monolith - - - diff --git a/pom.xml b/pom.xml index 2548dbfbdec8..6fdc6b8a7c2f 100644 --- a/pom.xml +++ b/pom.xml @@ -357,7 +357,6 @@ java-jdi jetbrains - jhipster-5 language-interop libraries-3 @@ -488,7 +487,6 @@ jenkins-modules jhipster-modules - jhipster-5 jws libraries-6 @@ -553,7 +551,6 @@ java-jdi - jhipster-5 language-interop libraries-3 @@ -666,7 +663,6 @@ jenkins-modules jhipster-modules - jhipster-5 jws libraries-6 From a99b77cc7f92e4aa0a8f498bccdf0b43869ff062 Mon Sep 17 00:00:00 2001 From: Bipin kumar Date: Wed, 12 Apr 2023 07:52:57 +0530 Subject: [PATCH 071/390] JAVA-19475: Changes made for uncommenting feign module in the root pom.xml (#13823) --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 6fdc6b8a7c2f..718c2c9321ae 100644 --- a/pom.xml +++ b/pom.xml @@ -864,7 +864,7 @@ disruptor dozer dubbo - + feign google-cloud graphql-modules grpc @@ -1116,7 +1116,7 @@ dozer dubbo - + feign google-cloud graphql-modules grpc From ac150dc09ecc7315c6ad80e2f1df90d171895db0 Mon Sep 17 00:00:00 2001 From: Dhawal Kapil Date: Wed, 12 Apr 2023 08:27:20 +0530 Subject: [PATCH 072/390] JAVA-20220 Added suffix -modules to aws-lambda, clojure, terraform, linux-bash --- aws-modules/{aws-lambda => aws-lambda-modules}/.gitignore | 0 aws-modules/{aws-lambda => aws-lambda-modules}/README.md | 0 .../{aws-lambda => aws-lambda-modules}/lambda/pom.xml | 2 +- .../lambda/sam-templates/template-implicit.yaml | 0 .../lambda/sam-templates/template-inline-swagger.yaml | 0 .../main/java/com/baeldung/lambda/LambdaMethodHandler.java | 0 .../java/com/baeldung/lambda/LambdaRequestHandler.java | 0 .../com/baeldung/lambda/LambdaRequestStreamHandler.java | 0 .../com/baeldung/lambda/apigateway/APIDemoHandler.java | 0 .../java/com/baeldung/lambda/apigateway/model/Person.java | 0 .../com/baeldung/lambda/dynamodb/SavePersonHandler.java | 0 .../com/baeldung/lambda/dynamodb/bean/PersonRequest.java | 0 .../com/baeldung/lambda/dynamodb/bean/PersonResponse.java | 0 .../lambda/src/main/resources/logback.xml | 0 aws-modules/{aws-lambda => aws-lambda-modules}/pom.xml | 4 ++-- .../shipping-tracker/.gitignore | 0 .../shipping-tracker/ShippingFunction/pom.xml | 2 +- .../src/main/java/com/baeldung/lambda/shipping/App.java | 0 .../main/java/com/baeldung/lambda/shipping/Checkin.java | 0 .../java/com/baeldung/lambda/shipping/Consignment.java | 0 .../src/main/java/com/baeldung/lambda/shipping/Item.java | 0 .../java/com/baeldung/lambda/shipping/ShippingDao.java | 0 .../java/com/baeldung/lambda/shipping/ShippingService.java | 0 .../shipping-tracker/template.yaml | 0 .../todo-reminder/ToDoFunction/pom.xml | 7 +++++++ .../src/main/java/com/baeldung/lambda/todo/App.java | 0 .../main/java/com/baeldung/lambda/todo/api/PostApi.java | 0 .../main/java/com/baeldung/lambda/todo/api/PostItem.java | 0 .../main/java/com/baeldung/lambda/todo/api/ToDoApi.java | 0 .../main/java/com/baeldung/lambda/todo/api/ToDoItem.java | 0 .../main/java/com/baeldung/lambda/todo/config/Config.java | 0 .../java/com/baeldung/lambda/todo/config/Credentials.java | 0 .../com/baeldung/lambda/todo/config/ExecutionContext.java | 0 .../java/com/baeldung/lambda/todo/config/Services.java | 0 .../java/com/baeldung/lambda/todo/service/PostService.java | 0 .../baeldung/lambda/todo/service/ToDoReaderService.java | 0 .../ToDoFunction/src/main/resources/configuration.yml | 0 .../ToDoFunction/src/main/resources/log4j2.xml | 0 .../src/test/java/com/baeldung/lambda/todo/AppTest.java | 0 .../lambda/todo/service/ToDoReaderServiceTest.java | 0 .../todo-reminder/template.yaml | 0 aws-modules/pom.xml | 2 +- {clojure => clojure-modules}/ring/.gitignore | 0 {clojure => clojure-modules}/ring/README.md | 0 {clojure => clojure-modules}/ring/project.clj | 0 {clojure => clojure-modules}/ring/src/ring/core.clj | 0 .../command-line-arguments/src/main/bash/README.md | 0 .../command-line-arguments/src/main/bash/userReg-flags.sh | 0 .../src/main/bash/userReg-positional-parameter.sh | 0 .../command-line-arguments/src/main/bash/users-loop.sh | 0 .../src/main/bash/users-shift-operator.sh | 0 .../functions/src/main/bash/README.md | 0 .../functions/src/main/bash/functions.sh | 0 .../functions/src/main/bash/infile | 0 {linux-bash => linux-bash-modules}/json/README.md | 0 .../json/src/main/bash/fruit.json | 0 .../json/src/main/bash/fruits.json | 0 .../json/src/main/bash/jq.sh | 0 .../json/src/main/bash/wikipedia.json | 0 {linux-bash => linux-bash-modules}/loops/README.md | 0 .../loops/src/main/bash/find_directories.sh | 0 .../loops/src/main/bash/loop_directories.sh | 0 {linux-bash => linux-bash-modules}/read/README.md | 0 .../read/src/main/bash/file.csv | 0 .../read/src/main/bash/read_inputs.sh | 0 {linux-bash => linux-bash-modules}/text/README.md | 0 .../text/src/main/bash/append_multiple_lines.sh | 0 .../text/src/main/bash/remove_characters.sh | 0 {terraform => terraform-modules}/README.md | 0 {terraform => terraform-modules}/best-practices/README.md | 0 .../best-practices/ec2-simple/.gitignore | 0 .../best-practices/ec2-simple/SETUP.md | 0 .../best-practices/ec2-simple/main.tf | 0 .../best-practices/ec2-simple/providers.tf | 0 .../best-practices/ec2-simple/variables.tf | 0 .../best-practices/k8s-basic/.gitignore | 0 .../best-practices/k8s-basic/SETUP.md | 0 .../best-practices/k8s-basic/main.tf | 0 .../best-practices/k8s-basic/providers.tf | 0 .../best-practices/k8s-basic/variables.tf | 0 .../best-practices/k8s-modules/.gitignore | 0 .../best-practices/k8s-modules/SETUP.md | 0 .../best-practices/k8s-modules/main.tf | 0 .../best-practices/k8s-modules/modules/SvcCustomer/main.tf | 0 .../k8s-modules/modules/SvcCustomer/outputs.tf | 0 .../k8s-modules/modules/SvcCustomer/variables.tf | 0 .../best-practices/k8s-modules/modules/SvcFeedback/main.tf | 0 .../k8s-modules/modules/SvcFeedback/outputs.tf | 0 .../k8s-modules/modules/SvcFeedback/variables.tf | 0 .../k8s-modules/modules/ingress/www.petshop.com.br/main.tf | 0 .../modules/ingress/www.petshop.com.br/outputs.tf | 0 .../modules/ingress/www.petshop.com.br/variables.tf | 0 .../best-practices/k8s-modules/provider.tf | 0 .../hello-terraform/.gitignore | 0 {terraform => terraform-modules}/hello-terraform/main.tf | 0 95 files changed, 12 insertions(+), 5 deletions(-) rename aws-modules/{aws-lambda => aws-lambda-modules}/.gitignore (100%) rename aws-modules/{aws-lambda => aws-lambda-modules}/README.md (100%) rename aws-modules/{aws-lambda => aws-lambda-modules}/lambda/pom.xml (98%) rename aws-modules/{aws-lambda => aws-lambda-modules}/lambda/sam-templates/template-implicit.yaml (100%) rename aws-modules/{aws-lambda => aws-lambda-modules}/lambda/sam-templates/template-inline-swagger.yaml (100%) rename aws-modules/{aws-lambda => aws-lambda-modules}/lambda/src/main/java/com/baeldung/lambda/LambdaMethodHandler.java (100%) rename aws-modules/{aws-lambda => aws-lambda-modules}/lambda/src/main/java/com/baeldung/lambda/LambdaRequestHandler.java (100%) rename aws-modules/{aws-lambda => aws-lambda-modules}/lambda/src/main/java/com/baeldung/lambda/LambdaRequestStreamHandler.java (100%) rename aws-modules/{aws-lambda => aws-lambda-modules}/lambda/src/main/java/com/baeldung/lambda/apigateway/APIDemoHandler.java (100%) rename aws-modules/{aws-lambda => aws-lambda-modules}/lambda/src/main/java/com/baeldung/lambda/apigateway/model/Person.java (100%) rename aws-modules/{aws-lambda => aws-lambda-modules}/lambda/src/main/java/com/baeldung/lambda/dynamodb/SavePersonHandler.java (100%) rename aws-modules/{aws-lambda => aws-lambda-modules}/lambda/src/main/java/com/baeldung/lambda/dynamodb/bean/PersonRequest.java (100%) rename aws-modules/{aws-lambda => aws-lambda-modules}/lambda/src/main/java/com/baeldung/lambda/dynamodb/bean/PersonResponse.java (100%) rename aws-modules/{aws-lambda => aws-lambda-modules}/lambda/src/main/resources/logback.xml (100%) rename aws-modules/{aws-lambda => aws-lambda-modules}/pom.xml (88%) rename aws-modules/{aws-lambda => aws-lambda-modules}/shipping-tracker/.gitignore (100%) rename aws-modules/{aws-lambda => aws-lambda-modules}/shipping-tracker/ShippingFunction/pom.xml (98%) rename aws-modules/{aws-lambda => aws-lambda-modules}/shipping-tracker/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/App.java (100%) rename aws-modules/{aws-lambda => aws-lambda-modules}/shipping-tracker/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/Checkin.java (100%) rename aws-modules/{aws-lambda => aws-lambda-modules}/shipping-tracker/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/Consignment.java (100%) rename aws-modules/{aws-lambda => aws-lambda-modules}/shipping-tracker/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/Item.java (100%) rename aws-modules/{aws-lambda => aws-lambda-modules}/shipping-tracker/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/ShippingDao.java (100%) rename aws-modules/{aws-lambda => aws-lambda-modules}/shipping-tracker/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/ShippingService.java (100%) rename aws-modules/{aws-lambda => aws-lambda-modules}/shipping-tracker/template.yaml (100%) rename aws-modules/{aws-lambda => aws-lambda-modules}/todo-reminder/ToDoFunction/pom.xml (95%) rename aws-modules/{aws-lambda => aws-lambda-modules}/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/App.java (100%) rename aws-modules/{aws-lambda => aws-lambda-modules}/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/PostApi.java (100%) rename aws-modules/{aws-lambda => aws-lambda-modules}/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/PostItem.java (100%) rename aws-modules/{aws-lambda => aws-lambda-modules}/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/ToDoApi.java (100%) rename aws-modules/{aws-lambda => aws-lambda-modules}/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/ToDoItem.java (100%) rename aws-modules/{aws-lambda => aws-lambda-modules}/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/Config.java (100%) rename aws-modules/{aws-lambda => aws-lambda-modules}/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/Credentials.java (100%) rename aws-modules/{aws-lambda => aws-lambda-modules}/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/ExecutionContext.java (100%) rename aws-modules/{aws-lambda => aws-lambda-modules}/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/Services.java (100%) rename aws-modules/{aws-lambda => aws-lambda-modules}/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/service/PostService.java (100%) rename aws-modules/{aws-lambda => aws-lambda-modules}/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/service/ToDoReaderService.java (100%) rename aws-modules/{aws-lambda => aws-lambda-modules}/todo-reminder/ToDoFunction/src/main/resources/configuration.yml (100%) rename aws-modules/{aws-lambda => aws-lambda-modules}/todo-reminder/ToDoFunction/src/main/resources/log4j2.xml (100%) rename aws-modules/{aws-lambda => aws-lambda-modules}/todo-reminder/ToDoFunction/src/test/java/com/baeldung/lambda/todo/AppTest.java (100%) rename aws-modules/{aws-lambda => aws-lambda-modules}/todo-reminder/ToDoFunction/src/test/java/com/baeldung/lambda/todo/service/ToDoReaderServiceTest.java (100%) rename aws-modules/{aws-lambda => aws-lambda-modules}/todo-reminder/template.yaml (100%) rename {clojure => clojure-modules}/ring/.gitignore (100%) rename {clojure => clojure-modules}/ring/README.md (100%) rename {clojure => clojure-modules}/ring/project.clj (100%) rename {clojure => clojure-modules}/ring/src/ring/core.clj (100%) rename {linux-bash => linux-bash-modules}/command-line-arguments/src/main/bash/README.md (100%) rename {linux-bash => linux-bash-modules}/command-line-arguments/src/main/bash/userReg-flags.sh (100%) rename {linux-bash => linux-bash-modules}/command-line-arguments/src/main/bash/userReg-positional-parameter.sh (100%) rename {linux-bash => linux-bash-modules}/command-line-arguments/src/main/bash/users-loop.sh (100%) rename {linux-bash => linux-bash-modules}/command-line-arguments/src/main/bash/users-shift-operator.sh (100%) rename {linux-bash => linux-bash-modules}/functions/src/main/bash/README.md (100%) rename {linux-bash => linux-bash-modules}/functions/src/main/bash/functions.sh (100%) rename {linux-bash => linux-bash-modules}/functions/src/main/bash/infile (100%) rename {linux-bash => linux-bash-modules}/json/README.md (100%) rename {linux-bash => linux-bash-modules}/json/src/main/bash/fruit.json (100%) rename {linux-bash => linux-bash-modules}/json/src/main/bash/fruits.json (100%) rename {linux-bash => linux-bash-modules}/json/src/main/bash/jq.sh (100%) rename {linux-bash => linux-bash-modules}/json/src/main/bash/wikipedia.json (100%) rename {linux-bash => linux-bash-modules}/loops/README.md (100%) rename {linux-bash => linux-bash-modules}/loops/src/main/bash/find_directories.sh (100%) rename {linux-bash => linux-bash-modules}/loops/src/main/bash/loop_directories.sh (100%) rename {linux-bash => linux-bash-modules}/read/README.md (100%) rename {linux-bash => linux-bash-modules}/read/src/main/bash/file.csv (100%) rename {linux-bash => linux-bash-modules}/read/src/main/bash/read_inputs.sh (100%) rename {linux-bash => linux-bash-modules}/text/README.md (100%) rename {linux-bash => linux-bash-modules}/text/src/main/bash/append_multiple_lines.sh (100%) rename {linux-bash => linux-bash-modules}/text/src/main/bash/remove_characters.sh (100%) rename {terraform => terraform-modules}/README.md (100%) rename {terraform => terraform-modules}/best-practices/README.md (100%) rename {terraform => terraform-modules}/best-practices/ec2-simple/.gitignore (100%) rename {terraform => terraform-modules}/best-practices/ec2-simple/SETUP.md (100%) rename {terraform => terraform-modules}/best-practices/ec2-simple/main.tf (100%) rename {terraform => terraform-modules}/best-practices/ec2-simple/providers.tf (100%) rename {terraform => terraform-modules}/best-practices/ec2-simple/variables.tf (100%) rename {terraform => terraform-modules}/best-practices/k8s-basic/.gitignore (100%) rename {terraform => terraform-modules}/best-practices/k8s-basic/SETUP.md (100%) rename {terraform => terraform-modules}/best-practices/k8s-basic/main.tf (100%) rename {terraform => terraform-modules}/best-practices/k8s-basic/providers.tf (100%) rename {terraform => terraform-modules}/best-practices/k8s-basic/variables.tf (100%) rename {terraform => terraform-modules}/best-practices/k8s-modules/.gitignore (100%) rename {terraform => terraform-modules}/best-practices/k8s-modules/SETUP.md (100%) rename {terraform => terraform-modules}/best-practices/k8s-modules/main.tf (100%) rename {terraform => terraform-modules}/best-practices/k8s-modules/modules/SvcCustomer/main.tf (100%) rename {terraform => terraform-modules}/best-practices/k8s-modules/modules/SvcCustomer/outputs.tf (100%) rename {terraform => terraform-modules}/best-practices/k8s-modules/modules/SvcCustomer/variables.tf (100%) rename {terraform => terraform-modules}/best-practices/k8s-modules/modules/SvcFeedback/main.tf (100%) rename {terraform => terraform-modules}/best-practices/k8s-modules/modules/SvcFeedback/outputs.tf (100%) rename {terraform => terraform-modules}/best-practices/k8s-modules/modules/SvcFeedback/variables.tf (100%) rename {terraform => terraform-modules}/best-practices/k8s-modules/modules/ingress/www.petshop.com.br/main.tf (100%) rename {terraform => terraform-modules}/best-practices/k8s-modules/modules/ingress/www.petshop.com.br/outputs.tf (100%) rename {terraform => terraform-modules}/best-practices/k8s-modules/modules/ingress/www.petshop.com.br/variables.tf (100%) rename {terraform => terraform-modules}/best-practices/k8s-modules/provider.tf (100%) rename {terraform => terraform-modules}/hello-terraform/.gitignore (100%) rename {terraform => terraform-modules}/hello-terraform/main.tf (100%) diff --git a/aws-modules/aws-lambda/.gitignore b/aws-modules/aws-lambda-modules/.gitignore similarity index 100% rename from aws-modules/aws-lambda/.gitignore rename to aws-modules/aws-lambda-modules/.gitignore diff --git a/aws-modules/aws-lambda/README.md b/aws-modules/aws-lambda-modules/README.md similarity index 100% rename from aws-modules/aws-lambda/README.md rename to aws-modules/aws-lambda-modules/README.md diff --git a/aws-modules/aws-lambda/lambda/pom.xml b/aws-modules/aws-lambda-modules/lambda/pom.xml similarity index 98% rename from aws-modules/aws-lambda/lambda/pom.xml rename to aws-modules/aws-lambda-modules/lambda/pom.xml index 8e47bab4be95..a82209b23f36 100644 --- a/aws-modules/aws-lambda/lambda/pom.xml +++ b/aws-modules/aws-lambda-modules/lambda/pom.xml @@ -10,7 +10,7 @@ com.baeldung - aws-lambda + aws-lambda-modules 1.0.0-SNAPSHOT diff --git a/aws-modules/aws-lambda/lambda/sam-templates/template-implicit.yaml b/aws-modules/aws-lambda-modules/lambda/sam-templates/template-implicit.yaml similarity index 100% rename from aws-modules/aws-lambda/lambda/sam-templates/template-implicit.yaml rename to aws-modules/aws-lambda-modules/lambda/sam-templates/template-implicit.yaml diff --git a/aws-modules/aws-lambda/lambda/sam-templates/template-inline-swagger.yaml b/aws-modules/aws-lambda-modules/lambda/sam-templates/template-inline-swagger.yaml similarity index 100% rename from aws-modules/aws-lambda/lambda/sam-templates/template-inline-swagger.yaml rename to aws-modules/aws-lambda-modules/lambda/sam-templates/template-inline-swagger.yaml diff --git a/aws-modules/aws-lambda/lambda/src/main/java/com/baeldung/lambda/LambdaMethodHandler.java b/aws-modules/aws-lambda-modules/lambda/src/main/java/com/baeldung/lambda/LambdaMethodHandler.java similarity index 100% rename from aws-modules/aws-lambda/lambda/src/main/java/com/baeldung/lambda/LambdaMethodHandler.java rename to aws-modules/aws-lambda-modules/lambda/src/main/java/com/baeldung/lambda/LambdaMethodHandler.java diff --git a/aws-modules/aws-lambda/lambda/src/main/java/com/baeldung/lambda/LambdaRequestHandler.java b/aws-modules/aws-lambda-modules/lambda/src/main/java/com/baeldung/lambda/LambdaRequestHandler.java similarity index 100% rename from aws-modules/aws-lambda/lambda/src/main/java/com/baeldung/lambda/LambdaRequestHandler.java rename to aws-modules/aws-lambda-modules/lambda/src/main/java/com/baeldung/lambda/LambdaRequestHandler.java diff --git a/aws-modules/aws-lambda/lambda/src/main/java/com/baeldung/lambda/LambdaRequestStreamHandler.java b/aws-modules/aws-lambda-modules/lambda/src/main/java/com/baeldung/lambda/LambdaRequestStreamHandler.java similarity index 100% rename from aws-modules/aws-lambda/lambda/src/main/java/com/baeldung/lambda/LambdaRequestStreamHandler.java rename to aws-modules/aws-lambda-modules/lambda/src/main/java/com/baeldung/lambda/LambdaRequestStreamHandler.java diff --git a/aws-modules/aws-lambda/lambda/src/main/java/com/baeldung/lambda/apigateway/APIDemoHandler.java b/aws-modules/aws-lambda-modules/lambda/src/main/java/com/baeldung/lambda/apigateway/APIDemoHandler.java similarity index 100% rename from aws-modules/aws-lambda/lambda/src/main/java/com/baeldung/lambda/apigateway/APIDemoHandler.java rename to aws-modules/aws-lambda-modules/lambda/src/main/java/com/baeldung/lambda/apigateway/APIDemoHandler.java diff --git a/aws-modules/aws-lambda/lambda/src/main/java/com/baeldung/lambda/apigateway/model/Person.java b/aws-modules/aws-lambda-modules/lambda/src/main/java/com/baeldung/lambda/apigateway/model/Person.java similarity index 100% rename from aws-modules/aws-lambda/lambda/src/main/java/com/baeldung/lambda/apigateway/model/Person.java rename to aws-modules/aws-lambda-modules/lambda/src/main/java/com/baeldung/lambda/apigateway/model/Person.java diff --git a/aws-modules/aws-lambda/lambda/src/main/java/com/baeldung/lambda/dynamodb/SavePersonHandler.java b/aws-modules/aws-lambda-modules/lambda/src/main/java/com/baeldung/lambda/dynamodb/SavePersonHandler.java similarity index 100% rename from aws-modules/aws-lambda/lambda/src/main/java/com/baeldung/lambda/dynamodb/SavePersonHandler.java rename to aws-modules/aws-lambda-modules/lambda/src/main/java/com/baeldung/lambda/dynamodb/SavePersonHandler.java diff --git a/aws-modules/aws-lambda/lambda/src/main/java/com/baeldung/lambda/dynamodb/bean/PersonRequest.java b/aws-modules/aws-lambda-modules/lambda/src/main/java/com/baeldung/lambda/dynamodb/bean/PersonRequest.java similarity index 100% rename from aws-modules/aws-lambda/lambda/src/main/java/com/baeldung/lambda/dynamodb/bean/PersonRequest.java rename to aws-modules/aws-lambda-modules/lambda/src/main/java/com/baeldung/lambda/dynamodb/bean/PersonRequest.java diff --git a/aws-modules/aws-lambda/lambda/src/main/java/com/baeldung/lambda/dynamodb/bean/PersonResponse.java b/aws-modules/aws-lambda-modules/lambda/src/main/java/com/baeldung/lambda/dynamodb/bean/PersonResponse.java similarity index 100% rename from aws-modules/aws-lambda/lambda/src/main/java/com/baeldung/lambda/dynamodb/bean/PersonResponse.java rename to aws-modules/aws-lambda-modules/lambda/src/main/java/com/baeldung/lambda/dynamodb/bean/PersonResponse.java diff --git a/aws-modules/aws-lambda/lambda/src/main/resources/logback.xml b/aws-modules/aws-lambda-modules/lambda/src/main/resources/logback.xml similarity index 100% rename from aws-modules/aws-lambda/lambda/src/main/resources/logback.xml rename to aws-modules/aws-lambda-modules/lambda/src/main/resources/logback.xml diff --git a/aws-modules/aws-lambda/pom.xml b/aws-modules/aws-lambda-modules/pom.xml similarity index 88% rename from aws-modules/aws-lambda/pom.xml rename to aws-modules/aws-lambda-modules/pom.xml index bdd295c0076f..23fb348631b8 100644 --- a/aws-modules/aws-lambda/pom.xml +++ b/aws-modules/aws-lambda-modules/pom.xml @@ -3,8 +3,8 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - aws-lambda - aws-lambda + aws-lambda-modules + aws-lambda-modules pom diff --git a/aws-modules/aws-lambda/shipping-tracker/.gitignore b/aws-modules/aws-lambda-modules/shipping-tracker/.gitignore similarity index 100% rename from aws-modules/aws-lambda/shipping-tracker/.gitignore rename to aws-modules/aws-lambda-modules/shipping-tracker/.gitignore diff --git a/aws-modules/aws-lambda/shipping-tracker/ShippingFunction/pom.xml b/aws-modules/aws-lambda-modules/shipping-tracker/ShippingFunction/pom.xml similarity index 98% rename from aws-modules/aws-lambda/shipping-tracker/ShippingFunction/pom.xml rename to aws-modules/aws-lambda-modules/shipping-tracker/ShippingFunction/pom.xml index a60f934bad8d..abd22ea50c13 100644 --- a/aws-modules/aws-lambda/shipping-tracker/ShippingFunction/pom.xml +++ b/aws-modules/aws-lambda-modules/shipping-tracker/ShippingFunction/pom.xml @@ -9,7 +9,7 @@ com.baeldung - aws-lambda + aws-lambda-modules 1.0.0-SNAPSHOT ../../ diff --git a/aws-modules/aws-lambda/shipping-tracker/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/App.java b/aws-modules/aws-lambda-modules/shipping-tracker/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/App.java similarity index 100% rename from aws-modules/aws-lambda/shipping-tracker/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/App.java rename to aws-modules/aws-lambda-modules/shipping-tracker/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/App.java diff --git a/aws-modules/aws-lambda/shipping-tracker/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/Checkin.java b/aws-modules/aws-lambda-modules/shipping-tracker/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/Checkin.java similarity index 100% rename from aws-modules/aws-lambda/shipping-tracker/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/Checkin.java rename to aws-modules/aws-lambda-modules/shipping-tracker/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/Checkin.java diff --git a/aws-modules/aws-lambda/shipping-tracker/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/Consignment.java b/aws-modules/aws-lambda-modules/shipping-tracker/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/Consignment.java similarity index 100% rename from aws-modules/aws-lambda/shipping-tracker/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/Consignment.java rename to aws-modules/aws-lambda-modules/shipping-tracker/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/Consignment.java diff --git a/aws-modules/aws-lambda/shipping-tracker/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/Item.java b/aws-modules/aws-lambda-modules/shipping-tracker/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/Item.java similarity index 100% rename from aws-modules/aws-lambda/shipping-tracker/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/Item.java rename to aws-modules/aws-lambda-modules/shipping-tracker/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/Item.java diff --git a/aws-modules/aws-lambda/shipping-tracker/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/ShippingDao.java b/aws-modules/aws-lambda-modules/shipping-tracker/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/ShippingDao.java similarity index 100% rename from aws-modules/aws-lambda/shipping-tracker/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/ShippingDao.java rename to aws-modules/aws-lambda-modules/shipping-tracker/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/ShippingDao.java diff --git a/aws-modules/aws-lambda/shipping-tracker/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/ShippingService.java b/aws-modules/aws-lambda-modules/shipping-tracker/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/ShippingService.java similarity index 100% rename from aws-modules/aws-lambda/shipping-tracker/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/ShippingService.java rename to aws-modules/aws-lambda-modules/shipping-tracker/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/ShippingService.java diff --git a/aws-modules/aws-lambda/shipping-tracker/template.yaml b/aws-modules/aws-lambda-modules/shipping-tracker/template.yaml similarity index 100% rename from aws-modules/aws-lambda/shipping-tracker/template.yaml rename to aws-modules/aws-lambda-modules/shipping-tracker/template.yaml diff --git a/aws-modules/aws-lambda/todo-reminder/ToDoFunction/pom.xml b/aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/pom.xml similarity index 95% rename from aws-modules/aws-lambda/todo-reminder/ToDoFunction/pom.xml rename to aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/pom.xml index 5545154a5d3b..04295e1ab127 100644 --- a/aws-modules/aws-lambda/todo-reminder/ToDoFunction/pom.xml +++ b/aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/pom.xml @@ -8,6 +8,13 @@ ToDoFunction jar + + com.baeldung + aws-lambda-modules + 1.0.0-SNAPSHOT + ../../ + + com.amazonaws diff --git a/aws-modules/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/App.java b/aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/App.java similarity index 100% rename from aws-modules/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/App.java rename to aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/App.java diff --git a/aws-modules/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/PostApi.java b/aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/PostApi.java similarity index 100% rename from aws-modules/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/PostApi.java rename to aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/PostApi.java diff --git a/aws-modules/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/PostItem.java b/aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/PostItem.java similarity index 100% rename from aws-modules/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/PostItem.java rename to aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/PostItem.java diff --git a/aws-modules/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/ToDoApi.java b/aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/ToDoApi.java similarity index 100% rename from aws-modules/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/ToDoApi.java rename to aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/ToDoApi.java diff --git a/aws-modules/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/ToDoItem.java b/aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/ToDoItem.java similarity index 100% rename from aws-modules/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/ToDoItem.java rename to aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/ToDoItem.java diff --git a/aws-modules/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/Config.java b/aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/Config.java similarity index 100% rename from aws-modules/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/Config.java rename to aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/Config.java diff --git a/aws-modules/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/Credentials.java b/aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/Credentials.java similarity index 100% rename from aws-modules/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/Credentials.java rename to aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/Credentials.java diff --git a/aws-modules/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/ExecutionContext.java b/aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/ExecutionContext.java similarity index 100% rename from aws-modules/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/ExecutionContext.java rename to aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/ExecutionContext.java diff --git a/aws-modules/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/Services.java b/aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/Services.java similarity index 100% rename from aws-modules/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/Services.java rename to aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/Services.java diff --git a/aws-modules/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/service/PostService.java b/aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/service/PostService.java similarity index 100% rename from aws-modules/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/service/PostService.java rename to aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/service/PostService.java diff --git a/aws-modules/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/service/ToDoReaderService.java b/aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/service/ToDoReaderService.java similarity index 100% rename from aws-modules/aws-lambda/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/service/ToDoReaderService.java rename to aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/service/ToDoReaderService.java diff --git a/aws-modules/aws-lambda/todo-reminder/ToDoFunction/src/main/resources/configuration.yml b/aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/main/resources/configuration.yml similarity index 100% rename from aws-modules/aws-lambda/todo-reminder/ToDoFunction/src/main/resources/configuration.yml rename to aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/main/resources/configuration.yml diff --git a/aws-modules/aws-lambda/todo-reminder/ToDoFunction/src/main/resources/log4j2.xml b/aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/main/resources/log4j2.xml similarity index 100% rename from aws-modules/aws-lambda/todo-reminder/ToDoFunction/src/main/resources/log4j2.xml rename to aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/main/resources/log4j2.xml diff --git a/aws-modules/aws-lambda/todo-reminder/ToDoFunction/src/test/java/com/baeldung/lambda/todo/AppTest.java b/aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/test/java/com/baeldung/lambda/todo/AppTest.java similarity index 100% rename from aws-modules/aws-lambda/todo-reminder/ToDoFunction/src/test/java/com/baeldung/lambda/todo/AppTest.java rename to aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/test/java/com/baeldung/lambda/todo/AppTest.java diff --git a/aws-modules/aws-lambda/todo-reminder/ToDoFunction/src/test/java/com/baeldung/lambda/todo/service/ToDoReaderServiceTest.java b/aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/test/java/com/baeldung/lambda/todo/service/ToDoReaderServiceTest.java similarity index 100% rename from aws-modules/aws-lambda/todo-reminder/ToDoFunction/src/test/java/com/baeldung/lambda/todo/service/ToDoReaderServiceTest.java rename to aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/test/java/com/baeldung/lambda/todo/service/ToDoReaderServiceTest.java diff --git a/aws-modules/aws-lambda/todo-reminder/template.yaml b/aws-modules/aws-lambda-modules/todo-reminder/template.yaml similarity index 100% rename from aws-modules/aws-lambda/todo-reminder/template.yaml rename to aws-modules/aws-lambda-modules/todo-reminder/template.yaml diff --git a/aws-modules/pom.xml b/aws-modules/pom.xml index 72c5017c32ad..02473815b5be 100644 --- a/aws-modules/pom.xml +++ b/aws-modules/pom.xml @@ -15,7 +15,7 @@ aws-app-sync - aws-lambda + aws-lambda-modules aws-miscellaneous aws-reactive aws-s3 diff --git a/clojure/ring/.gitignore b/clojure-modules/ring/.gitignore similarity index 100% rename from clojure/ring/.gitignore rename to clojure-modules/ring/.gitignore diff --git a/clojure/ring/README.md b/clojure-modules/ring/README.md similarity index 100% rename from clojure/ring/README.md rename to clojure-modules/ring/README.md diff --git a/clojure/ring/project.clj b/clojure-modules/ring/project.clj similarity index 100% rename from clojure/ring/project.clj rename to clojure-modules/ring/project.clj diff --git a/clojure/ring/src/ring/core.clj b/clojure-modules/ring/src/ring/core.clj similarity index 100% rename from clojure/ring/src/ring/core.clj rename to clojure-modules/ring/src/ring/core.clj diff --git a/linux-bash/command-line-arguments/src/main/bash/README.md b/linux-bash-modules/command-line-arguments/src/main/bash/README.md similarity index 100% rename from linux-bash/command-line-arguments/src/main/bash/README.md rename to linux-bash-modules/command-line-arguments/src/main/bash/README.md diff --git a/linux-bash/command-line-arguments/src/main/bash/userReg-flags.sh b/linux-bash-modules/command-line-arguments/src/main/bash/userReg-flags.sh similarity index 100% rename from linux-bash/command-line-arguments/src/main/bash/userReg-flags.sh rename to linux-bash-modules/command-line-arguments/src/main/bash/userReg-flags.sh diff --git a/linux-bash/command-line-arguments/src/main/bash/userReg-positional-parameter.sh b/linux-bash-modules/command-line-arguments/src/main/bash/userReg-positional-parameter.sh similarity index 100% rename from linux-bash/command-line-arguments/src/main/bash/userReg-positional-parameter.sh rename to linux-bash-modules/command-line-arguments/src/main/bash/userReg-positional-parameter.sh diff --git a/linux-bash/command-line-arguments/src/main/bash/users-loop.sh b/linux-bash-modules/command-line-arguments/src/main/bash/users-loop.sh similarity index 100% rename from linux-bash/command-line-arguments/src/main/bash/users-loop.sh rename to linux-bash-modules/command-line-arguments/src/main/bash/users-loop.sh diff --git a/linux-bash/command-line-arguments/src/main/bash/users-shift-operator.sh b/linux-bash-modules/command-line-arguments/src/main/bash/users-shift-operator.sh similarity index 100% rename from linux-bash/command-line-arguments/src/main/bash/users-shift-operator.sh rename to linux-bash-modules/command-line-arguments/src/main/bash/users-shift-operator.sh diff --git a/linux-bash/functions/src/main/bash/README.md b/linux-bash-modules/functions/src/main/bash/README.md similarity index 100% rename from linux-bash/functions/src/main/bash/README.md rename to linux-bash-modules/functions/src/main/bash/README.md diff --git a/linux-bash/functions/src/main/bash/functions.sh b/linux-bash-modules/functions/src/main/bash/functions.sh similarity index 100% rename from linux-bash/functions/src/main/bash/functions.sh rename to linux-bash-modules/functions/src/main/bash/functions.sh diff --git a/linux-bash/functions/src/main/bash/infile b/linux-bash-modules/functions/src/main/bash/infile similarity index 100% rename from linux-bash/functions/src/main/bash/infile rename to linux-bash-modules/functions/src/main/bash/infile diff --git a/linux-bash/json/README.md b/linux-bash-modules/json/README.md similarity index 100% rename from linux-bash/json/README.md rename to linux-bash-modules/json/README.md diff --git a/linux-bash/json/src/main/bash/fruit.json b/linux-bash-modules/json/src/main/bash/fruit.json similarity index 100% rename from linux-bash/json/src/main/bash/fruit.json rename to linux-bash-modules/json/src/main/bash/fruit.json diff --git a/linux-bash/json/src/main/bash/fruits.json b/linux-bash-modules/json/src/main/bash/fruits.json similarity index 100% rename from linux-bash/json/src/main/bash/fruits.json rename to linux-bash-modules/json/src/main/bash/fruits.json diff --git a/linux-bash/json/src/main/bash/jq.sh b/linux-bash-modules/json/src/main/bash/jq.sh similarity index 100% rename from linux-bash/json/src/main/bash/jq.sh rename to linux-bash-modules/json/src/main/bash/jq.sh diff --git a/linux-bash/json/src/main/bash/wikipedia.json b/linux-bash-modules/json/src/main/bash/wikipedia.json similarity index 100% rename from linux-bash/json/src/main/bash/wikipedia.json rename to linux-bash-modules/json/src/main/bash/wikipedia.json diff --git a/linux-bash/loops/README.md b/linux-bash-modules/loops/README.md similarity index 100% rename from linux-bash/loops/README.md rename to linux-bash-modules/loops/README.md diff --git a/linux-bash/loops/src/main/bash/find_directories.sh b/linux-bash-modules/loops/src/main/bash/find_directories.sh similarity index 100% rename from linux-bash/loops/src/main/bash/find_directories.sh rename to linux-bash-modules/loops/src/main/bash/find_directories.sh diff --git a/linux-bash/loops/src/main/bash/loop_directories.sh b/linux-bash-modules/loops/src/main/bash/loop_directories.sh similarity index 100% rename from linux-bash/loops/src/main/bash/loop_directories.sh rename to linux-bash-modules/loops/src/main/bash/loop_directories.sh diff --git a/linux-bash/read/README.md b/linux-bash-modules/read/README.md similarity index 100% rename from linux-bash/read/README.md rename to linux-bash-modules/read/README.md diff --git a/linux-bash/read/src/main/bash/file.csv b/linux-bash-modules/read/src/main/bash/file.csv similarity index 100% rename from linux-bash/read/src/main/bash/file.csv rename to linux-bash-modules/read/src/main/bash/file.csv diff --git a/linux-bash/read/src/main/bash/read_inputs.sh b/linux-bash-modules/read/src/main/bash/read_inputs.sh similarity index 100% rename from linux-bash/read/src/main/bash/read_inputs.sh rename to linux-bash-modules/read/src/main/bash/read_inputs.sh diff --git a/linux-bash/text/README.md b/linux-bash-modules/text/README.md similarity index 100% rename from linux-bash/text/README.md rename to linux-bash-modules/text/README.md diff --git a/linux-bash/text/src/main/bash/append_multiple_lines.sh b/linux-bash-modules/text/src/main/bash/append_multiple_lines.sh similarity index 100% rename from linux-bash/text/src/main/bash/append_multiple_lines.sh rename to linux-bash-modules/text/src/main/bash/append_multiple_lines.sh diff --git a/linux-bash/text/src/main/bash/remove_characters.sh b/linux-bash-modules/text/src/main/bash/remove_characters.sh similarity index 100% rename from linux-bash/text/src/main/bash/remove_characters.sh rename to linux-bash-modules/text/src/main/bash/remove_characters.sh diff --git a/terraform/README.md b/terraform-modules/README.md similarity index 100% rename from terraform/README.md rename to terraform-modules/README.md diff --git a/terraform/best-practices/README.md b/terraform-modules/best-practices/README.md similarity index 100% rename from terraform/best-practices/README.md rename to terraform-modules/best-practices/README.md diff --git a/terraform/best-practices/ec2-simple/.gitignore b/terraform-modules/best-practices/ec2-simple/.gitignore similarity index 100% rename from terraform/best-practices/ec2-simple/.gitignore rename to terraform-modules/best-practices/ec2-simple/.gitignore diff --git a/terraform/best-practices/ec2-simple/SETUP.md b/terraform-modules/best-practices/ec2-simple/SETUP.md similarity index 100% rename from terraform/best-practices/ec2-simple/SETUP.md rename to terraform-modules/best-practices/ec2-simple/SETUP.md diff --git a/terraform/best-practices/ec2-simple/main.tf b/terraform-modules/best-practices/ec2-simple/main.tf similarity index 100% rename from terraform/best-practices/ec2-simple/main.tf rename to terraform-modules/best-practices/ec2-simple/main.tf diff --git a/terraform/best-practices/ec2-simple/providers.tf b/terraform-modules/best-practices/ec2-simple/providers.tf similarity index 100% rename from terraform/best-practices/ec2-simple/providers.tf rename to terraform-modules/best-practices/ec2-simple/providers.tf diff --git a/terraform/best-practices/ec2-simple/variables.tf b/terraform-modules/best-practices/ec2-simple/variables.tf similarity index 100% rename from terraform/best-practices/ec2-simple/variables.tf rename to terraform-modules/best-practices/ec2-simple/variables.tf diff --git a/terraform/best-practices/k8s-basic/.gitignore b/terraform-modules/best-practices/k8s-basic/.gitignore similarity index 100% rename from terraform/best-practices/k8s-basic/.gitignore rename to terraform-modules/best-practices/k8s-basic/.gitignore diff --git a/terraform/best-practices/k8s-basic/SETUP.md b/terraform-modules/best-practices/k8s-basic/SETUP.md similarity index 100% rename from terraform/best-practices/k8s-basic/SETUP.md rename to terraform-modules/best-practices/k8s-basic/SETUP.md diff --git a/terraform/best-practices/k8s-basic/main.tf b/terraform-modules/best-practices/k8s-basic/main.tf similarity index 100% rename from terraform/best-practices/k8s-basic/main.tf rename to terraform-modules/best-practices/k8s-basic/main.tf diff --git a/terraform/best-practices/k8s-basic/providers.tf b/terraform-modules/best-practices/k8s-basic/providers.tf similarity index 100% rename from terraform/best-practices/k8s-basic/providers.tf rename to terraform-modules/best-practices/k8s-basic/providers.tf diff --git a/terraform/best-practices/k8s-basic/variables.tf b/terraform-modules/best-practices/k8s-basic/variables.tf similarity index 100% rename from terraform/best-practices/k8s-basic/variables.tf rename to terraform-modules/best-practices/k8s-basic/variables.tf diff --git a/terraform/best-practices/k8s-modules/.gitignore b/terraform-modules/best-practices/k8s-modules/.gitignore similarity index 100% rename from terraform/best-practices/k8s-modules/.gitignore rename to terraform-modules/best-practices/k8s-modules/.gitignore diff --git a/terraform/best-practices/k8s-modules/SETUP.md b/terraform-modules/best-practices/k8s-modules/SETUP.md similarity index 100% rename from terraform/best-practices/k8s-modules/SETUP.md rename to terraform-modules/best-practices/k8s-modules/SETUP.md diff --git a/terraform/best-practices/k8s-modules/main.tf b/terraform-modules/best-practices/k8s-modules/main.tf similarity index 100% rename from terraform/best-practices/k8s-modules/main.tf rename to terraform-modules/best-practices/k8s-modules/main.tf diff --git a/terraform/best-practices/k8s-modules/modules/SvcCustomer/main.tf b/terraform-modules/best-practices/k8s-modules/modules/SvcCustomer/main.tf similarity index 100% rename from terraform/best-practices/k8s-modules/modules/SvcCustomer/main.tf rename to terraform-modules/best-practices/k8s-modules/modules/SvcCustomer/main.tf diff --git a/terraform/best-practices/k8s-modules/modules/SvcCustomer/outputs.tf b/terraform-modules/best-practices/k8s-modules/modules/SvcCustomer/outputs.tf similarity index 100% rename from terraform/best-practices/k8s-modules/modules/SvcCustomer/outputs.tf rename to terraform-modules/best-practices/k8s-modules/modules/SvcCustomer/outputs.tf diff --git a/terraform/best-practices/k8s-modules/modules/SvcCustomer/variables.tf b/terraform-modules/best-practices/k8s-modules/modules/SvcCustomer/variables.tf similarity index 100% rename from terraform/best-practices/k8s-modules/modules/SvcCustomer/variables.tf rename to terraform-modules/best-practices/k8s-modules/modules/SvcCustomer/variables.tf diff --git a/terraform/best-practices/k8s-modules/modules/SvcFeedback/main.tf b/terraform-modules/best-practices/k8s-modules/modules/SvcFeedback/main.tf similarity index 100% rename from terraform/best-practices/k8s-modules/modules/SvcFeedback/main.tf rename to terraform-modules/best-practices/k8s-modules/modules/SvcFeedback/main.tf diff --git a/terraform/best-practices/k8s-modules/modules/SvcFeedback/outputs.tf b/terraform-modules/best-practices/k8s-modules/modules/SvcFeedback/outputs.tf similarity index 100% rename from terraform/best-practices/k8s-modules/modules/SvcFeedback/outputs.tf rename to terraform-modules/best-practices/k8s-modules/modules/SvcFeedback/outputs.tf diff --git a/terraform/best-practices/k8s-modules/modules/SvcFeedback/variables.tf b/terraform-modules/best-practices/k8s-modules/modules/SvcFeedback/variables.tf similarity index 100% rename from terraform/best-practices/k8s-modules/modules/SvcFeedback/variables.tf rename to terraform-modules/best-practices/k8s-modules/modules/SvcFeedback/variables.tf diff --git a/terraform/best-practices/k8s-modules/modules/ingress/www.petshop.com.br/main.tf b/terraform-modules/best-practices/k8s-modules/modules/ingress/www.petshop.com.br/main.tf similarity index 100% rename from terraform/best-practices/k8s-modules/modules/ingress/www.petshop.com.br/main.tf rename to terraform-modules/best-practices/k8s-modules/modules/ingress/www.petshop.com.br/main.tf diff --git a/terraform/best-practices/k8s-modules/modules/ingress/www.petshop.com.br/outputs.tf b/terraform-modules/best-practices/k8s-modules/modules/ingress/www.petshop.com.br/outputs.tf similarity index 100% rename from terraform/best-practices/k8s-modules/modules/ingress/www.petshop.com.br/outputs.tf rename to terraform-modules/best-practices/k8s-modules/modules/ingress/www.petshop.com.br/outputs.tf diff --git a/terraform/best-practices/k8s-modules/modules/ingress/www.petshop.com.br/variables.tf b/terraform-modules/best-practices/k8s-modules/modules/ingress/www.petshop.com.br/variables.tf similarity index 100% rename from terraform/best-practices/k8s-modules/modules/ingress/www.petshop.com.br/variables.tf rename to terraform-modules/best-practices/k8s-modules/modules/ingress/www.petshop.com.br/variables.tf diff --git a/terraform/best-practices/k8s-modules/provider.tf b/terraform-modules/best-practices/k8s-modules/provider.tf similarity index 100% rename from terraform/best-practices/k8s-modules/provider.tf rename to terraform-modules/best-practices/k8s-modules/provider.tf diff --git a/terraform/hello-terraform/.gitignore b/terraform-modules/hello-terraform/.gitignore similarity index 100% rename from terraform/hello-terraform/.gitignore rename to terraform-modules/hello-terraform/.gitignore diff --git a/terraform/hello-terraform/main.tf b/terraform-modules/hello-terraform/main.tf similarity index 100% rename from terraform/hello-terraform/main.tf rename to terraform-modules/hello-terraform/main.tf From b9598c31fe5797f418c63b8cddcd3d51c64bcfdc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Grzegorz=20Musia=C5=82?= Date: Wed, 12 Apr 2023 06:03:46 +0200 Subject: [PATCH 073/390] BAEL-5549: chore: Make the test manual since it requires testcontainers (#13804) * BAEL-5549: chore: Make the test manual since it requires testcontainers * BAEL-5549: doc: add run instructions --- ...=> HibernateKeywordsApplicationManualTest.java} | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) rename persistence-modules/hibernate-queries/src/test/java/com/baeldung/hibernate/keywords/{HibernateKeywordsApplicationIntegrationTest.java => HibernateKeywordsApplicationManualTest.java} (78%) diff --git a/persistence-modules/hibernate-queries/src/test/java/com/baeldung/hibernate/keywords/HibernateKeywordsApplicationIntegrationTest.java b/persistence-modules/hibernate-queries/src/test/java/com/baeldung/hibernate/keywords/HibernateKeywordsApplicationManualTest.java similarity index 78% rename from persistence-modules/hibernate-queries/src/test/java/com/baeldung/hibernate/keywords/HibernateKeywordsApplicationIntegrationTest.java rename to persistence-modules/hibernate-queries/src/test/java/com/baeldung/hibernate/keywords/HibernateKeywordsApplicationManualTest.java index 4282da3de4ba..780a0fd77e8b 100644 --- a/persistence-modules/hibernate-queries/src/test/java/com/baeldung/hibernate/keywords/HibernateKeywordsApplicationIntegrationTest.java +++ b/persistence-modules/hibernate-queries/src/test/java/com/baeldung/hibernate/keywords/HibernateKeywordsApplicationManualTest.java @@ -3,8 +3,6 @@ import static java.util.UUID.randomUUID; import static org.assertj.core.api.Assertions.assertThatExceptionOfType; -import javax.persistence.PersistenceException; - import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; @@ -13,7 +11,17 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -public class HibernateKeywordsApplicationIntegrationTest { +import jakarta.persistence.PersistenceException; + +/** + * This test suite uses testcontainers library and therefore + * requires Docker installed on the local system to be able to run it. + * + * When docker is available on the local machine it can be run either by: + * - running it from your favorite IDE + * - or through `mvn test -Dtest=HibernateKeywordsApplicationManualTest` + */ +public class HibernateKeywordsApplicationManualTest { private static SessionFactory sessionFactory; private Session session; From 3a3735c182aec1497744ccaa0915f2b252cd518a Mon Sep 17 00:00:00 2001 From: Dhawal Kapil Date: Wed, 12 Apr 2023 09:47:23 +0530 Subject: [PATCH 074/390] JAVA-20220 Renamed test to proper convention --- .../com/baeldung/lambda/todo/{AppTest.java => AppUnitTest.java} | 2 +- ...oDoReaderServiceTest.java => ToDoReaderServiceUnitTest.java} | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/test/java/com/baeldung/lambda/todo/{AppTest.java => AppUnitTest.java} (98%) rename aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/test/java/com/baeldung/lambda/todo/service/{ToDoReaderServiceTest.java => ToDoReaderServiceUnitTest.java} (94%) diff --git a/aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/test/java/com/baeldung/lambda/todo/AppTest.java b/aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/test/java/com/baeldung/lambda/todo/AppUnitTest.java similarity index 98% rename from aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/test/java/com/baeldung/lambda/todo/AppTest.java rename to aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/test/java/com/baeldung/lambda/todo/AppUnitTest.java index cbdc8c22cbec..952a773f6994 100644 --- a/aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/test/java/com/baeldung/lambda/todo/AppTest.java +++ b/aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/test/java/com/baeldung/lambda/todo/AppUnitTest.java @@ -21,7 +21,7 @@ import static org.mockito.Mockito.verify; @RunWith(MockitoJUnitRunner.class) -public class AppTest { +public class AppUnitTest { @Mock(answer = Answers.RETURNS_DEEP_STUBS) private Context mockContext; diff --git a/aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/test/java/com/baeldung/lambda/todo/service/ToDoReaderServiceTest.java b/aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/test/java/com/baeldung/lambda/todo/service/ToDoReaderServiceUnitTest.java similarity index 94% rename from aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/test/java/com/baeldung/lambda/todo/service/ToDoReaderServiceTest.java rename to aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/test/java/com/baeldung/lambda/todo/service/ToDoReaderServiceUnitTest.java index 634c5257ffaa..dd5b52d0739e 100644 --- a/aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/test/java/com/baeldung/lambda/todo/service/ToDoReaderServiceTest.java +++ b/aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/test/java/com/baeldung/lambda/todo/service/ToDoReaderServiceUnitTest.java @@ -7,7 +7,7 @@ import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat; -public class ToDoReaderServiceTest { +public class ToDoReaderServiceUnitTest { @Rule public SystemOutRule systemOutRule = new SystemOutRule(); From 5f11d1ed53472a70d8d5f1d9e8a4c109192b66e1 Mon Sep 17 00:00:00 2001 From: panos-kakos <102670093+panos-kakos@users.noreply.github.com> Date: Wed, 12 Apr 2023 09:52:59 +0300 Subject: [PATCH 075/390] [JAVA-19668] Put libraries-6 module to jdk9-and-above-profile (#13809) --- libraries-6/pom.xml | 5 +++++ pom.xml | 9 ++++----- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/libraries-6/pom.xml b/libraries-6/pom.xml index 234fa1349e8e..139edab34fa8 100644 --- a/libraries-6/pom.xml +++ b/libraries-6/pom.xml @@ -63,6 +63,11 @@ commons-collections4 ${commons-collections4.version} + + com.google.guava + guava + ${guava.version} + commons-net commons-net diff --git a/pom.xml b/pom.xml index 718c2c9321ae..426921881ddf 100644 --- a/pom.xml +++ b/pom.xml @@ -488,8 +488,6 @@ jenkins-modules jhipster-modules jws - - libraries-6 @@ -664,8 +662,6 @@ jenkins-modules jhipster-modules jws - - libraries-6 @@ -891,6 +887,7 @@ libraries-2 libraries-4 libraries-5 + libraries-6 libraries-apache-commons libraries-apache-commons-collections @@ -1141,8 +1138,10 @@ ksqldb libraries + libraries-2 libraries-4 libraries-5 + libraries-6 libraries-apache-commons libraries-apache-commons-collections libraries-apache-commons-io @@ -1196,7 +1195,7 @@ xstream webrtc persistence-modules/java-mongodb - libraries-2 + messaging-modules persistence-modules/questdb From 1ffa919db6cabd865567dd8ba79c598dcc5ad64d Mon Sep 17 00:00:00 2001 From: anuragkumawat Date: Wed, 12 Apr 2023 16:31:55 +0530 Subject: [PATCH 076/390] JAVA-19116 Create new core-java-compiler sub module under core-java-modules (#13658) * JAVA-19116 Create new core-java-compiler sub module under core-java-modules --- .../core-java-compiler/README.md | 6 ++++ core-java-modules/core-java-compiler/pom.xml | 29 +++++++++++++++++++ .../main/java/com/baeldung/javac/Data.java | 0 .../src/main/java/javac-args/arguments | 0 .../src/main/java/javac-args/options | 0 .../src/main/java/javac-args/types | 0 .../src/main/java/javac-args/xlint-ops | 0 .../IllegalCharacterUnitTest.java | 0 .../src/test/resources/bom-file.txt | 0 core-java-modules/core-java/README.md | 3 +- core-java-modules/core-java/pom.xml | 6 ---- core-java-modules/pom.xml | 1 + 12 files changed, 37 insertions(+), 8 deletions(-) create mode 100644 core-java-modules/core-java-compiler/README.md create mode 100644 core-java-modules/core-java-compiler/pom.xml rename core-java-modules/{core-java => core-java-compiler}/src/main/java/com/baeldung/javac/Data.java (100%) rename core-java-modules/{core-java => core-java-compiler}/src/main/java/javac-args/arguments (100%) rename core-java-modules/{core-java => core-java-compiler}/src/main/java/javac-args/options (100%) rename core-java-modules/{core-java => core-java-compiler}/src/main/java/javac-args/types (100%) rename core-java-modules/{core-java => core-java-compiler}/src/main/java/javac-args/xlint-ops (100%) rename core-java-modules/{core-java => core-java-compiler}/src/test/java/com/baeldung/illegalcharacter/IllegalCharacterUnitTest.java (100%) rename core-java-modules/{core-java => core-java-compiler}/src/test/resources/bom-file.txt (100%) diff --git a/core-java-modules/core-java-compiler/README.md b/core-java-modules/core-java-compiler/README.md new file mode 100644 index 000000000000..2a1e60919461 --- /dev/null +++ b/core-java-modules/core-java-compiler/README.md @@ -0,0 +1,6 @@ +## Core Java Compiler + +### Relevant Articles: + +- [Compiling Java *.class Files with javac](http://www.baeldung.com/javac) +- [Illegal Character Compilation Error](https://www.baeldung.com/java-illegal-character-error) diff --git a/core-java-modules/core-java-compiler/pom.xml b/core-java-modules/core-java-compiler/pom.xml new file mode 100644 index 000000000000..8f2be3f1421a --- /dev/null +++ b/core-java-modules/core-java-compiler/pom.xml @@ -0,0 +1,29 @@ + + + 4.0.0 + core-java-compiler + 0.1.0-SNAPSHOT + core-java-compiler + jar + + + com.baeldung.core-java-modules + core-java-modules + 0.0.1-SNAPSHOT + + + + + com.google.gdata + core + ${gdata.version} + + + + + 1.47.1 + + + \ No newline at end of file diff --git a/core-java-modules/core-java/src/main/java/com/baeldung/javac/Data.java b/core-java-modules/core-java-compiler/src/main/java/com/baeldung/javac/Data.java similarity index 100% rename from core-java-modules/core-java/src/main/java/com/baeldung/javac/Data.java rename to core-java-modules/core-java-compiler/src/main/java/com/baeldung/javac/Data.java diff --git a/core-java-modules/core-java/src/main/java/javac-args/arguments b/core-java-modules/core-java-compiler/src/main/java/javac-args/arguments similarity index 100% rename from core-java-modules/core-java/src/main/java/javac-args/arguments rename to core-java-modules/core-java-compiler/src/main/java/javac-args/arguments diff --git a/core-java-modules/core-java/src/main/java/javac-args/options b/core-java-modules/core-java-compiler/src/main/java/javac-args/options similarity index 100% rename from core-java-modules/core-java/src/main/java/javac-args/options rename to core-java-modules/core-java-compiler/src/main/java/javac-args/options diff --git a/core-java-modules/core-java/src/main/java/javac-args/types b/core-java-modules/core-java-compiler/src/main/java/javac-args/types similarity index 100% rename from core-java-modules/core-java/src/main/java/javac-args/types rename to core-java-modules/core-java-compiler/src/main/java/javac-args/types diff --git a/core-java-modules/core-java/src/main/java/javac-args/xlint-ops b/core-java-modules/core-java-compiler/src/main/java/javac-args/xlint-ops similarity index 100% rename from core-java-modules/core-java/src/main/java/javac-args/xlint-ops rename to core-java-modules/core-java-compiler/src/main/java/javac-args/xlint-ops diff --git a/core-java-modules/core-java/src/test/java/com/baeldung/illegalcharacter/IllegalCharacterUnitTest.java b/core-java-modules/core-java-compiler/src/test/java/com/baeldung/illegalcharacter/IllegalCharacterUnitTest.java similarity index 100% rename from core-java-modules/core-java/src/test/java/com/baeldung/illegalcharacter/IllegalCharacterUnitTest.java rename to core-java-modules/core-java-compiler/src/test/java/com/baeldung/illegalcharacter/IllegalCharacterUnitTest.java diff --git a/core-java-modules/core-java/src/test/resources/bom-file.txt b/core-java-modules/core-java-compiler/src/test/resources/bom-file.txt similarity index 100% rename from core-java-modules/core-java/src/test/resources/bom-file.txt rename to core-java-modules/core-java-compiler/src/test/resources/bom-file.txt diff --git a/core-java-modules/core-java/README.md b/core-java-modules/core-java/README.md index 8858c58b1c73..60bd7346c695 100644 --- a/core-java-modules/core-java/README.md +++ b/core-java-modules/core-java/README.md @@ -4,6 +4,5 @@ - [Getting Started with Java Properties](http://www.baeldung.com/java-properties) - [Java Money and the Currency API](http://www.baeldung.com/java-money-and-currency) -- [Compiling Java *.class Files with javac](http://www.baeldung.com/javac) - [Merging java.util.Properties Objects](https://www.baeldung.com/java-merging-properties) -- [Illegal Character Compilation Error](https://www.baeldung.com/java-illegal-character-error) + diff --git a/core-java-modules/core-java/pom.xml b/core-java-modules/core-java/pom.xml index 9ccfc7cbd8d9..423487d5da40 100644 --- a/core-java-modules/core-java/pom.xml +++ b/core-java-modules/core-java/pom.xml @@ -63,11 +63,6 @@ commons-io ${commons-io.version} - - com.google.gdata - core - ${gdata.version} - @@ -180,7 +175,6 @@ 1.1 4.3.20.RELEASE - 1.47.1 \ No newline at end of file diff --git a/core-java-modules/pom.xml b/core-java-modules/pom.xml index 6cf4c7bee0cb..771da250d6cd 100644 --- a/core-java-modules/pom.xml +++ b/core-java-modules/pom.xml @@ -53,6 +53,7 @@ core-java-collections-maps core-java-collections-maps-2 core-java-collections-maps-3 + core-java-compiler core-java-concurrency-2 core-java-concurrency-advanced core-java-concurrency-advanced-2 From 584556bd466cf9e5b07597b995b3ef7ff0a91570 Mon Sep 17 00:00:00 2001 From: anuragkumawat Date: Wed, 12 Apr 2023 17:02:52 +0530 Subject: [PATCH 077/390] JAVA-19115 Create new core-java-properties sub module under core-java-modules (#13669) * JAVA-19115 Create new core-java-properties sub module under core-java-modules --- .../core-java-properties/README.md | 6 +++++ .../core-java-properties/pom.xml | 23 +++++++++++++++++++ .../com/baeldung/util/PropertiesLoader.java | 0 .../java/properties/PropertiesUnitTest.java | 0 .../properties/MergePropertiesUnitTest.java | 0 .../util/PropertiesLoaderUnitTest.java | 0 .../src/test/resources/app.properties | 0 .../src/test/resources/catalog | 0 .../test/resources/configuration.properties | 0 .../src/test/resources/default.properties | 0 .../src/test/resources/icons.xml | 0 core-java-modules/core-java/README.md | 3 --- core-java-modules/pom.xml | 1 + 13 files changed, 30 insertions(+), 3 deletions(-) create mode 100644 core-java-modules/core-java-properties/README.md create mode 100644 core-java-modules/core-java-properties/pom.xml rename core-java-modules/{core-java => core-java-properties}/src/main/java/com/baeldung/util/PropertiesLoader.java (100%) rename core-java-modules/{core-java => core-java-properties}/src/test/java/com/baeldung/java/properties/PropertiesUnitTest.java (100%) rename core-java-modules/{core-java => core-java-properties}/src/test/java/com/baeldung/properties/MergePropertiesUnitTest.java (100%) rename core-java-modules/{core-java => core-java-properties}/src/test/java/com/baeldung/util/PropertiesLoaderUnitTest.java (100%) rename core-java-modules/{core-java => core-java-properties}/src/test/resources/app.properties (100%) rename core-java-modules/{core-java => core-java-properties}/src/test/resources/catalog (100%) rename core-java-modules/{core-java => core-java-properties}/src/test/resources/configuration.properties (100%) rename core-java-modules/{core-java => core-java-properties}/src/test/resources/default.properties (100%) rename core-java-modules/{core-java => core-java-properties}/src/test/resources/icons.xml (100%) diff --git a/core-java-modules/core-java-properties/README.md b/core-java-modules/core-java-properties/README.md new file mode 100644 index 000000000000..73991634df93 --- /dev/null +++ b/core-java-modules/core-java-properties/README.md @@ -0,0 +1,6 @@ +## Core Java Properties + +### Relevant Articles: + +- [Getting Started with Java Properties](http://www.baeldung.com/java-properties) +- [Merging java.util.Properties Objects](https://www.baeldung.com/java-merging-properties) diff --git a/core-java-modules/core-java-properties/pom.xml b/core-java-modules/core-java-properties/pom.xml new file mode 100644 index 000000000000..9beacabdd581 --- /dev/null +++ b/core-java-modules/core-java-properties/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + core-java-properties + 0.1.0-SNAPSHOT + core-java-properties + jar + + + com.baeldung.core-java-modules + core-java-modules + 0.0.1-SNAPSHOT + + + + + + + + + \ No newline at end of file diff --git a/core-java-modules/core-java/src/main/java/com/baeldung/util/PropertiesLoader.java b/core-java-modules/core-java-properties/src/main/java/com/baeldung/util/PropertiesLoader.java similarity index 100% rename from core-java-modules/core-java/src/main/java/com/baeldung/util/PropertiesLoader.java rename to core-java-modules/core-java-properties/src/main/java/com/baeldung/util/PropertiesLoader.java diff --git a/core-java-modules/core-java/src/test/java/com/baeldung/java/properties/PropertiesUnitTest.java b/core-java-modules/core-java-properties/src/test/java/com/baeldung/java/properties/PropertiesUnitTest.java similarity index 100% rename from core-java-modules/core-java/src/test/java/com/baeldung/java/properties/PropertiesUnitTest.java rename to core-java-modules/core-java-properties/src/test/java/com/baeldung/java/properties/PropertiesUnitTest.java diff --git a/core-java-modules/core-java/src/test/java/com/baeldung/properties/MergePropertiesUnitTest.java b/core-java-modules/core-java-properties/src/test/java/com/baeldung/properties/MergePropertiesUnitTest.java similarity index 100% rename from core-java-modules/core-java/src/test/java/com/baeldung/properties/MergePropertiesUnitTest.java rename to core-java-modules/core-java-properties/src/test/java/com/baeldung/properties/MergePropertiesUnitTest.java diff --git a/core-java-modules/core-java/src/test/java/com/baeldung/util/PropertiesLoaderUnitTest.java b/core-java-modules/core-java-properties/src/test/java/com/baeldung/util/PropertiesLoaderUnitTest.java similarity index 100% rename from core-java-modules/core-java/src/test/java/com/baeldung/util/PropertiesLoaderUnitTest.java rename to core-java-modules/core-java-properties/src/test/java/com/baeldung/util/PropertiesLoaderUnitTest.java diff --git a/core-java-modules/core-java/src/test/resources/app.properties b/core-java-modules/core-java-properties/src/test/resources/app.properties similarity index 100% rename from core-java-modules/core-java/src/test/resources/app.properties rename to core-java-modules/core-java-properties/src/test/resources/app.properties diff --git a/core-java-modules/core-java/src/test/resources/catalog b/core-java-modules/core-java-properties/src/test/resources/catalog similarity index 100% rename from core-java-modules/core-java/src/test/resources/catalog rename to core-java-modules/core-java-properties/src/test/resources/catalog diff --git a/core-java-modules/core-java/src/test/resources/configuration.properties b/core-java-modules/core-java-properties/src/test/resources/configuration.properties similarity index 100% rename from core-java-modules/core-java/src/test/resources/configuration.properties rename to core-java-modules/core-java-properties/src/test/resources/configuration.properties diff --git a/core-java-modules/core-java/src/test/resources/default.properties b/core-java-modules/core-java-properties/src/test/resources/default.properties similarity index 100% rename from core-java-modules/core-java/src/test/resources/default.properties rename to core-java-modules/core-java-properties/src/test/resources/default.properties diff --git a/core-java-modules/core-java/src/test/resources/icons.xml b/core-java-modules/core-java-properties/src/test/resources/icons.xml similarity index 100% rename from core-java-modules/core-java/src/test/resources/icons.xml rename to core-java-modules/core-java-properties/src/test/resources/icons.xml diff --git a/core-java-modules/core-java/README.md b/core-java-modules/core-java/README.md index 60bd7346c695..287e510c1ecf 100644 --- a/core-java-modules/core-java/README.md +++ b/core-java-modules/core-java/README.md @@ -2,7 +2,4 @@ ### Relevant Articles: -- [Getting Started with Java Properties](http://www.baeldung.com/java-properties) - [Java Money and the Currency API](http://www.baeldung.com/java-money-and-currency) -- [Merging java.util.Properties Objects](https://www.baeldung.com/java-merging-properties) - diff --git a/core-java-modules/pom.xml b/core-java-modules/pom.xml index 771da250d6cd..fc7597e85a09 100644 --- a/core-java-modules/pom.xml +++ b/core-java-modules/pom.xml @@ -121,6 +121,7 @@ core-java-numbers-6 core-java-optional core-java-perf + core-java-properties core-java-reflection core-java-reflection-2 core-java-security-2 From 0865867c52a9517b2ea42428a43ff388219051e1 Mon Sep 17 00:00:00 2001 From: ukhan1980 <82222767+ukhan1980@users.noreply.github.com> Date: Wed, 12 Apr 2023 15:52:38 +0100 Subject: [PATCH 078/390] [BAEL-6259] add code for cancel ongoing flux (#13795) * [BAEL-6259] add code for cancel ongoing flux * [BAEL-6259] refactor class name * [BAEL-6259] fix failing test due to mocks --------- Co-authored-by: uzma --- .../cancelflux/CancelFluxUnitTest.java | 123 ++++++++++++++++++ .../DataBufferToInputStreamUnitTest.java | 5 +- 2 files changed, 127 insertions(+), 1 deletion(-) create mode 100644 spring-reactive-modules/spring-5-reactive-3/src/test/java/com/baeldung/cancelflux/CancelFluxUnitTest.java diff --git a/spring-reactive-modules/spring-5-reactive-3/src/test/java/com/baeldung/cancelflux/CancelFluxUnitTest.java b/spring-reactive-modules/spring-5-reactive-3/src/test/java/com/baeldung/cancelflux/CancelFluxUnitTest.java new file mode 100644 index 000000000000..609dbfcf73ee --- /dev/null +++ b/spring-reactive-modules/spring-5-reactive-3/src/test/java/com/baeldung/cancelflux/CancelFluxUnitTest.java @@ -0,0 +1,123 @@ +package com.baeldung.cancelflux; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; + +import java.io.PrintStream; +import java.time.Duration; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ThreadLocalRandom; +import java.util.concurrent.atomic.AtomicInteger; + +import org.junit.jupiter.api.Test; +import org.mockito.ArgumentCaptor; +import org.mockito.Mockito; + +import reactor.core.Disposable; +import reactor.core.publisher.Flux; +import reactor.core.publisher.SignalType; +import reactor.test.StepVerifier; + +public class CancelFluxUnitTest { + + @Test + void givenOngoingFlux_whentakeUntil_thenFluxCancels() { + Flux sensorData = Flux.range(1, 10); + List result = new ArrayList<>(); + + sensorData.takeUntil(reading -> reading == 8) + .subscribe(result::add); + assertThat(result).containsExactly(1, 2, 3, 4, 5, 6, 7, 8); + } + + @Test + void givenOngoingFlux_whentakeWhile_thenFluxCancels() { + List result = new ArrayList<>(); + Flux sensorData = Flux.range(1, 10) + .takeWhile(reading -> reading < 8) + .doOnNext(result::add); + + sensorData.subscribe(); + assertThat(result).containsExactly(1, 2, 3, 4, 5, 6, 7); + } + + @Test + void givenOngoingFlux_whentake_thenFluxCancels() { + Flux sensorData = Flux.range(1, Integer.MAX_VALUE); + List result = new ArrayList<>(); + + sensorData.take(2) + .subscribe(result::add); + assertThat(result).containsExactly(1, 2); + } + + @Test + void givenAnOnGoingFlux_whenTakeDurationElapsed_thenCancelsFlux() { + Flux sensorData = Flux.interval(Duration.ZERO, Duration.ofSeconds(2)) + .map(i -> i.intValue() + 10) + .take(5); + + Flux canceledByTimeout = sensorData.take(Duration.ofSeconds(3)); + + StepVerifier.create(canceledByTimeout) + .expectNext(10, 11) + .expectComplete() + .verify(); + } + + @Test + void givenAnOnGoingFlux_whenDispose_thenCancelsFluxExplicitly() throws InterruptedException { + Flux flux = Flux.range(1, 10) + .delayElements(Duration.ofSeconds(1)); + + AtomicInteger count = new AtomicInteger(0); + Disposable disposable = flux.subscribe(i -> { + System.out.println("Received: " + i); + count.incrementAndGet(); + }, e -> System.err.println("Error: " + e.getMessage())); + + Thread.sleep(5000); + System.out.println("Will Dispose The flux Next"); + disposable.dispose(); + if (disposable.isDisposed()) { + System.out.println("Flux Disposed"); + } + assertEquals(4, count.get()); + } + + @Test + void givenAFluxIsCanceled_whenDoOnCancelAndDoFinally_thenMessagePrinted() throws InterruptedException { + + List result = new ArrayList<>(); + PrintStream mockPrintStream = mock(PrintStream.class); + System.setOut(mockPrintStream); + + Flux sensorData = Flux.interval(Duration.ofMillis(100)) + .doOnCancel(() -> System.out.println("Flux Canceled")) + .doFinally(signalType -> { + if (signalType == SignalType.CANCEL) { + System.out.println("Flux Completed due to Cancellation"); + } else { + System.out.println("Flux Completed due to Completion or Error"); + } + }) + .map(i -> ThreadLocalRandom.current() + .nextInt(1, 1001)) + .doOnNext(result::add); + + Disposable subscription = sensorData.subscribe(); + + Thread.sleep(1000); + subscription.dispose(); + + ArgumentCaptor captor = ArgumentCaptor.forClass(String.class); + Mockito.verify(mockPrintStream, times(2)) + .println(captor.capture()); + + assertThat(captor.getAllValues()).contains("Flux Canceled", "Flux Completed due to Cancellation"); + } + +} diff --git a/spring-reactive-modules/spring-5-reactive-3/src/test/java/com/baeldung/databuffer/DataBufferToInputStreamUnitTest.java b/spring-reactive-modules/spring-5-reactive-3/src/test/java/com/baeldung/databuffer/DataBufferToInputStreamUnitTest.java index f30b4a8a3b90..975a2d8698dc 100644 --- a/spring-reactive-modules/spring-5-reactive-3/src/test/java/com/baeldung/databuffer/DataBufferToInputStreamUnitTest.java +++ b/spring-reactive-modules/spring-5-reactive-3/src/test/java/com/baeldung/databuffer/DataBufferToInputStreamUnitTest.java @@ -17,9 +17,12 @@ import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; +import java.net.URI; import java.util.stream.Collectors; import static org.junit.jupiter.api.Assertions.assertArrayEquals; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; class DataBufferToInputStreamUnitTest { private String getResponseStub() throws IOException { @@ -67,7 +70,7 @@ private WebClient getMockWebClient() throws IOException { @Test public void testResponseAsInputStream() throws IOException, InterruptedException { - String mockUrl = Mockito.anyString(); + String mockUrl = "http://mockurl.com"; WebClient mockWebClient = getMockWebClient(); InputStream inputStream = DataBufferToInputStream.getResponseAsInputStream(mockWebClient, mockUrl); byte[] expectedBytes = IOUtils.toByteArray(getResponseStubAsInputStream()); From f3e0d4cb43be6ef94a8dcdb2b2b7fa43bcb1c31d Mon Sep 17 00:00:00 2001 From: kpentaris Date: Wed, 12 Apr 2023 20:30:33 +0300 Subject: [PATCH 079/390] Highcpu (#13821) * Add application file for BAEL-4496 * Move BAEL-4496 code from core-java-19 to core-java-perf-2 --- core-java-modules/core-java-perf-2/README.md | 1 + core-java-modules/core-java-perf-2/pom.xml | 16 +++++++++++++++ .../com/baeldung/highcpu/Application.java | 20 +++++++++++++++++++ 3 files changed, 37 insertions(+) create mode 100644 core-java-modules/core-java-perf-2/README.md create mode 100644 core-java-modules/core-java-perf-2/pom.xml create mode 100644 core-java-modules/core-java-perf-2/src/main/java/com/baeldung/highcpu/Application.java diff --git a/core-java-modules/core-java-perf-2/README.md b/core-java-modules/core-java-perf-2/README.md new file mode 100644 index 000000000000..5616cce48b45 --- /dev/null +++ b/core-java-modules/core-java-perf-2/README.md @@ -0,0 +1 @@ +## Relevant Articles diff --git a/core-java-modules/core-java-perf-2/pom.xml b/core-java-modules/core-java-perf-2/pom.xml new file mode 100644 index 000000000000..a9408ca3858a --- /dev/null +++ b/core-java-modules/core-java-perf-2/pom.xml @@ -0,0 +1,16 @@ + + + 4.0.0 + core-java-perf-2 + core-java-perf-2 + jar + + + com.baeldung.core-java-modules + core-java-modules + 0.0.1-SNAPSHOT + + + \ No newline at end of file diff --git a/core-java-modules/core-java-perf-2/src/main/java/com/baeldung/highcpu/Application.java b/core-java-modules/core-java-perf-2/src/main/java/com/baeldung/highcpu/Application.java new file mode 100644 index 000000000000..82162406b345 --- /dev/null +++ b/core-java-modules/core-java-perf-2/src/main/java/com/baeldung/highcpu/Application.java @@ -0,0 +1,20 @@ +package com.baeldung.highcpu; + +import java.util.LinkedList; +import java.util.List; +import java.util.function.IntUnaryOperator; +import java.util.stream.IntStream; + +public class Application { + + static List generateList() { + return IntStream.range(0, 10000000).parallel().map(IntUnaryOperator.identity()).collect(LinkedList::new, List::add, List::addAll); + } + + public static void main(String[] args) { + List list = generateList(); + long start = System.nanoTime(); + int value = list.get(9500000); + System.out.printf("Found value %d in %d nanos\n", value, (System.nanoTime() - start)); + } +} From 5bd9abb3479a3156b5ec0310c4c178c960aff273 Mon Sep 17 00:00:00 2001 From: Kai Yuan Date: Thu, 13 Apr 2023 02:35:29 +0200 Subject: [PATCH 080/390] [improve-jackson-annotation] BAEL-6308 JsonFormat.Feature.ACCEPT_CASE_INSENSITIVE_PROPERTIES (#13807) --- .../com/baeldung/jackson/format/User.java | 81 ++++++++++++++++--- .../jackson/format/JsonFormatUnitTest.java | 39 ++++++--- 2 files changed, 101 insertions(+), 19 deletions(-) diff --git a/jackson-modules/jackson-annotations/src/main/java/com/baeldung/jackson/format/User.java b/jackson-modules/jackson-annotations/src/main/java/com/baeldung/jackson/format/User.java index e655deb93ba2..119c1e3ce3e5 100644 --- a/jackson-modules/jackson-annotations/src/main/java/com/baeldung/jackson/format/User.java +++ b/jackson-modules/jackson-annotations/src/main/java/com/baeldung/jackson/format/User.java @@ -1,26 +1,41 @@ package com.baeldung.jackson.format; -import java.util.Date; - -import com.baeldung.jackson.domain.Person; import com.fasterxml.jackson.annotation.JsonFormat; -/** - * @author Jay Sridhar - * @version 1.0 - */ -public class User extends Person { +import java.util.Date; + +public class User { private String firstName; private String lastName; @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd@HH:mm:ss.SSSZ") private Date createdDate; + public User() { + } + public User(String firstName, String lastName) { - super(firstName, lastName); + this.firstName = firstName; + this.lastName = lastName; this.createdDate = new Date(); } + 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 Date getCreatedDate() { return createdDate; } @@ -35,3 +50,51 @@ public Date getDateNum() { return new Date(); } } + +@JsonFormat(with = JsonFormat.Feature.ACCEPT_CASE_INSENSITIVE_PROPERTIES) +class UserIgnoreCase { + private String firstName; + private String lastName; + + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd@HH:mm:ss.SSSZ") + private Date createdDate; + + public UserIgnoreCase() { + } + + public UserIgnoreCase(String firstName, String lastName) { + this.firstName = firstName; + this.lastName = lastName; + this.createdDate = new Date(); + } + + 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 Date getCreatedDate() { + return createdDate; + } + + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd@HH:mm:ss.SSSZ", locale = "en_GB") + public Date getCurrentDate() { + return new Date(); + } + + @JsonFormat(shape = JsonFormat.Shape.NUMBER) + public Date getDateNum() { + return new Date(); + } +} \ No newline at end of file diff --git a/jackson-modules/jackson-annotations/src/test/java/com/baeldung/jackson/format/JsonFormatUnitTest.java b/jackson-modules/jackson-annotations/src/test/java/com/baeldung/jackson/format/JsonFormatUnitTest.java index cf166fdc369a..5cdc248d3bdd 100644 --- a/jackson-modules/jackson-annotations/src/test/java/com/baeldung/jackson/format/JsonFormatUnitTest.java +++ b/jackson-modules/jackson-annotations/src/test/java/com/baeldung/jackson/format/JsonFormatUnitTest.java @@ -1,24 +1,25 @@ package com.baeldung.jackson.format; -import java.util.Date; - import com.fasterxml.jackson.core.JsonProcessingException; - import com.fasterxml.jackson.databind.ObjectMapper; - +import com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException; import org.junit.Test; -import static io.restassured.path.json.JsonPath.from; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.TimeZone; +import static io.restassured.path.json.JsonPath.from; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.assertj.core.api.Assertions.from; import static org.assertj.core.data.Percentage.withPercentage; -/** - * @author Jay Sridhar - * @version 1.0 - */ public class JsonFormatUnitTest { + private static final String JSON_STRING = "{\"FIRSTNAME\":\"John\",\"lastname\":\"Smith\",\"cReAtEdDaTe\":\"2016-12-18@07:53:34.740+0000\"}"; + @Test public void whenSerializedDateFormat_thenCorrect() throws JsonProcessingException { @@ -32,6 +33,24 @@ public void whenSerializedDateFormat_thenCorrect() throws JsonProcessingExceptio // Expected to be close to current time long now = new Date().getTime(); assertThat(from(result).getLong("dateNum")).isCloseTo(now, withPercentage(10.0)); + } + @Test + public void whenDeserializeJsonStrToUserObject_thenFail() { + assertThatThrownBy(() -> new ObjectMapper().readValue(JSON_STRING, User.class)).isInstanceOf(UnrecognizedPropertyException.class); } -} + + @Test + public void whenDeserializeJsonStrToUserIgnoreCaseObject_thenSuccess() throws JsonProcessingException, ParseException { + UserIgnoreCase result = new ObjectMapper().readValue(JSON_STRING, UserIgnoreCase.class); + SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSzz"); + Date expectedDate = fmt.parse("2016-12-18T07:53:34.740+0000"); + + assertThat(result) + .isNotNull() + .returns("John", from(UserIgnoreCase::getFirstName)) + .returns("Smith", from(UserIgnoreCase::getLastName)) + .returns(expectedDate, from(UserIgnoreCase::getCreatedDate)); + } + +} \ No newline at end of file From 4ebc788fc6e2144f367366b194157daa446b2ba0 Mon Sep 17 00:00:00 2001 From: AndiCover <33127132+AndiCover@users.noreply.github.com> Date: Thu, 13 Apr 2023 02:39:41 +0200 Subject: [PATCH 081/390] BAEL-6117 Explicit Wait vs Implicit Wait in Selenium Webdriver (#13799) --- .../selenium/wait/ExplicitWaitLiveTest.java | 79 ++++++++++++++++++ .../selenium/wait/FluentWaitLiveTest.java | 83 +++++++++++++++++++ .../selenium/wait/ImplicitWaitLiveTest.java | 63 ++++++++++++++ 3 files changed, 225 insertions(+) create mode 100644 testing-modules/selenium-junit-testng/src/test/java/com/baeldung/selenium/wait/ExplicitWaitLiveTest.java create mode 100644 testing-modules/selenium-junit-testng/src/test/java/com/baeldung/selenium/wait/FluentWaitLiveTest.java create mode 100644 testing-modules/selenium-junit-testng/src/test/java/com/baeldung/selenium/wait/ImplicitWaitLiveTest.java diff --git a/testing-modules/selenium-junit-testng/src/test/java/com/baeldung/selenium/wait/ExplicitWaitLiveTest.java b/testing-modules/selenium-junit-testng/src/test/java/com/baeldung/selenium/wait/ExplicitWaitLiveTest.java new file mode 100644 index 000000000000..65943fbf5e45 --- /dev/null +++ b/testing-modules/selenium-junit-testng/src/test/java/com/baeldung/selenium/wait/ExplicitWaitLiveTest.java @@ -0,0 +1,79 @@ +package com.baeldung.selenium.wait; + +import io.github.bonigarcia.wdm.WebDriverManager; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.openqa.selenium.By; +import org.openqa.selenium.ElementNotInteractableException; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.chrome.ChromeDriver; +import org.openqa.selenium.chrome.ChromeOptions; +import org.openqa.selenium.support.ui.ExpectedConditions; +import org.openqa.selenium.support.ui.WebDriverWait; + +import java.time.Duration; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + +final class ExplicitWaitLiveTest { + + private static WebDriver driver; + private static WebDriverWait wait; + private static final int TIMEOUT = 10; + + private static final By LOCATOR_ABOUT = By.xpath("//a[starts-with(., 'About')]"); + private static final By LOCATOR_ABOUT_BAELDUNG = By.xpath("//h3[normalize-space()='About Baeldung']"); + private static final By LOCATOR_ABOUT_HEADER = By.xpath("//h1"); + + private static void setupChromeDriver() { + WebDriverManager.chromedriver().setup(); + final ChromeOptions options = new ChromeOptions(); + options.addArguments("--remote-allow-origins=*"); + driver = new ChromeDriver(options); + options(); + } + + private static void options() { + driver.manage().window().maximize(); + } + + @BeforeEach + public void init() { + setupChromeDriver(); + wait = new WebDriverWait(driver, Duration.ofSeconds(TIMEOUT)); + } + + @Test + void givenPage_whenNavigatingWithoutExplicitWait_thenElementNotInteractable() { + driver.navigate().to("https://www.baeldung.com/"); + + driver.findElement(LOCATOR_ABOUT).click(); + + assertThrows(ElementNotInteractableException.class, () -> driver.findElement(LOCATOR_ABOUT_BAELDUNG).click()); + } + + @Test + void givenPage_whenNavigatingWithExplicitWait_thenOK() { + final String expected = "About Baeldung"; + driver.navigate().to("https://www.baeldung.com/"); + + driver.findElement(LOCATOR_ABOUT).click(); + wait.until(ExpectedConditions.visibilityOfElementLocated(LOCATOR_ABOUT_BAELDUNG)); + + driver.findElement(LOCATOR_ABOUT_BAELDUNG).click(); + wait.until(ExpectedConditions.visibilityOfElementLocated(LOCATOR_ABOUT_HEADER)); + + final String actual = driver.findElement(LOCATOR_ABOUT_HEADER).getText(); + assertEquals(expected, actual); + } + + @AfterEach + void teardown() { + if (driver != null) { + driver.quit(); + driver = null; + } + } +} \ No newline at end of file diff --git a/testing-modules/selenium-junit-testng/src/test/java/com/baeldung/selenium/wait/FluentWaitLiveTest.java b/testing-modules/selenium-junit-testng/src/test/java/com/baeldung/selenium/wait/FluentWaitLiveTest.java new file mode 100644 index 000000000000..c41e5619acb7 --- /dev/null +++ b/testing-modules/selenium-junit-testng/src/test/java/com/baeldung/selenium/wait/FluentWaitLiveTest.java @@ -0,0 +1,83 @@ +package com.baeldung.selenium.wait; + +import io.github.bonigarcia.wdm.WebDriverManager; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.openqa.selenium.By; +import org.openqa.selenium.ElementNotInteractableException; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.chrome.ChromeDriver; +import org.openqa.selenium.chrome.ChromeOptions; +import org.openqa.selenium.support.ui.ExpectedConditions; +import org.openqa.selenium.support.ui.FluentWait; +import org.openqa.selenium.support.ui.Wait; + +import java.time.Duration; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + +final class FluentWaitLiveTest { + + private static WebDriver driver; + private static Wait wait; + private static final int TIMEOUT = 10; + private static final int POLL_FREQUENCY = 250; + + private static final By LOCATOR_ABOUT = By.xpath("//a[starts-with(., 'About')]"); + private static final By LOCATOR_ABOUT_BAELDUNG = By.xpath("//h3[normalize-space()='About Baeldung']"); + private static final By LOCATOR_ABOUT_HEADER = By.xpath("//h1"); + + private static void setupChromeDriver() { + WebDriverManager.chromedriver().setup(); + final ChromeOptions options = new ChromeOptions(); + options.addArguments("--remote-allow-origins=*"); + driver = new ChromeDriver(options); + options(); + } + + private static void options() { + driver.manage().window().maximize(); + } + + @BeforeEach + public void init() { + setupChromeDriver(); + wait = new FluentWait<>(driver) + .withTimeout(Duration.ofSeconds(TIMEOUT)) + .pollingEvery(Duration.ofMillis(POLL_FREQUENCY)); + } + + @Test + void givenPage_whenNavigatingWithoutFluentWait_thenElementNotInteractable() { + driver.navigate().to("https://www.baeldung.com/"); + + driver.findElement(LOCATOR_ABOUT).click(); + + assertThrows(ElementNotInteractableException.class, () -> driver.findElement(LOCATOR_ABOUT_BAELDUNG).click()); + } + + @Test + void givenPage_whenNavigatingWithFluentWait_thenOK() { + final String expected = "About Baeldung"; + driver.navigate().to("https://www.baeldung.com/"); + + driver.findElement(LOCATOR_ABOUT).click(); + wait.until(ExpectedConditions.visibilityOfElementLocated(LOCATOR_ABOUT_BAELDUNG)); + + driver.findElement(LOCATOR_ABOUT_BAELDUNG).click(); + wait.until(ExpectedConditions.visibilityOfElementLocated(LOCATOR_ABOUT_HEADER)); + + final String actual = driver.findElement(LOCATOR_ABOUT_HEADER).getText(); + assertEquals(expected, actual); + } + + @AfterEach + void teardown() { + if (driver != null) { + driver.quit(); + driver = null; + } + } +} \ No newline at end of file diff --git a/testing-modules/selenium-junit-testng/src/test/java/com/baeldung/selenium/wait/ImplicitWaitLiveTest.java b/testing-modules/selenium-junit-testng/src/test/java/com/baeldung/selenium/wait/ImplicitWaitLiveTest.java new file mode 100644 index 000000000000..86c401e13a7b --- /dev/null +++ b/testing-modules/selenium-junit-testng/src/test/java/com/baeldung/selenium/wait/ImplicitWaitLiveTest.java @@ -0,0 +1,63 @@ +package com.baeldung.selenium.wait; + + +import io.github.bonigarcia.wdm.WebDriverManager; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.chrome.ChromeDriver; +import org.openqa.selenium.chrome.ChromeOptions; + +import java.time.Duration; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +final class ImplicitWaitLiveTest { + + private static WebDriver driver; + private static final int TIMEOUT = 10; + + private static final By LOCATOR_ABOUT = By.xpath("//a[starts-with(., 'About')]"); + private static final By LOCATOR_ABOUT_BAELDUNG = By.xpath("//h3[normalize-space()='About Baeldung']"); + private static final By LOCATOR_ABOUT_HEADER = By.xpath("//h1"); + + private static void setupChromeDriver() { + WebDriverManager.chromedriver().setup(); + final ChromeOptions options = new ChromeOptions(); + options.addArguments("--remote-allow-origins=*"); + driver = new ChromeDriver(options); + options(); + } + + private static void options() { + driver.manage().window().maximize(); + driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(TIMEOUT)); + } + + @BeforeEach + public void init() { + setupChromeDriver(); + } + + @Test + void givenPage_whenNavigatingWithImplicitWait_ThenOK() { + final String expected = "About Baeldung"; + driver.navigate().to("https://www.baeldung.com/"); + + driver.findElement(LOCATOR_ABOUT).click(); + driver.findElement(LOCATOR_ABOUT_BAELDUNG).click(); + + final String actual = driver.findElement(LOCATOR_ABOUT_HEADER).getText(); + assertEquals(expected, actual); + } + + @AfterEach + void teardown() { + if (driver != null) { + driver.quit(); + driver = null; + } + } +} \ No newline at end of file From f20a24165207c85e44516b599c0f46037e3d5e30 Mon Sep 17 00:00:00 2001 From: Alejamdro Date: Thu, 13 Apr 2023 00:01:45 -0300 Subject: [PATCH 082/390] BAEL-6078 - Convert an Integer Value into 2-Digit Hex Value in Java (#13682) --- .../core-java-numbers-6/README.md | 2 + core-java-modules/core-java-numbers-6/pom.xml | 18 +++++ .../baeldung/integertohex/IntegerToHex.java | 16 ++++ .../integertohex/IntegerToHexUnitTest.java | 75 +++++++++++++++++++ 4 files changed, 111 insertions(+) create mode 100644 core-java-modules/core-java-numbers-6/src/main/java/com/baeldung/integertohex/IntegerToHex.java create mode 100644 core-java-modules/core-java-numbers-6/src/test/java/com/baeldung/integertohex/IntegerToHexUnitTest.java diff --git a/core-java-modules/core-java-numbers-6/README.md b/core-java-modules/core-java-numbers-6/README.md index 2c0b0554c453..4856d86052c2 100644 --- a/core-java-modules/core-java-numbers-6/README.md +++ b/core-java-modules/core-java-numbers-6/README.md @@ -1,2 +1,4 @@ ### Relevant Articles: - [Java Program to Calculate Pi](https://www.baeldung.com/java-monte-carlo-compute-pi) + +- More articles: [[<-- prev]](../core-java-numbers-5) \ No newline at end of file diff --git a/core-java-modules/core-java-numbers-6/pom.xml b/core-java-modules/core-java-numbers-6/pom.xml index 0f78f41b9fae..531f1293d182 100644 --- a/core-java-modules/core-java-numbers-6/pom.xml +++ b/core-java-modules/core-java-numbers-6/pom.xml @@ -12,6 +12,21 @@ 0.0.1-SNAPSHOT + + + org.junit.jupiter + junit-jupiter-engine + ${junit-jupiter.version} + test + + + commons-codec + commons-codec + ${commons-codec} + test + + + core-java-numbers-6 @@ -22,4 +37,7 @@ + + 1.15 + \ No newline at end of file diff --git a/core-java-modules/core-java-numbers-6/src/main/java/com/baeldung/integertohex/IntegerToHex.java b/core-java-modules/core-java-numbers-6/src/main/java/com/baeldung/integertohex/IntegerToHex.java new file mode 100644 index 000000000000..9f75b9a145dd --- /dev/null +++ b/core-java-modules/core-java-numbers-6/src/main/java/com/baeldung/integertohex/IntegerToHex.java @@ -0,0 +1,16 @@ +package com.baeldung.integertohex; + +class IntegerToHex { + static final String digits = "0123456789ABCDEF"; + static String integerToHex(int input) { + if (input <= 0) + return "0"; + StringBuilder hex = new StringBuilder(); + while (input > 0) { + int digit = input % 16; + hex.insert(0, digits.charAt(digit)); + input = input / 16; + } + return hex.toString(); + } +} diff --git a/core-java-modules/core-java-numbers-6/src/test/java/com/baeldung/integertohex/IntegerToHexUnitTest.java b/core-java-modules/core-java-numbers-6/src/test/java/com/baeldung/integertohex/IntegerToHexUnitTest.java new file mode 100644 index 000000000000..6073c2d3474f --- /dev/null +++ b/core-java-modules/core-java-numbers-6/src/test/java/com/baeldung/integertohex/IntegerToHexUnitTest.java @@ -0,0 +1,75 @@ +package com.baeldung.integertohex; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.apache.commons.codec.binary.Hex; +import org.junit.jupiter.api.Test; + +class IntegerToHexUnitTest { + + @Test + void givenIntegerValue_whenUseRawMethod_thenWillGetHexValue() { + String result = IntegerToHex.integerToHex(1055); + assertEquals("41F", result); + } + + @Test + void givenIntegerNegativeValue_whenUseRawMethod_thenZeroValue() { + String result = IntegerToHex.integerToHex(-1055); + assertEquals("0", result); + } + + @Test + void givenIntegerPositiveValue_whenUseStringFormat_thenWillGetHexValue() { + String result = String.format("%02x", 255); + assertEquals("ff", result); + } + + @Test + void givenIntegerPositiveValue_whenUseStringFormat_thenWillGetHexValueWithLeftZeros() { + String result = String.format("%04x", 255); + assertEquals("00ff", result); + } + + @Test + void givenIntegerPositiveValue_whenUseStringFormat_thenWillGetHexValueWithLeftZerosAndUpperLetter() { + String result = String.format("%04X", 255); + assertEquals("00FF", result); + } + + @Test + void givenIntegerValue_whenUseIntegerToHexString_thenWillGetHexValue() { + String result = Integer.toHexString(1000); + assertEquals("3e8", result); + } + + @Test + void givenIntegerValue_whenUseLongToHexString_thenWillGetHexValue() { + String result = Long.toHexString(255L); + assertEquals("ff", result); + } + + @Test + public void givenNegativeIntegerValue_whenUseIntegerToString_thenWillGetHexValue() { + String result = Integer.toString(-1458, 16); + assertEquals("-5b2", result); + } + + @Test + public void givenIntegerValue_whenUseIntegerToString_thenWillGetHexValue() { + String result = Integer.toString(1458, 16); + assertEquals("5b2", result); + } + + @Test + public void givenLongValue_whenUseLongToString_thenWillGetHexValue() { + String result = Long.toString(158, 16); + assertEquals("9e", result); + } + + @Test + public void givenIntegerValue_whenUseApacheCommons_thenWillGetHexSignedValue() { + String result = Hex.encodeHexString(new byte[] { (byte) 254 }); + assertEquals("fe", result); + } +} \ No newline at end of file From b02802794fda29870a52682f612b8873ca2c3443 Mon Sep 17 00:00:00 2001 From: Dhawal Kapil Date: Thu, 13 Apr 2023 08:32:26 +0530 Subject: [PATCH 083/390] Revert "JAVA-19475: Changes made for uncommenting feign module in the root pom.xml (#13823)" (#13831) This reverts commit a99b77cc7f92e4aa0a8f498bccdf0b43869ff062. --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 426921881ddf..0800f22937d7 100644 --- a/pom.xml +++ b/pom.xml @@ -860,7 +860,7 @@ disruptor dozer dubbo - feign + google-cloud graphql-modules grpc @@ -1113,7 +1113,7 @@ dozer dubbo - feign + google-cloud graphql-modules grpc From f773e27859aaf997c398a50a4af4c3c0947b0ca2 Mon Sep 17 00:00:00 2001 From: ACHRAF TAITAI <43656331+achraftt@users.noreply.github.com> Date: Thu, 13 Apr 2023 14:11:17 +0200 Subject: [PATCH 084/390] A Guide to @JsonIncludeProperties Annotation in Jackson (#13808) --- .../jackson/annotation/BeanWithInclude.java | 18 ++++++++++++++++++ .../annotation/JacksonAnnotationUnitTest.java | 9 +++++++++ 2 files changed, 27 insertions(+) create mode 100644 jackson-simple/src/main/java/com/baeldung/jackson/annotation/BeanWithInclude.java diff --git a/jackson-simple/src/main/java/com/baeldung/jackson/annotation/BeanWithInclude.java b/jackson-simple/src/main/java/com/baeldung/jackson/annotation/BeanWithInclude.java new file mode 100644 index 000000000000..18130fc9f21a --- /dev/null +++ b/jackson-simple/src/main/java/com/baeldung/jackson/annotation/BeanWithInclude.java @@ -0,0 +1,18 @@ +package com.baeldung.jackson.annotation; + +import com.fasterxml.jackson.annotation.JsonIncludeProperties; + +@JsonIncludeProperties({ "name" }) +public class BeanWithInclude { + public int id; + public String name; + + public BeanWithInclude() { + + } + + public BeanWithInclude(final int id, final String name) { + this.id = id; + this.name = name; + } +} diff --git a/jackson-simple/src/test/java/com/baeldung/jackson/annotation/JacksonAnnotationUnitTest.java b/jackson-simple/src/test/java/com/baeldung/jackson/annotation/JacksonAnnotationUnitTest.java index 57ef2318259f..1a6c7b128671 100644 --- a/jackson-simple/src/test/java/com/baeldung/jackson/annotation/JacksonAnnotationUnitTest.java +++ b/jackson-simple/src/test/java/com/baeldung/jackson/annotation/JacksonAnnotationUnitTest.java @@ -213,6 +213,15 @@ public void whenSerializingUsingJsonIgnoreProperties_thenCorrect() throws JsonPr assertThat(result, not(containsString("id"))); } + @Test + public void whenSerializingUsingJsonIncludeProperties_thenCorrect() throws JsonProcessingException { + final BeanWithInclude bean = new BeanWithInclude(1, "My bean"); + final String result = new ObjectMapper().writeValueAsString(bean); + assertThat(result, containsString("My bean")); + assertThat(result, not(containsString("id"))); + assertThat(result, containsString("name")); + } + @Test public void whenSerializingUsingJsonIgnore_thenCorrect() throws JsonProcessingException { final BeanWithIgnore bean = new BeanWithIgnore(1, "My bean"); From 602d57f4ecdcd6e731054b5a55755370314bee4f Mon Sep 17 00:00:00 2001 From: timis1 <12120641+timis1@users.noreply.github.com> Date: Thu, 13 Apr 2023 16:18:11 +0300 Subject: [PATCH 085/390] =?UTF-8?q?JAVA-18600=20Update=20"Guide=20to=20@Co?= =?UTF-8?q?nfigurationProperties=20in=20Spring=20Boot"=20=E2=80=A6=20(#136?= =?UTF-8?q?70)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * JAVA-18600 Update "Guide to @ConfigurationProperties in Spring Boot" article --------- Co-authored-by: timis1 --- spring-boot-modules/pom.xml | 8 +-- .../spring-boot-properties-2/pom.xml | 16 ++++-- .../baeldung/properties/value/ValuesApp.java | 3 +- .../value/defaults/ValuesWithDefaultsApp.java | 9 ++-- .../spring-boot-properties-3/pom.xml | 12 +++-- .../log/EnvironmentPropertiesPrinter.java | 2 +- .../pom.xml | 12 ++--- .../spring-boot-properties/pom.xml | 9 ++-- .../ConfigProperties.java | 8 +-- .../ImmutableCredentials.java | 2 - .../BuildInfoServiceIntegrationTest.java | 3 -- .../BuildPropertiesUnitTest.java | 2 +- .../reloading/PropertiesReloadManualTest.java | 49 +++++++++---------- 13 files changed, 73 insertions(+), 62 deletions(-) diff --git a/spring-boot-modules/pom.xml b/spring-boot-modules/pom.xml index 83b935f845cc..1de19fc867f4 100644 --- a/spring-boot-modules/pom.xml +++ b/spring-boot-modules/pom.xml @@ -63,10 +63,6 @@ spring-boot-nashorn spring-boot-parent spring-boot-performance - spring-boot-properties - spring-boot-properties-2 - spring-boot-properties-3 - spring-boot-properties-migrator-demo spring-boot-property-exp spring-boot-request-params spring-boot-runtime @@ -94,6 +90,10 @@ spring-boot-3-observation spring-boot-3-test-pitfalls spring-boot-resilience4j + spring-boot-properties + spring-boot-properties-2 + spring-boot-properties-3 + spring-boot-properties-migrator-demo diff --git a/spring-boot-modules/spring-boot-properties-2/pom.xml b/spring-boot-modules/spring-boot-properties-2/pom.xml index 442cb24c7abb..4b1daca34d8e 100644 --- a/spring-boot-modules/spring-boot-properties-2/pom.xml +++ b/spring-boot-modules/spring-boot-properties-2/pom.xml @@ -10,9 +10,10 @@ Spring Boot Properties Module - com.baeldung.spring-boot-modules - spring-boot-modules - 1.0.0-SNAPSHOT + com.baeldung + parent-boot-3 + 0.0.1-SNAPSHOT + ../../parent-boot-3 @@ -24,6 +25,15 @@ org.springframework.boot spring-boot-starter-web + + commons-lang + commons-lang + 2.6 + + + com.baeldung.properties.yaml.YamlApplication + + \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-properties-2/src/main/java/com/baeldung/properties/value/ValuesApp.java b/spring-boot-modules/spring-boot-properties-2/src/main/java/com/baeldung/properties/value/ValuesApp.java index 67547199a689..282ce4658e8e 100644 --- a/spring-boot-modules/spring-boot-properties-2/src/main/java/com/baeldung/properties/value/ValuesApp.java +++ b/spring-boot-modules/spring-boot-properties-2/src/main/java/com/baeldung/properties/value/ValuesApp.java @@ -7,11 +7,12 @@ import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; -import javax.annotation.PostConstruct; import java.util.Arrays; import java.util.List; import java.util.Map; +import jakarta.annotation.PostConstruct; + @Configuration @PropertySource(name = "myProperties", value = "values.properties") public class ValuesApp { diff --git a/spring-boot-modules/spring-boot-properties-2/src/main/java/com/baeldung/properties/value/defaults/ValuesWithDefaultsApp.java b/spring-boot-modules/spring-boot-properties-2/src/main/java/com/baeldung/properties/value/defaults/ValuesWithDefaultsApp.java index 2a2b535be7a6..f1720d2fb3d4 100644 --- a/spring-boot-modules/spring-boot-properties-2/src/main/java/com/baeldung/properties/value/defaults/ValuesWithDefaultsApp.java +++ b/spring-boot-modules/spring-boot-properties-2/src/main/java/com/baeldung/properties/value/defaults/ValuesWithDefaultsApp.java @@ -1,6 +1,6 @@ package com.baeldung.properties.value.defaults; -import org.apache.commons.lang3.ArrayUtils; +import org.apache.commons.lang.ArrayUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; @@ -8,10 +8,11 @@ import org.springframework.context.annotation.PropertySource; import org.springframework.util.Assert; -import javax.annotation.PostConstruct; import java.util.Arrays; import java.util.List; +import jakarta.annotation.PostConstruct; + /** * Demonstrates setting defaults for @Value annotation. Note that there are no properties * defined in the specified property source. We also assume that the user here @@ -60,10 +61,10 @@ public void afterInitialize() { // arrays List stringListValues = Arrays.asList("one", "two", "three"); - Assert.isTrue(Arrays.asList(stringArrayWithDefaults).containsAll(stringListValues), "unexpected value for stringArrayWithDefaults"); + Assert.isTrue(Arrays.asList(stringArrayWithDefaults).containsAll(stringListValues), "unexpected value for stringArrayWithDefaults"); List intListValues = Arrays.asList(1, 2, 3); - Assert.isTrue(Arrays.asList(ArrayUtils.toObject(intArrayWithDefaults)).containsAll(intListValues), "unexpected value for intArrayWithDefaults"); + Assert.isTrue(Arrays.asList(ArrayUtils.toObject(intArrayWithDefaults)).containsAll(intListValues), "unexpected value for intArrayWithDefaults"); // SpEL Assert.isTrue(spelWithDefaultValue.equals("my default system property value"), "unexpected value for spelWithDefaultValue"); diff --git a/spring-boot-modules/spring-boot-properties-3/pom.xml b/spring-boot-modules/spring-boot-properties-3/pom.xml index 3de85c7175e6..ed6e08add0bf 100644 --- a/spring-boot-modules/spring-boot-properties-3/pom.xml +++ b/spring-boot-modules/spring-boot-properties-3/pom.xml @@ -9,9 +9,10 @@ Spring Boot Properties Module - com.baeldung.spring-boot-modules - spring-boot-modules - 1.0.0-SNAPSHOT + com.baeldung + parent-boot-3 + 0.0.1-SNAPSHOT + ../../parent-boot-3 @@ -31,7 +32,6 @@ org.springframework.boot spring-boot-starter-web - RELEASE @@ -44,4 +44,8 @@ + + com.baeldung.boot.properties.DemoApplication + + \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-properties-3/src/main/java/com/baeldung/properties/log/EnvironmentPropertiesPrinter.java b/spring-boot-modules/spring-boot-properties-3/src/main/java/com/baeldung/properties/log/EnvironmentPropertiesPrinter.java index 321593b31bc8..26f6867296f4 100644 --- a/spring-boot-modules/spring-boot-properties-3/src/main/java/com/baeldung/properties/log/EnvironmentPropertiesPrinter.java +++ b/spring-boot-modules/spring-boot-properties-3/src/main/java/com/baeldung/properties/log/EnvironmentPropertiesPrinter.java @@ -5,7 +5,7 @@ import org.springframework.core.env.Environment; import org.springframework.stereotype.Component; -import javax.annotation.PostConstruct; +import jakarta.annotation.PostConstruct; @Component public class EnvironmentPropertiesPrinter { diff --git a/spring-boot-modules/spring-boot-properties-migrator-demo/pom.xml b/spring-boot-modules/spring-boot-properties-migrator-demo/pom.xml index 95dc06b155c3..21ed0f59f4f1 100644 --- a/spring-boot-modules/spring-boot-properties-migrator-demo/pom.xml +++ b/spring-boot-modules/spring-boot-properties-migrator-demo/pom.xml @@ -7,10 +7,10 @@ 1.0-SNAPSHOT - com.baeldung.spring-boot-modules - spring-boot-modules - 1.0.0-SNAPSHOT - ../pom.xml + com.baeldung + parent-boot-3 + 0.0.1-SNAPSHOT + ../../parent-boot-3 @@ -49,8 +49,8 @@ - 8 - 8 + 17 + 17 \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-properties/pom.xml b/spring-boot-modules/spring-boot-properties/pom.xml index 0d076581b7b1..4ad5aeed1db7 100644 --- a/spring-boot-modules/spring-boot-properties/pom.xml +++ b/spring-boot-modules/spring-boot-properties/pom.xml @@ -10,9 +10,10 @@ Spring Boot Properties Module - com.baeldung.spring-boot-modules - spring-boot-modules - 1.0.0-SNAPSHOT + com.baeldung + parent-boot-3 + 0.0.1-SNAPSHOT + ../../parent-boot-3 @@ -141,7 +142,7 @@ - 2021.0.3 + 2022.0.1 1.10 @ diff --git a/spring-boot-modules/spring-boot-properties/src/main/java/com/baeldung/configurationproperties/ConfigProperties.java b/spring-boot-modules/spring-boot-properties/src/main/java/com/baeldung/configurationproperties/ConfigProperties.java index 47df7848851f..faf567839814 100644 --- a/spring-boot-modules/spring-boot-properties/src/main/java/com/baeldung/configurationproperties/ConfigProperties.java +++ b/spring-boot-modules/spring-boot-properties/src/main/java/com/baeldung/configurationproperties/ConfigProperties.java @@ -3,10 +3,10 @@ import java.util.List; import java.util.Map; -import javax.validation.constraints.Max; -import javax.validation.constraints.Min; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.Pattern; +import jakarta.validation.constraints.Max; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Pattern; import org.hibernate.validator.constraints.Length; import org.springframework.boot.context.properties.ConfigurationProperties; diff --git a/spring-boot-modules/spring-boot-properties/src/main/java/com/baeldung/configurationproperties/ImmutableCredentials.java b/spring-boot-modules/spring-boot-properties/src/main/java/com/baeldung/configurationproperties/ImmutableCredentials.java index a58e4143e50f..72c45afbb24f 100644 --- a/spring-boot-modules/spring-boot-properties/src/main/java/com/baeldung/configurationproperties/ImmutableCredentials.java +++ b/spring-boot-modules/spring-boot-properties/src/main/java/com/baeldung/configurationproperties/ImmutableCredentials.java @@ -1,10 +1,8 @@ package com.baeldung.configurationproperties; import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.boot.context.properties.ConstructorBinding; @ConfigurationProperties(prefix = "mail.credentials") -@ConstructorBinding public class ImmutableCredentials { private final String authMethod; diff --git a/spring-boot-modules/spring-boot-properties/src/test/java/com/baeldung/buildproperties/BuildInfoServiceIntegrationTest.java b/spring-boot-modules/spring-boot-properties/src/test/java/com/baeldung/buildproperties/BuildInfoServiceIntegrationTest.java index 2cb27e184448..9ed27f412ca1 100644 --- a/spring-boot-modules/spring-boot-properties/src/test/java/com/baeldung/buildproperties/BuildInfoServiceIntegrationTest.java +++ b/spring-boot-modules/spring-boot-properties/src/test/java/com/baeldung/buildproperties/BuildInfoServiceIntegrationTest.java @@ -4,12 +4,9 @@ import org.hamcrest.Matchers; import org.junit.jupiter.api.Test; -import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; -@RunWith(SpringRunner.class) @SpringBootTest(classes = Application.class) class BuildInfoServiceIntegrationTest { diff --git a/spring-boot-modules/spring-boot-properties/src/test/java/com/baeldung/buildproperties/BuildPropertiesUnitTest.java b/spring-boot-modules/spring-boot-properties/src/test/java/com/baeldung/buildproperties/BuildPropertiesUnitTest.java index cf9b9336e625..bb8ec78cc15b 100644 --- a/spring-boot-modules/spring-boot-properties/src/test/java/com/baeldung/buildproperties/BuildPropertiesUnitTest.java +++ b/spring-boot-modules/spring-boot-properties/src/test/java/com/baeldung/buildproperties/BuildPropertiesUnitTest.java @@ -17,7 +17,7 @@ public class BuildPropertiesUnitTest { @Test void givenBuildPropertiesBean_WhenFetchDefaultBuildProperties_ThenGetValidValues() { Assertions.assertEquals("spring-boot-properties", buildProperties.getArtifact()); - Assertions.assertEquals("com.baeldung.spring-boot-modules", buildProperties.getGroup()); + Assertions.assertEquals("com.baeldung", buildProperties.getGroup()); Assertions.assertEquals("0.0.1-SNAPSHOT", buildProperties.getVersion()); } diff --git a/spring-boot-modules/spring-boot-properties/src/test/java/com/baeldung/properties/reloading/PropertiesReloadManualTest.java b/spring-boot-modules/spring-boot-properties/src/test/java/com/baeldung/properties/reloading/PropertiesReloadManualTest.java index 88e22af4ba73..ecb547a0a060 100644 --- a/spring-boot-modules/spring-boot-properties/src/test/java/com/baeldung/properties/reloading/PropertiesReloadManualTest.java +++ b/spring-boot-modules/spring-boot-properties/src/test/java/com/baeldung/properties/reloading/PropertiesReloadManualTest.java @@ -1,28 +1,27 @@ package com.baeldung.properties.reloading; +import static org.junit.jupiter.api.Assertions.assertEquals; + import com.baeldung.properties.reloading.beans.ConfigurationPropertiesRefreshConfigBean; import com.baeldung.properties.reloading.beans.EnvironmentConfigBean; import com.baeldung.properties.reloading.beans.PropertiesConfigBean; import com.baeldung.properties.reloading.beans.ValueRefreshConfigBean; import java.io.FileOutputStream; -import org.junit.After; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; + +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.http.MediaType; import org.springframework.mock.web.MockHttpServletResponse; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.MvcResult; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; import org.springframework.test.web.servlet.setup.MockMvcBuilders; import org.springframework.web.context.WebApplicationContext; -@RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest(classes = SpringBootPropertiesTestApplication.class) public class PropertiesReloadManualTest { @@ -50,7 +49,7 @@ public class PropertiesReloadManualTest { ValueRefreshConfigBean singletonValueRefreshConfigBean; - @Before + @BeforeEach public void setUp() throws Exception { mvc = MockMvcBuilders .webAppContextSetup(webApplicationContext) @@ -61,7 +60,7 @@ public void setUp() throws Exception { callRefresh(); } - @After + @AfterEach public void tearDown() throws Exception { createConfig("extra.properties", "application.theme.color", "blue"); createConfig("extra2.properties", "application.theme.background", "red"); @@ -69,76 +68,76 @@ public void tearDown() throws Exception { @Test public void givenEnvironmentReader_whenColorChanged_thenExpectChangeValue() throws Exception { - Assert.assertEquals("blue", environmentConfigBean.getColor()); + assertEquals("blue", environmentConfigBean.getColor()); createConfig("extra.properties", "application.theme.color", "red"); Thread.sleep(refreshDelay); - Assert.assertEquals("red", environmentConfigBean.getColor()); + assertEquals("red", environmentConfigBean.getColor()); } @Test public void givenEnvironmentReader_whenBackgroundChanged_thenExpectChangeValue() throws Exception { - Assert.assertEquals("red", environmentConfigBean.getBackgroundColor()); + assertEquals("red", environmentConfigBean.getBackgroundColor()); createConfig("extra2.properties", "application.theme.background", "blue"); Thread.sleep(refreshDelay); - Assert.assertEquals("blue", environmentConfigBean.getBackgroundColor()); + assertEquals("blue", environmentConfigBean.getBackgroundColor()); } @Test public void givenPropertiesReader_whenColorChanged_thenExpectChangeValue() throws Exception { - Assert.assertEquals("blue", propertiesConfigBean.getColor()); + assertEquals("blue", propertiesConfigBean.getColor()); createConfig("extra.properties", "application.theme.color", "red"); Thread.sleep(refreshDelay); - Assert.assertEquals("red", propertiesConfigBean.getColor()); + assertEquals("red", propertiesConfigBean.getColor()); } @Test public void givenRefreshScopedValueReader_whenColorChangedAndRefreshCalled_thenExpectChangeValue() throws Exception { - Assert.assertEquals("blue", valueRefreshConfigBean.getColor()); + assertEquals("blue", valueRefreshConfigBean.getColor()); createConfig("extra.properties", "application.theme.color", "red"); Thread.sleep(refreshDelay); - Assert.assertEquals("blue", valueRefreshConfigBean.getColor()); + assertEquals("blue", valueRefreshConfigBean.getColor()); callRefresh(); - Assert.assertEquals("red", valueRefreshConfigBean.getColor()); + assertEquals("red", valueRefreshConfigBean.getColor()); } @Test public void givenSingletonRefreshScopedValueReader_whenColorChangedAndRefreshCalled_thenExpectOldValue() throws Exception { - Assert.assertEquals("blue", singletonValueRefreshConfigBean.getColor()); + assertEquals("blue", singletonValueRefreshConfigBean.getColor()); createConfig("extra.properties", "application.theme.color", "red"); Thread.sleep(refreshDelay); - Assert.assertEquals("blue", singletonValueRefreshConfigBean.getColor()); + assertEquals("blue", singletonValueRefreshConfigBean.getColor()); callRefresh(); - Assert.assertEquals("blue", singletonValueRefreshConfigBean.getColor()); + assertEquals("blue", singletonValueRefreshConfigBean.getColor()); } @Test public void givenRefreshScopedConfigurationPropertiesReader_whenColorChangedAndRefreshCalled_thenExpectChangeValue() throws Exception { - Assert.assertEquals("blue", configurationPropertiesRefreshConfigBean.getColor()); + assertEquals("blue", configurationPropertiesRefreshConfigBean.getColor()); createConfig("extra.properties", "application.theme.color", "red"); Thread.sleep(refreshDelay); - Assert.assertEquals("blue", configurationPropertiesRefreshConfigBean.getColor()); + assertEquals("blue", configurationPropertiesRefreshConfigBean.getColor()); callRefresh(); - Assert.assertEquals("red", configurationPropertiesRefreshConfigBean.getColor()); + assertEquals("red", configurationPropertiesRefreshConfigBean.getColor()); } public void callRefresh() throws Exception { @@ -148,7 +147,7 @@ public void callRefresh() throws Exception { .accept(MediaType.APPLICATION_JSON_VALUE)) .andReturn(); MockHttpServletResponse response = mvcResult.getResponse(); - Assert.assertEquals(response.getStatus(), 200); + assertEquals(200, response.getStatus()); } public void createConfig(String file, String key, String value) throws Exception { From 052ea305d9848fcc58d6a35a30c52ad3964954cb Mon Sep 17 00:00:00 2001 From: Eugene Kovko <37694937+eukovko@users.noreply.github.com> Date: Thu, 13 Apr 2023 16:51:31 +0200 Subject: [PATCH 086/390] BAEL-4174: Java Modularity and Unit Testing (#13805) * feat: Added two main modules * feat: Renamed test module * feat: Added scripts for compiling library modules * feat: Added scripts for running core module * feat: Added scripts for running test module * fix: Fixed module name * fix: Removed unnecessary module imports * feat: Added script for running tests with patch * fix: Remove unnecessary module path imports * feat: Script for simple classpath tests * fix: Updated output directory * fix: Updated output directory for test compilation * fix: Replace maven repository with local lib folder * feat: Add lib folder * feat: Update the scripts * fix: Remove pom from test module * fix: Update core pom dependencies * fix: Remove test module from a parent pom * fix: Removed jars and added a script * fix: Fix a script * fix: Fix pom conflict --- .../compile-library-core-module.sh | 2 + .../compile-library-core-tests.sh | 10 ++++ .../compile-library-core-with-tests.sh | 13 +++++ .../compile-library-core.sh | 12 ++++ .../compile-library-test-module.sh | 2 + .../download-junit-dependencies.sh | 10 ++++ .../core-java-9-jigsaw/library-core/pom.xml | 55 +++++++++++++++++++ .../java/com/baeldung/library/core/Book.java | 52 ++++++++++++++++++ .../com/baeldung/library/core/Library.java | 25 +++++++++ .../java/com/baeldung/library/core/Main.java | 16 ++++++ .../src/main/java/module-info.java | 3 + .../library/core/LibraryUnitTest.java | 47 ++++++++++++++++ .../library/test/LibraryUnitTest.java | 53 ++++++++++++++++++ .../baeldung/library/test/TestLibrary.java | 10 ++++ .../src/test/java/module-info.java | 5 ++ core-java-modules/core-java-9-jigsaw/pom.xml | 4 ++ .../run-library-core-module-with-patch.sh | 7 +++ .../run-library-core-module.sh | 2 + .../run-library-test-class-path.sh | 5 ++ .../run-library-test-module-path.sh | 5 ++ 20 files changed, 338 insertions(+) create mode 100644 core-java-modules/core-java-9-jigsaw/compile-library-core-module.sh create mode 100644 core-java-modules/core-java-9-jigsaw/compile-library-core-tests.sh create mode 100644 core-java-modules/core-java-9-jigsaw/compile-library-core-with-tests.sh create mode 100644 core-java-modules/core-java-9-jigsaw/compile-library-core.sh create mode 100644 core-java-modules/core-java-9-jigsaw/compile-library-test-module.sh create mode 100644 core-java-modules/core-java-9-jigsaw/download-junit-dependencies.sh create mode 100644 core-java-modules/core-java-9-jigsaw/library-core/pom.xml create mode 100644 core-java-modules/core-java-9-jigsaw/library-core/src/main/java/com/baeldung/library/core/Book.java create mode 100644 core-java-modules/core-java-9-jigsaw/library-core/src/main/java/com/baeldung/library/core/Library.java create mode 100644 core-java-modules/core-java-9-jigsaw/library-core/src/main/java/com/baeldung/library/core/Main.java create mode 100644 core-java-modules/core-java-9-jigsaw/library-core/src/main/java/module-info.java create mode 100644 core-java-modules/core-java-9-jigsaw/library-core/src/test/java/com/baeldung/library/core/LibraryUnitTest.java create mode 100644 core-java-modules/core-java-9-jigsaw/library-test/src/test/java/com/baeldung/library/test/LibraryUnitTest.java create mode 100644 core-java-modules/core-java-9-jigsaw/library-test/src/test/java/com/baeldung/library/test/TestLibrary.java create mode 100644 core-java-modules/core-java-9-jigsaw/library-test/src/test/java/module-info.java create mode 100644 core-java-modules/core-java-9-jigsaw/run-library-core-module-with-patch.sh create mode 100644 core-java-modules/core-java-9-jigsaw/run-library-core-module.sh create mode 100644 core-java-modules/core-java-9-jigsaw/run-library-test-class-path.sh create mode 100644 core-java-modules/core-java-9-jigsaw/run-library-test-module-path.sh diff --git a/core-java-modules/core-java-9-jigsaw/compile-library-core-module.sh b/core-java-modules/core-java-9-jigsaw/compile-library-core-module.sh new file mode 100644 index 000000000000..fa0d4d5f1419 --- /dev/null +++ b/core-java-modules/core-java-9-jigsaw/compile-library-core-module.sh @@ -0,0 +1,2 @@ +#!/usr/bin/env bash +javac -d mods/com.baeldung.library.core $(find library-core/src/main -name "*.java") \ No newline at end of file diff --git a/core-java-modules/core-java-9-jigsaw/compile-library-core-tests.sh b/core-java-modules/core-java-9-jigsaw/compile-library-core-tests.sh new file mode 100644 index 000000000000..751906103b05 --- /dev/null +++ b/core-java-modules/core-java-9-jigsaw/compile-library-core-tests.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash +javac --class-path outDir/library-core/:\ +libs/junit-jupiter-engine-5.9.2.jar:\ +libs/junit-platform-engine-1.9.2.jar:\ +libs/apiguardian-api-1.1.2.jar:\ +libs/junit-jupiter-params-5.9.2.jar:\ +libs/junit-jupiter-api-5.9.2.jar:\ +libs/opentest4j-1.2.0.jar:\ +libs/junit-platform-commons-1.9.2.jar \ +-d outDir/library-test library-core/src/test/java/com/baeldung/library/core/LibraryUnitTest.java \ No newline at end of file diff --git a/core-java-modules/core-java-9-jigsaw/compile-library-core-with-tests.sh b/core-java-modules/core-java-9-jigsaw/compile-library-core-with-tests.sh new file mode 100644 index 000000000000..c873a9003c30 --- /dev/null +++ b/core-java-modules/core-java-9-jigsaw/compile-library-core-with-tests.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash +javac --class-path libs/junit-jupiter-engine-5.9.2.jar:\ +libs/junit-platform-engine-1.9.2.jar:\ +libs/apiguardian-api-1.1.2.jar:\ +libs/junit-jupiter-params-5.9.2.jar:\ +libs/junit-jupiter-api-5.9.2.jar:\ +libs/opentest4j-1.2.0.jar:\ +libs/junit-platform-commons-1.9.2.jar \ +-d outDir/library-core \ +library-core/src/main/java/com/baeldung/library/core/Book.java \ +library-core/src/main/java/com/baeldung/library/core/Library.java \ +library-core/src/main/java/com/baeldung/library/core/Main.java \ +library-core/src/test/java/com/baeldung/library/core/LibraryUnitTest.java \ No newline at end of file diff --git a/core-java-modules/core-java-9-jigsaw/compile-library-core.sh b/core-java-modules/core-java-9-jigsaw/compile-library-core.sh new file mode 100644 index 000000000000..7531148d0fb3 --- /dev/null +++ b/core-java-modules/core-java-9-jigsaw/compile-library-core.sh @@ -0,0 +1,12 @@ +#!/usr/bin/env bash +javac --class-path libs/junit-jupiter-engine-5.9.2.jar:\ +libs/junit-platform-engine-1.9.2.jar:\ +libs/apiguardian-api-1.1.2.jar:\ +libs/junit-jupiter-params-5.9.2.jar:\ +libs/junit-jupiter-api-5.9.2.jar:\ +libs/opentest4j-1.2.0.jar:\ +libs/junit-platform-commons-1.9.2.jar \ +-d outDir/library-core \ +library-core/src/main/java/com/baeldung/library/core/Book.java \ +library-core/src/main/java/com/baeldung/library/core/Library.java \ +library-core/src/main/java/com/baeldung/library/core/Main.java \ No newline at end of file diff --git a/core-java-modules/core-java-9-jigsaw/compile-library-test-module.sh b/core-java-modules/core-java-9-jigsaw/compile-library-test-module.sh new file mode 100644 index 000000000000..c6fd614fd05d --- /dev/null +++ b/core-java-modules/core-java-9-jigsaw/compile-library-test-module.sh @@ -0,0 +1,2 @@ +#!/usr/bin/env bash +javac --module-path mods:libs -d mods/com.baeldung.library.test $(find library-test/src/test -name "*.java") \ No newline at end of file diff --git a/core-java-modules/core-java-9-jigsaw/download-junit-dependencies.sh b/core-java-modules/core-java-9-jigsaw/download-junit-dependencies.sh new file mode 100644 index 000000000000..64c72a54298f --- /dev/null +++ b/core-java-modules/core-java-9-jigsaw/download-junit-dependencies.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash +wget -P libs/ https://repo1.maven.org/maven2/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar / +wget -P libs/ https://repo1.maven.org/maven2/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar / +wget -P libs/ https://repo1.maven.org/maven2/org/junit/platform/junit-platform-commons/1.9.2/junit-platform-commons-1.9.2.jar / +wget -P libs/ https://repo1.maven.org/maven2/org/junit/platform/junit-platform-engine/1.9.2/junit-platform-engine-1.9.2.jar / +wget -P libs/ https://repo1.maven.org/maven2/org/junit/platform/junit-platform-reporting/1.9.2/junit-platform-reporting-1.9.2.jar / +wget -P libs/ https://repo1.maven.org/maven2/org/junit/platform/junit-platform-console/1.9.2/junit-platform-console-1.9.2.jar / +wget -P libs/ https://repo1.maven.org/maven2/org/junit/platform/junit-platform-launcher/1.9.2/junit-platform-launcher-1.9.2.jar / +wget -P libs/ https://repo1.maven.org/maven2/org/junit/jupiter/junit-jupiter-engine/5.9.2/junit-jupiter-engine-5.9.2.jar / +wget -P libs/ https://repo1.maven.org/maven2/org/junit/jupiter/junit-jupiter-params/5.9.2/junit-jupiter-params-5.9.2.jar \ No newline at end of file diff --git a/core-java-modules/core-java-9-jigsaw/library-core/pom.xml b/core-java-modules/core-java-9-jigsaw/library-core/pom.xml new file mode 100644 index 000000000000..b860d899326d --- /dev/null +++ b/core-java-modules/core-java-9-jigsaw/library-core/pom.xml @@ -0,0 +1,55 @@ + + + 4.0.0 + + com.baeldung + core-java-9-jigsaw + 0.2-SNAPSHOT + + + library-core + + + 19 + 19 + UTF-8 + + + + + org.junit.jupiter + junit-jupiter-api + 5.9.2 + test + + + org.junit.jupiter + junit-jupiter-engine + 5.9.2 + test + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + 9 + + + + org.apache.maven.plugins + maven-surefire-plugin + 3.0.0-M5 + + false + + + + + \ No newline at end of file diff --git a/core-java-modules/core-java-9-jigsaw/library-core/src/main/java/com/baeldung/library/core/Book.java b/core-java-modules/core-java-9-jigsaw/library-core/src/main/java/com/baeldung/library/core/Book.java new file mode 100644 index 000000000000..782de8fa1064 --- /dev/null +++ b/core-java-modules/core-java-9-jigsaw/library-core/src/main/java/com/baeldung/library/core/Book.java @@ -0,0 +1,52 @@ +package com.baeldung.library.core; + +import java.util.Objects; + +public class Book { + + private String title; + private String author; + + public Book(String title, String author) { + this.title = title; + this.author = author; + } + + public String getTitle() { + return title; + } + + public String getAuthor() { + return author; + } + + + @Override + public String toString() { + return "Book [title=" + title + ", author=" + author + "]"; + } + + @Override + public boolean equals(final Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + final Book book = (Book) o; + + if (!Objects.equals(title, book.title)) { + return false; + } + return Objects.equals(author, book.author); + } + + @Override + public int hashCode() { + int result = title != null ? title.hashCode() : 0; + result = 31 * result + (author != null ? author.hashCode() : 0); + return result; + } +} diff --git a/core-java-modules/core-java-9-jigsaw/library-core/src/main/java/com/baeldung/library/core/Library.java b/core-java-modules/core-java-9-jigsaw/library-core/src/main/java/com/baeldung/library/core/Library.java new file mode 100644 index 000000000000..ee2225810de5 --- /dev/null +++ b/core-java-modules/core-java-9-jigsaw/library-core/src/main/java/com/baeldung/library/core/Library.java @@ -0,0 +1,25 @@ +package com.baeldung.library.core; + +import java.util.ArrayList; +import java.util.List; + +public class Library { + + private List books = new ArrayList<>(); + + public void addBook(Book book) { + books.add(book); + } + + public List getBooks() { + return books; + } + + void removeBook(Book book) { + books.remove(book); + } + + protected void removeBookByAuthor(String author) { + books.removeIf(book -> book.getAuthor().equals(author)); + } +} diff --git a/core-java-modules/core-java-9-jigsaw/library-core/src/main/java/com/baeldung/library/core/Main.java b/core-java-modules/core-java-9-jigsaw/library-core/src/main/java/com/baeldung/library/core/Main.java new file mode 100644 index 000000000000..18839602c2b3 --- /dev/null +++ b/core-java-modules/core-java-9-jigsaw/library-core/src/main/java/com/baeldung/library/core/Main.java @@ -0,0 +1,16 @@ +package com.baeldung.library.core; + +public class Main { + + public static void main(String[] args) { + Library library = new Library(); + library.addBook(new Book("The Lord of the Rings", "J.R.R. Tolkien")); + library.addBook(new Book("The Hobbit", "J.R.R. Tolkien")); + library.addBook(new Book("The Silmarillion", "J.R.R. Tolkien")); + library.addBook(new Book("The Chronicles of Narnia", "C.S. Lewis")); + library.addBook(new Book("The Lion, the Witch and the Wardrobe", "C.S. Lewis")); + System.out.println("Welcome to our library!"); + System.out.println("We have the following books:"); + library.getBooks().forEach(System.out::println); + } +} diff --git a/core-java-modules/core-java-9-jigsaw/library-core/src/main/java/module-info.java b/core-java-modules/core-java-9-jigsaw/library-core/src/main/java/module-info.java new file mode 100644 index 000000000000..bdf88d8bc986 --- /dev/null +++ b/core-java-modules/core-java-9-jigsaw/library-core/src/main/java/module-info.java @@ -0,0 +1,3 @@ +module com.baeldung.library.core { + exports com.baeldung.library.core; +} \ No newline at end of file diff --git a/core-java-modules/core-java-9-jigsaw/library-core/src/test/java/com/baeldung/library/core/LibraryUnitTest.java b/core-java-modules/core-java-9-jigsaw/library-core/src/test/java/com/baeldung/library/core/LibraryUnitTest.java new file mode 100644 index 000000000000..20a4889e8cba --- /dev/null +++ b/core-java-modules/core-java-9-jigsaw/library-core/src/test/java/com/baeldung/library/core/LibraryUnitTest.java @@ -0,0 +1,47 @@ +package com.baeldung.library.core; + +import static org.junit.jupiter.api.Assertions.*; + +import org.junit.jupiter.api.Test; + +class LibraryUnitTest { + + @Test + void givenEmptyLibrary_whenAddABook_thenLibraryHasOneBook() { + Library library = new Library(); + Book theLordOfTheRings = new Book("The Lord of the Rings", "J.R.R. Tolkien"); + library.addBook(theLordOfTheRings); + int expected = 1; + int actual = library.getBooks().size(); + assertEquals(expected, actual); + } + + @Test + void givenTheLibraryWithABook_whenRemoveABook_thenLibraryIsEmpty() { + Library library = new Library(); + Book theLordOfTheRings = new Book("The Lord of the Rings", "J.R.R. Tolkien"); + library.addBook(theLordOfTheRings); + library.removeBook(theLordOfTheRings); + int expected = 0; + int actual = library.getBooks().size(); + assertEquals(expected, actual); + } + + @Test + void givenTheLibraryWithSeveralBook_whenRemoveABookByAuthor_thenLibraryHasNoBooksByTheAuthor() { + Library library = new Library(); + Book theLordOfTheRings = new Book("The Lord of the Rings", "J.R.R. Tolkien"); + Book theHobbit = new Book("The Hobbit", "J.R.R. Tolkien"); + Book theSilmarillion = new Book("The Silmarillion", "J.R.R. Tolkien"); + Book theHungerGames = new Book("The Hunger Games", "Suzanne Collins"); + library.addBook(theLordOfTheRings); + library.addBook(theHobbit); + library.addBook(theSilmarillion); + library.addBook(theHungerGames); + library.removeBookByAuthor("J.R.R. Tolkien"); + int expected = 1; + int actual = library.getBooks().size(); + assertEquals(expected, actual); + } + +} \ No newline at end of file diff --git a/core-java-modules/core-java-9-jigsaw/library-test/src/test/java/com/baeldung/library/test/LibraryUnitTest.java b/core-java-modules/core-java-9-jigsaw/library-test/src/test/java/com/baeldung/library/test/LibraryUnitTest.java new file mode 100644 index 000000000000..31eae89bba1e --- /dev/null +++ b/core-java-modules/core-java-9-jigsaw/library-test/src/test/java/com/baeldung/library/test/LibraryUnitTest.java @@ -0,0 +1,53 @@ +package com.baeldung.library.test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import com.baeldung.library.core.Book; +import com.baeldung.library.core.Library; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import org.junit.jupiter.api.Test; + +class LibraryUnitTest { + + @Test + void givenEmptyLibrary_whenAddABook_thenLibraryHasOneBook() { + Library library = new Library(); + Book theLordOfTheRings = new Book("The Lord of the Rings", "J.R.R. Tolkien"); + library.addBook(theLordOfTheRings); + int expected = 1; + int actual = library.getBooks().size(); + assertEquals(expected, actual); + } + + @Test + void givenTheLibraryWithABook_whenRemoveABook_thenLibraryIsEmpty() + throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { + Library library = new Library(); + Book theLordOfTheRings = new Book("The Lord of the Rings", "J.R.R. Tolkien"); + library.addBook(theLordOfTheRings); + Method removeBook = Library.class.getDeclaredMethod("removeBook", Book.class); + removeBook.setAccessible(true); + removeBook.invoke(library, theLordOfTheRings); + int expected = 0; + int actual = library.getBooks().size(); + assertEquals(expected, actual); + } +@Test +void givenTheLibraryWithSeveralBook_whenRemoveABookByAuthor_thenLibraryHasNoBooksByTheAuthor() { + TestLibrary library = new TestLibrary(); + Book theLordOfTheRings = new Book("The Lord of the Rings", "J.R.R. Tolkien"); + Book theHobbit = new Book("The Hobbit", "J.R.R. Tolkien"); + Book theSilmarillion = new Book("The Silmarillion", "J.R.R. Tolkien"); + Book theHungerGames = new Book("The Hunger Games", "Suzanne Collins"); + library.addBook(theLordOfTheRings); + library.addBook(theHobbit); + library.addBook(theSilmarillion); + library.addBook(theHungerGames); + library.removeBookByAuthor("J.R.R. Tolkien"); + int expected = 1; + int actual = library.getBooks().size(); + assertEquals(expected, actual); +} + +} \ No newline at end of file diff --git a/core-java-modules/core-java-9-jigsaw/library-test/src/test/java/com/baeldung/library/test/TestLibrary.java b/core-java-modules/core-java-9-jigsaw/library-test/src/test/java/com/baeldung/library/test/TestLibrary.java new file mode 100644 index 000000000000..8ee3b0e3fe53 --- /dev/null +++ b/core-java-modules/core-java-9-jigsaw/library-test/src/test/java/com/baeldung/library/test/TestLibrary.java @@ -0,0 +1,10 @@ +package com.baeldung.library.test; + +import com.baeldung.library.core.Library; + +public class TestLibrary extends Library { + @Override + public void removeBookByAuthor(final String author) { + super.removeBookByAuthor(author); + } +} diff --git a/core-java-modules/core-java-9-jigsaw/library-test/src/test/java/module-info.java b/core-java-modules/core-java-9-jigsaw/library-test/src/test/java/module-info.java new file mode 100644 index 000000000000..8d60b574f246 --- /dev/null +++ b/core-java-modules/core-java-9-jigsaw/library-test/src/test/java/module-info.java @@ -0,0 +1,5 @@ +module com.baeldung.library.test { + requires com.baeldung.library.core; + requires org.junit.jupiter.api; + opens com.baeldung.library.test to org.junit.platform.commons; +} \ No newline at end of file diff --git a/core-java-modules/core-java-9-jigsaw/pom.xml b/core-java-modules/core-java-9-jigsaw/pom.xml index 70a2882234c0..288254b9cfef 100644 --- a/core-java-modules/core-java-9-jigsaw/pom.xml +++ b/core-java-modules/core-java-9-jigsaw/pom.xml @@ -5,6 +5,10 @@ 4.0.0 core-java-9-jigsaw core-java-9-jigsaw + pom + + library-core + com.baeldung diff --git a/core-java-modules/core-java-9-jigsaw/run-library-core-module-with-patch.sh b/core-java-modules/core-java-9-jigsaw/run-library-core-module-with-patch.sh new file mode 100644 index 000000000000..70772a3589a5 --- /dev/null +++ b/core-java-modules/core-java-9-jigsaw/run-library-core-module-with-patch.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash +java --module-path mods:libs \ +--add-modules com.baeldung.library.core \ +--add-opens com.baeldung.library.core/com.baeldung.library.core=org.junit.platform.commons \ +--add-reads com.baeldung.library.core=org.junit.jupiter.api \ +--patch-module com.baeldung.library.core=outDir/library-test \ +--module org.junit.platform.console --select-class com.baeldung.library.core.LibraryUnitTest \ No newline at end of file diff --git a/core-java-modules/core-java-9-jigsaw/run-library-core-module.sh b/core-java-modules/core-java-9-jigsaw/run-library-core-module.sh new file mode 100644 index 000000000000..f2bb976512a0 --- /dev/null +++ b/core-java-modules/core-java-9-jigsaw/run-library-core-module.sh @@ -0,0 +1,2 @@ +#!/usr/bin/env bash +java --module-path mods --module com.baeldung.library.core/com.baeldung.library.core.Main \ No newline at end of file diff --git a/core-java-modules/core-java-9-jigsaw/run-library-test-class-path.sh b/core-java-modules/core-java-9-jigsaw/run-library-test-class-path.sh new file mode 100644 index 000000000000..73e3d504bfa3 --- /dev/null +++ b/core-java-modules/core-java-9-jigsaw/run-library-test-class-path.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +java --module-path libs \ +org.junit.platform.console.ConsoleLauncher \ +--classpath ./outDir/library-core \ +--select-class com.baeldung.library.core.LibraryUnitTest \ No newline at end of file diff --git a/core-java-modules/core-java-9-jigsaw/run-library-test-module-path.sh b/core-java-modules/core-java-9-jigsaw/run-library-test-module-path.sh new file mode 100644 index 000000000000..08d149dbd7fe --- /dev/null +++ b/core-java-modules/core-java-9-jigsaw/run-library-test-module-path.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +java --module-path mods:libs \ +--add-modules com.baeldung.library.test \ +--add-opens com.baeldung.library.core/com.baeldung.library.core=com.baeldung.library.test \ +org.junit.platform.console.ConsoleLauncher --select-class com.baeldung.library.test.LibraryUnitTest \ No newline at end of file From 87fd9aa8beac2a44eddfc003245544700d3983d9 Mon Sep 17 00:00:00 2001 From: Kumar Prabhash Anand Date: Thu, 13 Apr 2023 18:23:17 +0200 Subject: [PATCH 087/390] BAEL-5965 protobuf custom configuration (#13838) * BAEL-5965 added protobuf custom config code generation implementation * deleted .gitignore * BAEL-5965 added test proto src configuration * BAEL-5965 updated module name --- .../protobuf/build.gradle | 45 ++++ .../gradle/wrapper/gradle-wrapper.properties | 5 + .../gradle-customization/protobuf/gradlew | 240 ++++++++++++++++++ .../gradle-customization/protobuf/gradlew.bat | 91 +++++++ .../protobuf/settings.gradle | 1 + .../src/main/resources/application.properties | 1 + .../src/sample_protofiles/user_message.proto | 13 + .../ProtobufCodeGenerationUnitTest.java | 28 ++ 8 files changed, 424 insertions(+) create mode 100644 gradle-modules/gradle-customization/protobuf/build.gradle create mode 100644 gradle-modules/gradle-customization/protobuf/gradle/wrapper/gradle-wrapper.properties create mode 100755 gradle-modules/gradle-customization/protobuf/gradlew create mode 100644 gradle-modules/gradle-customization/protobuf/gradlew.bat create mode 100644 gradle-modules/gradle-customization/protobuf/settings.gradle create mode 100644 gradle-modules/gradle-customization/protobuf/src/main/resources/application.properties create mode 100644 gradle-modules/gradle-customization/protobuf/src/sample_protofiles/user_message.proto create mode 100644 gradle-modules/gradle-customization/protobuf/src/test/java/com/baeldung/protobuf/ProtobufCodeGenerationUnitTest.java diff --git a/gradle-modules/gradle-customization/protobuf/build.gradle b/gradle-modules/gradle-customization/protobuf/build.gradle new file mode 100644 index 000000000000..3cac57fb03dd --- /dev/null +++ b/gradle-modules/gradle-customization/protobuf/build.gradle @@ -0,0 +1,45 @@ +plugins { + id 'java' + id "com.google.protobuf" version "0.8.18" +} + +group = 'com.baeldung' +version = '0.0.1-SNAPSHOT' +sourceCompatibility = '17' + +repositories { + mavenCentral() +} + +dependencies { + implementation group: 'com.google.protobuf', name: 'protobuf-java', version: '3.15.0' + implementation group: 'javax.annotation', name: 'javax.annotation-api', version: '1.3.2' + testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1' + testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1' +} + +tasks.named('test') { + useJUnitPlatform() +} + +protobuf { + protoc { + artifact = 'com.google.protobuf:protoc:3.15.0' + } +} + +sourceSets { + main { + proto { + srcDir 'src/sample_protofiles' + } + java { + srcDirs 'build/generated/source/proto/main/java' + } + } + test { + proto { + srcDir 'src/sample_protofiles' + } + } +} \ No newline at end of file diff --git a/gradle-modules/gradle-customization/protobuf/gradle/wrapper/gradle-wrapper.properties b/gradle-modules/gradle-customization/protobuf/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000000..774fae87671b --- /dev/null +++ b/gradle-modules/gradle-customization/protobuf/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.1-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradle-modules/gradle-customization/protobuf/gradlew b/gradle-modules/gradle-customization/protobuf/gradlew new file mode 100755 index 000000000000..a69d9cb6c206 --- /dev/null +++ b/gradle-modules/gradle-customization/protobuf/gradlew @@ -0,0 +1,240 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" +APP_BASE_NAME=${0##*/} + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/gradle-modules/gradle-customization/protobuf/gradlew.bat b/gradle-modules/gradle-customization/protobuf/gradlew.bat new file mode 100644 index 000000000000..f127cfd49d40 --- /dev/null +++ b/gradle-modules/gradle-customization/protobuf/gradlew.bat @@ -0,0 +1,91 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/gradle-modules/gradle-customization/protobuf/settings.gradle b/gradle-modules/gradle-customization/protobuf/settings.gradle new file mode 100644 index 000000000000..63483bae11d3 --- /dev/null +++ b/gradle-modules/gradle-customization/protobuf/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'protobuf' diff --git a/gradle-modules/gradle-customization/protobuf/src/main/resources/application.properties b/gradle-modules/gradle-customization/protobuf/src/main/resources/application.properties new file mode 100644 index 000000000000..8b137891791f --- /dev/null +++ b/gradle-modules/gradle-customization/protobuf/src/main/resources/application.properties @@ -0,0 +1 @@ + diff --git a/gradle-modules/gradle-customization/protobuf/src/sample_protofiles/user_message.proto b/gradle-modules/gradle-customization/protobuf/src/sample_protofiles/user_message.proto new file mode 100644 index 000000000000..60e06c20167c --- /dev/null +++ b/gradle-modules/gradle-customization/protobuf/src/sample_protofiles/user_message.proto @@ -0,0 +1,13 @@ +syntax = "proto3"; + +package com.baeldung.protobuf; + +option java_multiple_files = true; +option java_package = "com.baeldung.protobuf.service"; + +message User { + string firstName = 1; + optional string middleName = 2; + string lastName = 3; + optional uint32 age = 4; +} \ No newline at end of file diff --git a/gradle-modules/gradle-customization/protobuf/src/test/java/com/baeldung/protobuf/ProtobufCodeGenerationUnitTest.java b/gradle-modules/gradle-customization/protobuf/src/test/java/com/baeldung/protobuf/ProtobufCodeGenerationUnitTest.java new file mode 100644 index 000000000000..12187e3efb56 --- /dev/null +++ b/gradle-modules/gradle-customization/protobuf/src/test/java/com/baeldung/protobuf/ProtobufCodeGenerationUnitTest.java @@ -0,0 +1,28 @@ +package com.baeldung.protobuf; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.Test; + +import com.baeldung.protobuf.service.User; + +class ProtobufCodeGenerationUnitTest { + + @Test + void givenUserData_whenObjectCreated_thenDataShouldMatch() { + final String firstName = "John"; + final String lastName = "Doe"; + final int age = 28; + + User user = User.newBuilder() + .setFirstName(firstName) + .setLastName(lastName) + .setAge(age) + .build(); + + assertEquals(firstName, user.getFirstName()); + assertEquals(lastName, user.getLastName()); + assertEquals(age, user.getAge()); + } + +} From 151f0383c712d9757a4838abf8a5f08857b2f49b Mon Sep 17 00:00:00 2001 From: Adrian Bob Date: Thu, 13 Apr 2023 19:25:49 +0300 Subject: [PATCH 088/390] Add logging for bulkhead test (#13834) --- .../ResilientAppControllerIntegrationTest.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/ResilientAppControllerIntegrationTest.java b/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/ResilientAppControllerIntegrationTest.java index ae1b89764df3..3933a027538c 100644 --- a/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/ResilientAppControllerIntegrationTest.java +++ b/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/ResilientAppControllerIntegrationTest.java @@ -22,6 +22,8 @@ import org.apache.commons.io.IOUtils; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.web.client.TestRestTemplate; @@ -32,6 +34,8 @@ @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) class ResilientAppControllerIntegrationTest { + private final Logger LOGGER = LoggerFactory.getLogger(getClass()); + @Autowired private TestRestTemplate restTemplate; @LocalServerPort private Integer port; @@ -226,6 +230,7 @@ void testBulkheadEvents() throws Exception { executorService.shutdown(); assertEquals(2, responseStatusCount.keySet().size()); + LOGGER.info("Response statuses: " + responseStatusCount.keySet()); assertTrue(responseStatusCount.containsKey(BANDWIDTH_LIMIT_EXCEEDED.value())); assertTrue(responseStatusCount.containsKey(OK.value())); EXTERNAL_SERVICE.verify(3, getRequestedFor(urlEqualTo("/api/external"))); From f044de10ab962c49bdd90f9f7752c4d8e6e33352 Mon Sep 17 00:00:00 2001 From: sam-gardner <53271849+sam-gardner@users.noreply.github.com> Date: Thu, 13 Apr 2023 18:02:41 +0100 Subject: [PATCH 089/390] BAEL-5771 Add code for url query manipulation in Java (#13820) --- .../core-java-networking-4/pom.xml | 24 +++++++++ .../UrlQueryManipulationUnitTest.java | 53 +++++++++++++++++++ 2 files changed, 77 insertions(+) create mode 100644 core-java-modules/core-java-networking-4/src/test/java/com/baeldung/urlquerymanipulation/UrlQueryManipulationUnitTest.java diff --git a/core-java-modules/core-java-networking-4/pom.xml b/core-java-modules/core-java-networking-4/pom.xml index 5fca4a1cab75..cbe6356d0fd6 100644 --- a/core-java-modules/core-java-networking-4/pom.xml +++ b/core-java-modules/core-java-networking-4/pom.xml @@ -24,6 +24,30 @@ jsoup ${jsoup.version} + + + org.apache.httpcomponents + httpclient + 4.5.2 + + + + javax.ws.rs + javax.ws.rs-api + 2.1.1 + + + org.glassfish.jersey.core + jersey-common + 2.22.2 + test + + + + org.springframework + spring-web + 6.0.6 + diff --git a/core-java-modules/core-java-networking-4/src/test/java/com/baeldung/urlquerymanipulation/UrlQueryManipulationUnitTest.java b/core-java-modules/core-java-networking-4/src/test/java/com/baeldung/urlquerymanipulation/UrlQueryManipulationUnitTest.java new file mode 100644 index 000000000000..cc53a3e3a899 --- /dev/null +++ b/core-java-modules/core-java-networking-4/src/test/java/com/baeldung/urlquerymanipulation/UrlQueryManipulationUnitTest.java @@ -0,0 +1,53 @@ +package com.baeldung.urlquerymanipulation; + +import static junit.framework.TestCase.assertEquals; + +import java.net.URI; +import java.net.URISyntaxException; + +import javax.ws.rs.core.UriBuilder; + +import org.apache.http.client.utils.URIBuilder; + +import org.junit.Test; +import org.springframework.web.util.UriComponentsBuilder; + +public class UrlQueryManipulationUnitTest { + + @Test + public void whenUsingApacheUriBuilder_thenParametersAreCorrectlyAdded() throws URISyntaxException { + String url = "baeldung.com"; + String key = "article"; + String value = "alpha"; + URI uri = new URIBuilder(url).addParameter(key, value) + .build(); + + assertEquals("baeldung.com?article=alpha", uri.toString()); + } + + @Test + public void whenUsingJavaUriBuilder_thenParametersAreCorrectlyAdded() { + String url = "baeldung.com"; + String key = "article"; + String value = "beta"; + URI uri = UriBuilder.fromUri(url) + .queryParam(key, value) + .build(); + + assertEquals("baeldung.com?article=beta", uri.toString()); + } + + @Test + public void whenUsingSpringUriComponentsBuilder_thenParametersAreCorrectlyAdded() { + String url = "baeldung.com"; + String key = "article"; + String value = "charlie"; + URI uri = UriComponentsBuilder.fromUriString(url) + .queryParam(key, value) + .build() + .toUri(); + + assertEquals("baeldung.com?article=charlie", uri.toString()); + } + +} From ccea60a20783ad93356425e2658c509a27ac8280 Mon Sep 17 00:00:00 2001 From: Tapan Avasthi Date: Fri, 14 Apr 2023 06:41:25 +0530 Subject: [PATCH 090/390] BAEL-6307: Use LinkedHashMap to fix order of keys during serialization (#13832) Co-authored-by: Tapan Avasthi --- .../baeldung/jackson/map/MapWithJsonKeyValueUnitTest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/jackson-modules/jackson-conversions/src/test/java/com/baeldung/jackson/map/MapWithJsonKeyValueUnitTest.java b/jackson-modules/jackson-conversions/src/test/java/com/baeldung/jackson/map/MapWithJsonKeyValueUnitTest.java index 87c425fe96b6..0b4639ca3b70 100644 --- a/jackson-modules/jackson-conversions/src/test/java/com/baeldung/jackson/map/MapWithJsonKeyValueUnitTest.java +++ b/jackson-modules/jackson-conversions/src/test/java/com/baeldung/jackson/map/MapWithJsonKeyValueUnitTest.java @@ -1,6 +1,6 @@ package com.baeldung.jackson.map; -import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.Map; import org.junit.Test; @@ -25,7 +25,7 @@ public void givenObject_WhenSerialize_ThenUseJsonValueForSerialization() throws @Test public void givenMapWithObjectKeys_WhenSerialize_ThenUseJsonKeyForSerialization() throws JsonProcessingException { // Given - Map selectionByFruit = new HashMap<>(); + Map selectionByFruit = new LinkedHashMap(); selectionByFruit.put(FRUIT1, "Hagrid"); selectionByFruit.put(FRUIT2, "Hercules"); // When @@ -37,7 +37,7 @@ public void givenMapWithObjectKeys_WhenSerialize_ThenUseJsonKeyForSerialization( @Test public void givenMapWithObjectValues_WhenSerialize_ThenUseJsonValueForSerialization() throws JsonProcessingException { // Given - Map selectionByPerson = new HashMap<>(); + Map selectionByPerson = new LinkedHashMap(); selectionByPerson.put("Hagrid", FRUIT1); selectionByPerson.put("Hercules", FRUIT2); // When From d1ead6b6d83daed4d47cb77ffcebc30ac769cc51 Mon Sep 17 00:00:00 2001 From: tgvLt Date: Fri, 14 Apr 2023 08:22:30 +0300 Subject: [PATCH 091/390] Parse dates with multiple formats (#13348) Code examples for "Parsing Date Strings with Varying Formats" --- .../parsingDates/SimpleDateTimeFormat.java | 20 +++++++++ .../parsingDates/SimpleDateTimeFormater.java | 17 ++++++++ .../parsingDates/SimpleDateUtils.java | 18 ++++++++ .../parsingDates/SimpleParseDate.java | 19 ++++++++ .../parsingDates/SimpleParseDateUnitTest.java | 43 +++++++++++++++++++ 5 files changed, 117 insertions(+) create mode 100644 core-java-modules/core-java-8-datetime-2/src/main/java/com/baeldung/parsingDates/SimpleDateTimeFormat.java create mode 100644 core-java-modules/core-java-8-datetime-2/src/main/java/com/baeldung/parsingDates/SimpleDateTimeFormater.java create mode 100644 core-java-modules/core-java-8-datetime-2/src/main/java/com/baeldung/parsingDates/SimpleDateUtils.java create mode 100644 core-java-modules/core-java-8-datetime-2/src/main/java/com/baeldung/parsingDates/SimpleParseDate.java create mode 100644 core-java-modules/core-java-8-datetime-2/src/test/java/com/baeldung/parsingDates/SimpleParseDateUnitTest.java diff --git a/core-java-modules/core-java-8-datetime-2/src/main/java/com/baeldung/parsingDates/SimpleDateTimeFormat.java b/core-java-modules/core-java-8-datetime-2/src/main/java/com/baeldung/parsingDates/SimpleDateTimeFormat.java new file mode 100644 index 000000000000..a82f3bce2b68 --- /dev/null +++ b/core-java-modules/core-java-8-datetime-2/src/main/java/com/baeldung/parsingDates/SimpleDateTimeFormat.java @@ -0,0 +1,20 @@ +package com.baeldung.parsingDates; + +import java.util.Arrays; +import java.util.List; +import org.joda.time.LocalDate; +import org.joda.time.format.DateTimeFormat; + +public class SimpleDateTimeFormat { + + public static LocalDate parseDate(String date) { + List patternList = Arrays.asList("MM/dd/yyyy", "dd.MM.yyyy", "yyyy-MM-dd"); + for (String pattern : patternList) { + try { + return DateTimeFormat.forPattern(pattern).parseLocalDate(date); + } catch (IllegalArgumentException e) { + } + } + return null; + } +} diff --git a/core-java-modules/core-java-8-datetime-2/src/main/java/com/baeldung/parsingDates/SimpleDateTimeFormater.java b/core-java-modules/core-java-8-datetime-2/src/main/java/com/baeldung/parsingDates/SimpleDateTimeFormater.java new file mode 100644 index 000000000000..aa12038032d1 --- /dev/null +++ b/core-java-modules/core-java-8-datetime-2/src/main/java/com/baeldung/parsingDates/SimpleDateTimeFormater.java @@ -0,0 +1,17 @@ +package com.baeldung.parsingDates; + +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeFormatterBuilder; + +public class SimpleDateTimeFormater { + + public static LocalDate parseDate(String date) { + DateTimeFormatterBuilder dateTimeFormatterBuilder = new DateTimeFormatterBuilder() + .append(DateTimeFormatter.ofPattern("[MM/dd/yyyy]" + "[dd-MM-yyyy]" + "[yyyy-MM-dd]")); + + DateTimeFormatter dateTimeFormatter = dateTimeFormatterBuilder.toFormatter(); + + return LocalDate.parse(date, dateTimeFormatter); + } +} diff --git a/core-java-modules/core-java-8-datetime-2/src/main/java/com/baeldung/parsingDates/SimpleDateUtils.java b/core-java-modules/core-java-8-datetime-2/src/main/java/com/baeldung/parsingDates/SimpleDateUtils.java new file mode 100644 index 000000000000..8a154d3cd821 --- /dev/null +++ b/core-java-modules/core-java-8-datetime-2/src/main/java/com/baeldung/parsingDates/SimpleDateUtils.java @@ -0,0 +1,18 @@ +package com.baeldung.parsingDates; + +import java.text.ParseException; +import java.util.Date; +import org.apache.commons.lang3.time.DateUtils; + +public class SimpleDateUtils { + + public static Date parseDate(String date) { + try { + return DateUtils.parseDateStrictly(date, + new String[]{"yyyy/MM/dd", "dd/MM/yyyy", "yyyy-MM-dd"}); + } catch (ParseException ex) { + return null; + } + } + +} diff --git a/core-java-modules/core-java-8-datetime-2/src/main/java/com/baeldung/parsingDates/SimpleParseDate.java b/core-java-modules/core-java-8-datetime-2/src/main/java/com/baeldung/parsingDates/SimpleParseDate.java new file mode 100644 index 000000000000..cb024eea5369 --- /dev/null +++ b/core-java-modules/core-java-8-datetime-2/src/main/java/com/baeldung/parsingDates/SimpleParseDate.java @@ -0,0 +1,19 @@ +package com.baeldung.parsingDates; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; + +public class SimpleParseDate { + + public Date parseDate(String dateString, List formatStrings) { + for (String formatString : formatStrings) { + try { + return new SimpleDateFormat(formatString).parse(dateString); + } catch (ParseException e) { + } + } + return null; + } +} diff --git a/core-java-modules/core-java-8-datetime-2/src/test/java/com/baeldung/parsingDates/SimpleParseDateUnitTest.java b/core-java-modules/core-java-8-datetime-2/src/test/java/com/baeldung/parsingDates/SimpleParseDateUnitTest.java new file mode 100644 index 000000000000..d7cbb6a83486 --- /dev/null +++ b/core-java-modules/core-java-8-datetime-2/src/test/java/com/baeldung/parsingDates/SimpleParseDateUnitTest.java @@ -0,0 +1,43 @@ +package com.baeldung.parsingDates; + +import com.baeldung.parsingDates.SimpleDateTimeFormat; +import com.baeldung.parsingDates.SimpleDateTimeFormater; +import com.baeldung.parsingDates.SimpleDateUtils; +import com.baeldung.parsingDates.SimpleParseDate; +import java.time.format.DateTimeParseException; +import java.util.Arrays; +import org.junit.*; +import static org.junit.Assert.*; +import org.joda.time.LocalDate; + +public class SimpleParseDateUnitTest { + + @Test + public void whenInvalidInput_thenGettingUnexpectedResult() { + SimpleParseDate simpleParseDate = new SimpleParseDate(); + String date = "2022-40-40"; + assertEquals("Sat May 10 00:00:00 UTC 2025", simpleParseDate.parseDate(date, Arrays.asList("MM/dd/yyyy", "dd.MM.yyyy", "yyyy-MM-dd")).toString()); + } + + @Test + public void whenInvalidDate_thenAssertThrows() { + SimpleDateTimeFormater simpleDateTimeFormater = new SimpleDateTimeFormater(); + assertEquals(java.time.LocalDate.parse("2022-12-04"), simpleDateTimeFormater.parseDate("2022-12-04")); + assertThrows(DateTimeParseException.class, () -> simpleDateTimeFormater.parseDate("2022-13-04")); + } + + @Test + public void whenDateIsCorrect_thenParseCorrect() { + SimpleDateUtils simpleDateUtils = new SimpleDateUtils(); + assertNull(simpleDateUtils.parseDate("53/10/2014")); + assertEquals("Wed Sep 10 00:00:00 UTC 2014", simpleDateUtils.parseDate("10/09/2014").toString()); + } + + @Test + public void whenDateIsCorrect_thenResultCorrect() { + SimpleDateTimeFormat simpleDateTimeFormat = new SimpleDateTimeFormat(); + assertNull(simpleDateTimeFormat.parseDate("53/10/2014")); + assertEquals(LocalDate.parse("2014-10-10"), simpleDateTimeFormat.parseDate("2014-10-10")); + } + +} From ae9aeabacd89127c8b28962428ced262d58f8207 Mon Sep 17 00:00:00 2001 From: edizor <113095366+edizor@users.noreply.github.com> Date: Fri, 14 Apr 2023 16:35:28 +0800 Subject: [PATCH 092/390] Update README.md [skip ci] --- core-java-modules/core-java-8-2/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/core-java-modules/core-java-8-2/README.md b/core-java-modules/core-java-8-2/README.md index cad4a4f1fa67..efba1f23ad79 100644 --- a/core-java-modules/core-java-8-2/README.md +++ b/core-java-modules/core-java-8-2/README.md @@ -11,4 +11,5 @@ This module contains articles about Java 8 core features - [Convert Between Byte Array and UUID in Java](https://www.baeldung.com/java-byte-array-to-uuid) - [Create a Simple “Rock-Paper-Scissors” Game in Java](https://www.baeldung.com/java-rock-paper-scissors) - [VarArgs vs Array Input Parameters in Java](https://www.baeldung.com/varargs-vs-array) +- [Java Helper vs. Utility Classes](https://www.baeldung.com/java-helper-vs-utility-classes) - [[<-- Prev]](/core-java-modules/core-java-8) From 5a4079d671633a0d2c90d3eede8c5bd7a03964ac Mon Sep 17 00:00:00 2001 From: edizor <113095366+edizor@users.noreply.github.com> Date: Fri, 14 Apr 2023 16:47:31 +0800 Subject: [PATCH 093/390] Update README.md [skip ci] --- spring-boot-modules/spring-boot-3-url-matching/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/spring-boot-modules/spring-boot-3-url-matching/README.md b/spring-boot-modules/spring-boot-3-url-matching/README.md index 8b137891791f..577849c0e146 100644 --- a/spring-boot-modules/spring-boot-3-url-matching/README.md +++ b/spring-boot-modules/spring-boot-3-url-matching/README.md @@ -1 +1,2 @@ - +## Relevant Articles +- [URL Matching in Spring Boot 3](https://www.baeldung.com/spring-boot-3-url-matching) From 56ec052150309963db61b41474e977b1e2ce1d50 Mon Sep 17 00:00:00 2001 From: edizor <113095366+edizor@users.noreply.github.com> Date: Fri, 14 Apr 2023 16:54:40 +0800 Subject: [PATCH 094/390] Update README.md [skip ci] --- jackson-modules/jackson-core/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/jackson-modules/jackson-core/README.md b/jackson-modules/jackson-core/README.md index d34a9e8bf79c..73293b1e842f 100644 --- a/jackson-modules/jackson-core/README.md +++ b/jackson-modules/jackson-core/README.md @@ -15,3 +15,4 @@ The "REST With Spring" Classes: http://bit.ly/restwithspring - [Working with Tree Model Nodes in Jackson](https://www.baeldung.com/jackson-json-node-tree-model) - [Get all the Keys in a JSON String Using JsonNode](https://www.baeldung.com/java-jsonnode-get-keys) - [Difference Between asText() and toString() in JsonNode](https://www.baeldung.com/java-jsonnode-astext-vs-tostring) +- [Deserialize Generic Type with Jackson](https://www.baeldung.com/java-deserialize-generic-type-with-jackson) From 24d9ac673796f065025c361bb79b23eaef4e9d7c Mon Sep 17 00:00:00 2001 From: edizor <113095366+edizor@users.noreply.github.com> Date: Fri, 14 Apr 2023 17:04:35 +0800 Subject: [PATCH 095/390] Update README.md [skip ci] --- testing-modules/junit5-annotations/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/testing-modules/junit5-annotations/README.md b/testing-modules/junit5-annotations/README.md index 49d596607cc4..53e409151b6d 100644 --- a/testing-modules/junit5-annotations/README.md +++ b/testing-modules/junit5-annotations/README.md @@ -9,3 +9,4 @@ This module contains articles about JUnit 5 Annotations - [Guide to JUnit 5 Parameterized Tests](https://www.baeldung.com/parameterized-tests-junit-5) - [Writing Templates for Test Cases Using JUnit 5](https://www.baeldung.com/junit5-test-templates) - [JUnit 5 @Nested Test Classes](https://www.baeldung.com/junit-5-nested-test-classes) +- [A Guide to @Timeout Annotation in JUnit 5](https://www.baeldung.com/java-junit-5-timeout-annotation) From 7a66b07af6b1523efce127ce32c13acffc0964f7 Mon Sep 17 00:00:00 2001 From: edizor <113095366+edizor@users.noreply.github.com> Date: Fri, 14 Apr 2023 17:10:41 +0800 Subject: [PATCH 096/390] Update README.md [skip ci] --- spring-boot-modules/spring-boot-data-3/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/spring-boot-modules/spring-boot-data-3/README.md b/spring-boot-modules/spring-boot-data-3/README.md index 39598948530d..edb9394277f3 100644 --- a/spring-boot-modules/spring-boot-data-3/README.md +++ b/spring-boot-modules/spring-boot-data-3/README.md @@ -1,2 +1,3 @@ ### Relevant Articles: - [Spring Data JPA – Run an App Without a Database](https://www.baeldung.com/spring-data-jpa-run-app-without-db) +- [Integrate AWS Secrets Manager in Spring Boot](https://www.baeldung.com/spring-boot-integrate-aws-secrets-manager) From b69bbef6ec5259464e3e604354293324b1757c06 Mon Sep 17 00:00:00 2001 From: edizor <113095366+edizor@users.noreply.github.com> Date: Fri, 14 Apr 2023 17:15:13 +0800 Subject: [PATCH 097/390] Update README.md [skip ci] --- mapstruct/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/mapstruct/README.md b/mapstruct/README.md index 384bcbaa14d6..46a9f8b2136a 100644 --- a/mapstruct/README.md +++ b/mapstruct/README.md @@ -9,3 +9,4 @@ This module contains articles about MapStruct. - [Using Multiple Source Objects with MapStruct](https://www.baeldung.com/mapstruct-multiple-source-objects) - [Ignoring Unmapped Properties with MapStruct](https://www.baeldung.com/mapstruct-ignore-unmapped-properties) - [Mapping Collections with MapStruct](https://www.baeldung.com/java-mapstruct-mapping-collections) +- [Use Mapper in Another Mapper with Mapstruct and Java](https://www.baeldung.com/java-mapstruct-nested-mapping) From 5dda6c5b3e3bb67e127945d9d3054f260eef957f Mon Sep 17 00:00:00 2001 From: edizor <113095366+edizor@users.noreply.github.com> Date: Fri, 14 Apr 2023 17:27:27 +0800 Subject: [PATCH 098/390] Update README.md [skip ci] --- testing-modules/selenium-junit-testng/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/testing-modules/selenium-junit-testng/README.md b/testing-modules/selenium-junit-testng/README.md index 65eb26905642..ab8024ff457e 100644 --- a/testing-modules/selenium-junit-testng/README.md +++ b/testing-modules/selenium-junit-testng/README.md @@ -8,6 +8,7 @@ - [Running Selenium Scripts with JMeter](https://www.baeldung.com/selenium-jmeter) - [Fixing Selenium WebDriver Executable Path Error](https://www.baeldung.com/java-selenium-webdriver-path-error) - [Handle Browser Tabs With Selenium](https://www.baeldung.com/java-handle-browser-tabs-selenium) +- [Implicit Wait vs Explicit Wait in Selenium Webdriver](https://www.baeldung.com/selenium-implicit-explicit-wait) #### Notes: - to run the live tests for the article *Fixing Selenium WebDriver Executable Path Error*, follow the manual setup described From 162a62f35c8750a8e8fa51c7121ca4e3c204cf12 Mon Sep 17 00:00:00 2001 From: panos-kakos <102670093+panos-kakos@users.noreply.github.com> Date: Fri, 14 Apr 2023 16:08:12 +0300 Subject: [PATCH 099/390] [JAVA-15018] Removed redundant apache httpclient dependency + added commons-codec (#13828) --- core-java-modules/core-java-networking-2/pom.xml | 8 ++++---- .../java/com/baeldung/url/auth/HttpClient.java | 4 ++-- .../com/baeldung/url/auth/HttpClientLiveTest.java | 14 +++++++------- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/core-java-modules/core-java-networking-2/pom.xml b/core-java-modules/core-java-networking-2/pom.xml index 982f4fa3463c..34f16a993875 100644 --- a/core-java-modules/core-java-networking-2/pom.xml +++ b/core-java-modules/core-java-networking-2/pom.xml @@ -15,9 +15,9 @@ - org.apache.httpcomponents - httpclient - ${httpclient.version} + commons-codec + commons-codec + ${commons-codec.version} org.apache.commons @@ -52,11 +52,11 @@ - 4.5.9 2.0.1 2.4.5 2.3.3 2.0.0-alpha-3 + 1.15 \ No newline at end of file diff --git a/core-java-modules/core-java-networking-2/src/main/java/com/baeldung/url/auth/HttpClient.java b/core-java-modules/core-java-networking-2/src/main/java/com/baeldung/url/auth/HttpClient.java index 779f8aa89859..f9d747a133a2 100644 --- a/core-java-modules/core-java-networking-2/src/main/java/com/baeldung/url/auth/HttpClient.java +++ b/core-java-modules/core-java-networking-2/src/main/java/com/baeldung/url/auth/HttpClient.java @@ -21,7 +21,7 @@ public HttpClient(String user, String password) { this.password = password; } - public int sendRquestWithAuthHeader(String url) throws IOException { + public int sendRequestWithAuthHeader(String url) throws IOException { HttpURLConnection connection = null; try { connection = createConnection(url); @@ -34,7 +34,7 @@ public int sendRquestWithAuthHeader(String url) throws IOException { } } - public int sendRquestWithAuthenticator(String url) throws IOException { + public int sendRequestWithAuthenticator(String url) throws IOException { setAuthenticator(); HttpURLConnection connection = null; diff --git a/core-java-modules/core-java-networking-2/src/test/java/com/baeldung/url/auth/HttpClientLiveTest.java b/core-java-modules/core-java-networking-2/src/test/java/com/baeldung/url/auth/HttpClientLiveTest.java index 01d580bc654e..387b22895344 100644 --- a/core-java-modules/core-java-networking-2/src/test/java/com/baeldung/url/auth/HttpClientLiveTest.java +++ b/core-java-modules/core-java-networking-2/src/test/java/com/baeldung/url/auth/HttpClientLiveTest.java @@ -7,28 +7,28 @@ public class HttpClientLiveTest { @Test - public void sendRquestWithAuthHeader() throws Exception { + public void sendRequestWithAuthHeader() throws Exception { HttpClient httpClient = new HttpClient("user1", "pass1"); - int status = httpClient.sendRquestWithAuthHeader("https://httpbin.org/basic-auth/user1/pass1"); + int status = httpClient.sendRequestWithAuthHeader("https://httpbin.org/basic-auth/user1/pass1"); assertTrue(isSuccess(status)); } @Test - public void sendRquestWithAuthHeader_whenIncorrectCredentials_thenNotSuccessful() throws Exception { + public void sendRequestWithAuthHeader_whenIncorrectCredentials_thenNotSuccessful() throws Exception { HttpClient httpClient = new HttpClient("John", "Smith"); - int status = httpClient.sendRquestWithAuthHeader("https://httpbin.org/basic-auth/user1/pass1"); + int status = httpClient.sendRequestWithAuthHeader("https://httpbin.org/basic-auth/user1/pass1"); assertTrue(isUnauthorized(status)); } @Test - public void sendRquestWithAuthenticator() throws Exception { + public void sendRequestWithAuthenticator() throws Exception { HttpClient httpClient = new HttpClient("user2", "pass2"); - int status = httpClient.sendRquestWithAuthenticator("https://httpbin.org/basic-auth/user2/pass2"); + int status = httpClient.sendRequestWithAuthenticator("https://httpbin.org/basic-auth/user2/pass2"); assertTrue(isSuccess(status)); } @@ -37,7 +37,7 @@ public void sendRquestWithAuthenticator() throws Exception { public void sendRquestWithAuthenticator_whenIncorrectCredentials_thenNotSuccessful() throws Exception { HttpClient httpClient = new HttpClient("John", "Smith"); - int status = httpClient.sendRquestWithAuthenticator("https://httpbin.org/basic-auth/user2/pass2"); + int status = httpClient.sendRequestWithAuthenticator("https://httpbin.org/basic-auth/user2/pass2"); assertTrue(isUnauthorized(status)); } From fa754156bd01a1687f23628eb3770e13814a2aa9 Mon Sep 17 00:00:00 2001 From: panos-kakos <102670093+panos-kakos@users.noreply.github.com> Date: Fri, 14 Apr 2023 16:15:10 +0300 Subject: [PATCH 100/390] [JAVA-18183] Added jaxb dependency (#13833) --- spring-boot-rest/pom.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/spring-boot-rest/pom.xml b/spring-boot-rest/pom.xml index 81c9ebbec8ba..46563b725fdd 100644 --- a/spring-boot-rest/pom.xml +++ b/spring-boot-rest/pom.xml @@ -143,6 +143,11 @@ + + org.glassfish.jaxb + jaxb-runtime + ${jaxb-runtime.version} + @@ -159,5 +164,6 @@ 1.4.11.1 3.1.0 3.3.2 + 2.3.7 From 5b9e023fd3516895fe5b80380ce19e22af9af99b Mon Sep 17 00:00:00 2001 From: panos-kakos <102670093+panos-kakos@users.noreply.github.com> Date: Fri, 14 Apr 2023 16:18:26 +0300 Subject: [PATCH 101/390] [JAVA-15031] Upgraded code for apache httpclient + moved old version to apache-httpclient4 module. (#13830) --- .../HttpClientCancelRequestLiveTest.java | 40 +++++++++++++ .../httpclient/base/HttpClientLiveTest.java | 29 +--------- apache-httpclient4/README.md | 1 + .../HttpClientCancelRequestV4LiveTest.java | 57 +++++++++++++++++++ 4 files changed, 99 insertions(+), 28 deletions(-) create mode 100644 apache-httpclient/src/test/java/com/baeldung/httpclient/HttpClientCancelRequestLiveTest.java create mode 100644 apache-httpclient4/src/test/java/com/baeldung/httpclient/HttpClientCancelRequestV4LiveTest.java diff --git a/apache-httpclient/src/test/java/com/baeldung/httpclient/HttpClientCancelRequestLiveTest.java b/apache-httpclient/src/test/java/com/baeldung/httpclient/HttpClientCancelRequestLiveTest.java new file mode 100644 index 000000000000..d19e0e1d86cc --- /dev/null +++ b/apache-httpclient/src/test/java/com/baeldung/httpclient/HttpClientCancelRequestLiveTest.java @@ -0,0 +1,40 @@ +package com.baeldung.httpclient; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.io.IOException; + +import org.apache.hc.client5.http.classic.methods.HttpGet; +import org.apache.hc.client5.http.impl.classic.CloseableHttpClient; +import org.apache.hc.client5.http.impl.classic.HttpClients; +import org.apache.hc.core5.http.HttpEntity; +import org.apache.hc.core5.http.HttpStatus; +import org.junit.jupiter.api.Test; + +class HttpClientCancelRequestLiveTest { + + private static final String SAMPLE_URL = "http://www.github.com"; + + @Test + void whenRequestIsCanceled_thenCorrect() throws IOException { + HttpGet request = new HttpGet(SAMPLE_URL); + try (CloseableHttpClient httpClient = HttpClients.createDefault()) { + httpClient.execute(request, response -> { + HttpEntity entity = response.getEntity(); + + System.out.println("----------------------------------------"); + System.out.println(response.getCode()); + if (entity != null) { + System.out.println("Response content length: " + entity.getContentLength()); + } + System.out.println("----------------------------------------"); + // Do not feel like reading the response body + // Call abort on the request object + request.abort(); + + assertThat(response.getCode()).isEqualTo(HttpStatus.SC_OK); + return response; + }); + } + } +} diff --git a/apache-httpclient/src/test/java/com/baeldung/httpclient/base/HttpClientLiveTest.java b/apache-httpclient/src/test/java/com/baeldung/httpclient/base/HttpClientLiveTest.java index ef12c37412f8..4173909f7deb 100644 --- a/apache-httpclient/src/test/java/com/baeldung/httpclient/base/HttpClientLiveTest.java +++ b/apache-httpclient/src/test/java/com/baeldung/httpclient/base/HttpClientLiveTest.java @@ -1,8 +1,8 @@ package com.baeldung.httpclient.base; import com.baeldung.httpclient.ResponseUtil; + import org.apache.http.Header; -import org.apache.http.HttpEntity; import org.apache.http.HttpHeaders; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.CloseableHttpResponse; @@ -10,7 +10,6 @@ import org.apache.http.conn.ConnectTimeoutException; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClientBuilder; -import org.apache.http.impl.client.HttpClients; import org.apache.http.impl.conn.BasicHttpClientConnectionManager; import org.junit.After; import org.junit.Before; @@ -73,30 +72,4 @@ public final void givenRequestWasSet_whenAnalyzingTheHeadersOfTheResponse_thenCo assertThat(headers, not(emptyArray())); } - // tests - cancel request - - @Test - public final void whenRequestIsCanceled_thenCorrect() throws IOException { - instance = HttpClients.custom().build(); - final HttpGet request = new HttpGet(SAMPLE_URL); - response = instance.execute(request); - - try { - final HttpEntity entity = response.getEntity(); - - System.out.println("----------------------------------------"); - System.out.println(response.getStatusLine()); - if (entity != null) { - System.out.println("Response content length: " + entity.getContentLength()); - } - System.out.println("----------------------------------------"); - - // Do not feel like reading the response body - // Call abort on the request object - request.abort(); - } finally { - response.close(); - } - } - } diff --git a/apache-httpclient4/README.md b/apache-httpclient4/README.md index 9c18e0624343..22b0391e6b29 100644 --- a/apache-httpclient4/README.md +++ b/apache-httpclient4/README.md @@ -4,6 +4,7 @@ This module contains articles about Apache HttpClient 4.5 ### Relevant Articles +- [Apache HttpClient – Cancel Request](https://www.baeldung.com/httpclient-cancel-request) - [Apache HttpClient with SSL](https://www.baeldung.com/httpclient-ssl) - [Apache HttpClient Timeout](https://www.baeldung.com/httpclient-timeout) - [Custom HTTP Header with the Apache HttpClient](https://www.baeldung.com/httpclient-custom-http-header) diff --git a/apache-httpclient4/src/test/java/com/baeldung/httpclient/HttpClientCancelRequestV4LiveTest.java b/apache-httpclient4/src/test/java/com/baeldung/httpclient/HttpClientCancelRequestV4LiveTest.java new file mode 100644 index 000000000000..226a7b8cf7da --- /dev/null +++ b/apache-httpclient4/src/test/java/com/baeldung/httpclient/HttpClientCancelRequestV4LiveTest.java @@ -0,0 +1,57 @@ +package com.baeldung.httpclient; + +import java.io.IOException; + +import org.apache.http.HttpEntity; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.http.impl.client.HttpClients; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +public class HttpClientCancelRequestV4LiveTest { + + private static final String SAMPLE_URL = "http://www.github.com"; + + private CloseableHttpClient instance; + + private CloseableHttpResponse response; + + @Before + public final void before() { + instance = HttpClientBuilder.create().build(); + } + + @After + public final void after() throws IllegalStateException, IOException { + ResponseUtil.closeResponse(response); + } + + @Test + public final void whenRequestIsCanceled_thenCorrect() throws IOException { + instance = HttpClients.custom().build(); + final HttpGet request = new HttpGet(SAMPLE_URL); + response = instance.execute(request); + + try { + final HttpEntity entity = response.getEntity(); + + System.out.println("----------------------------------------"); + System.out.println(response.getStatusLine()); + if (entity != null) { + System.out.println("Response content length: " + entity.getContentLength()); + } + System.out.println("----------------------------------------"); + + // Do not feel like reading the response body + // Call abort on the request object + request.abort(); + } finally { + response.close(); + } + } +} From f8c4970951a655407b6aa3a7a0f6ffd4974e7067 Mon Sep 17 00:00:00 2001 From: anuragkumawat Date: Fri, 14 Apr 2023 19:12:08 +0530 Subject: [PATCH 102/390] Java 19533 fix failing integration test (#13835) * JAVA-19533 Fix references to parents - Week 14 - 2023 (moved-1) * JAVA-19533 Fix references to parents - Week 14 - 2023 (moved-1) * JAVA-19533 Fix failing integration test --- spring-boot-modules/spring-boot-redis/pom.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/spring-boot-modules/spring-boot-redis/pom.xml b/spring-boot-modules/spring-boot-redis/pom.xml index 42dba1de2fbc..5b85ad00cadb 100644 --- a/spring-boot-modules/spring-boot-redis/pom.xml +++ b/spring-boot-modules/spring-boot-redis/pom.xml @@ -37,6 +37,12 @@ it.ozimov embedded-redis + + + org.slf4j + slf4j-simple + + 0.7.3 test From 6f64f6e9358e4bb026a069c29f8b33f457e29ce2 Mon Sep 17 00:00:00 2001 From: Mihail Polivaha <68962645+Mihail2048@users.noreply.github.com> Date: Fri, 14 Apr 2023 18:50:02 +0300 Subject: [PATCH 103/390] BAEL-6278 rename IntegrationTest class to LiveTest (#13841) * misha2048 Retrying Requests using Apache HttpClient * BAEL-6278 rename IntegrationTest class to LiveTest --- ...yIntegrationTest.java => ApacheHttpClientRetryLiveTest.java} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename apache-httpclient4/src/test/java/com/baeldung/httpclient/retry/{ApacheHttpClientRetryIntegrationTest.java => ApacheHttpClientRetryLiveTest.java} (99%) diff --git a/apache-httpclient4/src/test/java/com/baeldung/httpclient/retry/ApacheHttpClientRetryIntegrationTest.java b/apache-httpclient4/src/test/java/com/baeldung/httpclient/retry/ApacheHttpClientRetryLiveTest.java similarity index 99% rename from apache-httpclient4/src/test/java/com/baeldung/httpclient/retry/ApacheHttpClientRetryIntegrationTest.java rename to apache-httpclient4/src/test/java/com/baeldung/httpclient/retry/ApacheHttpClientRetryLiveTest.java index cfb51f058aa3..3a8ff252c275 100644 --- a/apache-httpclient4/src/test/java/com/baeldung/httpclient/retry/ApacheHttpClientRetryIntegrationTest.java +++ b/apache-httpclient4/src/test/java/com/baeldung/httpclient/retry/ApacheHttpClientRetryLiveTest.java @@ -24,7 +24,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -public class ApacheHttpClientRetryIntegrationTest { +public class ApacheHttpClientRetryLiveTest { private Integer requestCounter; private CloseableHttpClient httpClient; From 70094d0d06394e0f070c66fff58c6fbd8efb15c1 Mon Sep 17 00:00:00 2001 From: Bipin kumar Date: Sat, 15 Apr 2023 09:43:07 +0530 Subject: [PATCH 104/390] Java 18150 (#13818) * JAVA-18158 : Changes made in pom.xml upgrade maven-modules to JDK 11 * JAVA-18158 : Changes made in pom.xml upgrade maven-modules to JDK 11 * JAVA-18158 : Handle MutabilityAnalysisException by adding @Test(expected = Exception.class) while upgrading the module to java-11 * JAVA-18150: Changes made for commenting whenModifying_shouldCreateNewInstance test case as assertImmutable is not work * JAVA-18150: Changes made for moving libraries-3 to default-jdk9-and-above and integration-jdk9-and-above * JAVA-18150: Changes made for moving ignoring whenModifying_shouldCreateNewInstance test case --------- Co-authored-by: Dhawal Kapil --- libraries-3/pom.xml | 41 ++++--------------- .../immutable/ImmutablePersonUnitTest.java | 7 ++++ pom.xml | 6 ++- 3 files changed, 18 insertions(+), 36 deletions(-) diff --git a/libraries-3/pom.xml b/libraries-3/pom.xml index daa01108f67f..5e06a5550e4e 100644 --- a/libraries-3/pom.xml +++ b/libraries-3/pom.xml @@ -122,6 +122,11 @@ ${mutabilitydetector.version} test + + javax.annotation + javax.annotation-api + 1.3.2 + @@ -161,42 +166,10 @@ org.apache.maven.plugins maven-compiler-plugin - 3.5 - javac-with-errorprone - true - 1.8 - 1.8 - true - - - com.uber.nullaway - nullaway - 0.3.0 - - - - - - - -XepExcludedPaths:(.*)/test/.*|(.*)/jcabi/.* - -XepOpt:NullAway:AnnotatedPackages=com.baeldung.nullaway - + 11 + 11 - - - org.codehaus.plexus - plexus-compiler-javac-errorprone - 2.8 - - - - - com.google.errorprone - error_prone_core - 2.3.4 - - diff --git a/libraries-3/src/test/java/com/baeldung/immutable/ImmutablePersonUnitTest.java b/libraries-3/src/test/java/com/baeldung/immutable/ImmutablePersonUnitTest.java index 222cbfd8ef8a..b9164ed92b9a 100644 --- a/libraries-3/src/test/java/com/baeldung/immutable/ImmutablePersonUnitTest.java +++ b/libraries-3/src/test/java/com/baeldung/immutable/ImmutablePersonUnitTest.java @@ -1,5 +1,6 @@ package com.baeldung.immutable; +import org.junit.Ignore; import org.junit.Test; import static org.assertj.core.api.Assertions.assertThat; @@ -7,6 +8,12 @@ public class ImmutablePersonUnitTest { + /** + * commenting the test case, As after upgrading to java 11 + * assertImmutable is giving exception. Raised the issue to Mutability support team + * https://github.com/MutabilityDetector/MutabilityDetector/issues/196 + */ + @Ignore @Test public void whenModifying_shouldCreateNewInstance() throws Exception { final ImmutablePerson john = ImmutablePerson.builder() diff --git a/pom.xml b/pom.xml index 0800f22937d7..6f79e56ba17c 100644 --- a/pom.xml +++ b/pom.xml @@ -359,7 +359,7 @@ jetbrains language-interop - libraries-3 + libraries-jdk8 lombok-modules/lombok-custom @@ -551,7 +551,7 @@ language-interop - libraries-3 + libraries-jdk8 lombok-modules/lombok-custom @@ -947,6 +947,7 @@ persistence-modules/questdb vaadin + libraries-3 @@ -1200,6 +1201,7 @@ persistence-modules/questdb vaadin + libraries-3 From 15c2286dff49ab343d9418c253a7b927a477625a Mon Sep 17 00:00:00 2001 From: Dhawal Kapil Date: Sat, 15 Apr 2023 10:01:14 +0530 Subject: [PATCH 105/390] JAVA-20211 Renamed modules (#13827) * JAVA-20211 Renamed modules * JAVA-20211 Renamed modules --- .../{lambda => lambda-function}/pom.xml | 0 .../sam-templates/template-implicit.yaml | 0 .../sam-templates/template-inline-swagger.yaml | 0 .../com/baeldung/lambda/LambdaMethodHandler.java | 0 .../com/baeldung/lambda/LambdaRequestHandler.java | 0 .../baeldung/lambda/LambdaRequestStreamHandler.java | 0 .../baeldung/lambda/apigateway/APIDemoHandler.java | 0 .../com/baeldung/lambda/apigateway/model/Person.java | 0 .../baeldung/lambda/dynamodb/SavePersonHandler.java | 0 .../baeldung/lambda/dynamodb/bean/PersonRequest.java | 0 .../lambda/dynamodb/bean/PersonResponse.java | 0 .../src/main/resources/logback.xml | 0 aws-modules/aws-lambda-modules/pom.xml | 6 +++--- .../.gitignore | 0 .../ShippingFunction/pom.xml | 0 .../main/java/com/baeldung/lambda/shipping/App.java | 0 .../java/com/baeldung/lambda/shipping/Checkin.java | 0 .../com/baeldung/lambda/shipping/Consignment.java | 0 .../main/java/com/baeldung/lambda/shipping/Item.java | 0 .../com/baeldung/lambda/shipping/ShippingDao.java | 0 .../baeldung/lambda/shipping/ShippingService.java | 0 .../template.yaml | 0 .../ToDoFunction/pom.xml | 0 .../src/main/java/com/baeldung/lambda/todo/App.java | 0 .../java/com/baeldung/lambda/todo/api/PostApi.java | 0 .../java/com/baeldung/lambda/todo/api/PostItem.java | 0 .../java/com/baeldung/lambda/todo/api/ToDoApi.java | 0 .../java/com/baeldung/lambda/todo/api/ToDoItem.java | 0 .../java/com/baeldung/lambda/todo/config/Config.java | 0 .../com/baeldung/lambda/todo/config/Credentials.java | 0 .../lambda/todo/config/ExecutionContext.java | 0 .../com/baeldung/lambda/todo/config/Services.java | 0 .../baeldung/lambda/todo/service/PostService.java | 0 .../lambda/todo/service/ToDoReaderService.java | 0 .../src/main/resources/configuration.yml | 0 .../ToDoFunction/src/main/resources/log4j2.xml | 0 .../java/com/baeldung/lambda/todo/AppUnitTest.java | 0 .../todo/service/ToDoReaderServiceUnitTest.java | 0 .../template.yaml | 0 {checker-plugin => checker-framework}/README.md | 0 {checker-plugin => checker-framework}/pom.xml | 4 ++-- .../com/baeldung/typechecker/FakeNumExample.java | 0 .../java/com/baeldung/typechecker/FormatExample.java | 0 .../java/com/baeldung/typechecker/KeyForExample.java | 0 .../typechecker/MonotonicNotNullExample.java | 0 .../com/baeldung/typechecker/NonNullExample.java | 0 .../java/com/baeldung/typechecker/RegexExample.java | 0 .../src/main/resources/logback.xml | 0 clojure-modules/{ring => clojure-ring}/.gitignore | 0 clojure-modules/{ring => clojure-ring}/README.md | 0 clojure-modules/{ring => clojure-ring}/project.clj | 0 .../{ring => clojure-ring}/src/ring/core.clj | 0 core-java-modules/core-java-jpms/pom.xml | 5 ++--- .../consumermodule2/pom.xml | 4 ++-- .../com/baeldung/consumermodule/Application.java | 0 .../consumermodule2/src/main/java/module-info.java | 0 .../pom.xml | 4 ++-- .../providermodule/pom.xml | 4 ++-- .../providermodule/LowercaseTextService.java | 0 .../providermodule/src/main/java/module-info.java | 0 .../servicemodule2/pom.xml | 4 ++-- .../java/com/baeldung/servicemodule/TextService.java | 0 .../servicemodule2/src/main/java/module-info.java | 0 .../consumermodule1/pom.xml | 4 ++-- .../com/baeldung/consumermodule/Application.java | 0 .../consumermodule1/src/main/java/module-info.java | 0 .../pom.xml | 4 ++-- .../servicemodule1/pom.xml | 4 ++-- .../baeldung/servicemodule/external/TextService.java | 0 .../servicemodule/external/TextServiceFactory.java | 0 .../servicemodule/internal/LowercaseTextService.java | 0 .../servicemodule/internal/UppercaseTextService.java | 0 .../servicemodule1/src/main/java/module-info.java | 0 .../{core => core-module}/pom.xml | 2 +- .../java/com/baeldung/maven_caching/CoreClass.java | 0 .../docker-caching/multi-module-caching/pom.xml | 4 ++-- .../{runner => runner-module}/pom.xml | 4 ++-- .../maven_caching/MavenCachingApplication.java | 0 {code-generation => google-auto-project}/README.md | 0 {code-generation => google-auto-project}/pom.xml | 4 ++-- .../src/main/java/com/baeldung/autofactory/App.java | 0 .../java/com/baeldung/autofactory/CustomStorage.java | 0 .../baeldung/autofactory/custom/AbstractFactory.java | 0 .../com/baeldung/autofactory/custom/CustomPhone.java | 0 .../com/baeldung/autofactory/custom/SmartPhone.java | 0 .../java/com/baeldung/autofactory/model/Camera.java | 0 .../com/baeldung/autofactory/model/ClassicPhone.java | 0 .../java/com/baeldung/autofactory/model/Phone.java | 0 .../autofactory/modules/SonyCameraModule.java | 0 .../autofactory/provided/IntermediateAssembler.java | 0 .../autofactory/provider/SonyCameraProvider.java | 0 .../autoservice/BingTranslationServiceProvider.java | 0 .../GoogleTranslationServiceProvider.java | 0 .../com/baeldung/autoservice/TranslationService.java | 0 .../java/com/baeldung/autovalue/AutoValueMoney.java | 0 .../autovalue/AutoValueMoneyWithBuilder.java | 0 .../src/main/java/com/baeldung/autovalue/Foo.java | 0 .../java/com/baeldung/autovalue/ImmutableMoney.java | 0 .../java/com/baeldung/autovalue/MutableMoney.java | 0 .../src/main/java/com/baeldung/autovalue/Person.java | 0 .../src/main/resources/logback.xml | 0 .../autoservice/TranslationServiceUnitTest.java | 0 .../java/com/baeldung/autovalue/MoneyUnitTest.java | 0 .../java/com/baeldung/autovalue/PersonUnitTest.java | 0 pom.xml | 12 ++++++------ 105 files changed, 34 insertions(+), 35 deletions(-) rename aws-modules/aws-lambda-modules/{lambda => lambda-function}/pom.xml (100%) rename aws-modules/aws-lambda-modules/{lambda => lambda-function}/sam-templates/template-implicit.yaml (100%) rename aws-modules/aws-lambda-modules/{lambda => lambda-function}/sam-templates/template-inline-swagger.yaml (100%) rename aws-modules/aws-lambda-modules/{lambda => lambda-function}/src/main/java/com/baeldung/lambda/LambdaMethodHandler.java (100%) rename aws-modules/aws-lambda-modules/{lambda => lambda-function}/src/main/java/com/baeldung/lambda/LambdaRequestHandler.java (100%) rename aws-modules/aws-lambda-modules/{lambda => lambda-function}/src/main/java/com/baeldung/lambda/LambdaRequestStreamHandler.java (100%) rename aws-modules/aws-lambda-modules/{lambda => lambda-function}/src/main/java/com/baeldung/lambda/apigateway/APIDemoHandler.java (100%) rename aws-modules/aws-lambda-modules/{lambda => lambda-function}/src/main/java/com/baeldung/lambda/apigateway/model/Person.java (100%) rename aws-modules/aws-lambda-modules/{lambda => lambda-function}/src/main/java/com/baeldung/lambda/dynamodb/SavePersonHandler.java (100%) rename aws-modules/aws-lambda-modules/{lambda => lambda-function}/src/main/java/com/baeldung/lambda/dynamodb/bean/PersonRequest.java (100%) rename aws-modules/aws-lambda-modules/{lambda => lambda-function}/src/main/java/com/baeldung/lambda/dynamodb/bean/PersonResponse.java (100%) rename aws-modules/aws-lambda-modules/{lambda => lambda-function}/src/main/resources/logback.xml (100%) rename aws-modules/aws-lambda-modules/{shipping-tracker => shipping-tracker-lambda}/.gitignore (100%) rename aws-modules/aws-lambda-modules/{shipping-tracker => shipping-tracker-lambda}/ShippingFunction/pom.xml (100%) rename aws-modules/aws-lambda-modules/{shipping-tracker => shipping-tracker-lambda}/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/App.java (100%) rename aws-modules/aws-lambda-modules/{shipping-tracker => shipping-tracker-lambda}/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/Checkin.java (100%) rename aws-modules/aws-lambda-modules/{shipping-tracker => shipping-tracker-lambda}/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/Consignment.java (100%) rename aws-modules/aws-lambda-modules/{shipping-tracker => shipping-tracker-lambda}/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/Item.java (100%) rename aws-modules/aws-lambda-modules/{shipping-tracker => shipping-tracker-lambda}/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/ShippingDao.java (100%) rename aws-modules/aws-lambda-modules/{shipping-tracker => shipping-tracker-lambda}/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/ShippingService.java (100%) rename aws-modules/aws-lambda-modules/{shipping-tracker => shipping-tracker-lambda}/template.yaml (100%) rename aws-modules/aws-lambda-modules/{todo-reminder => todo-reminder-lambda}/ToDoFunction/pom.xml (100%) rename aws-modules/aws-lambda-modules/{todo-reminder => todo-reminder-lambda}/ToDoFunction/src/main/java/com/baeldung/lambda/todo/App.java (100%) rename aws-modules/aws-lambda-modules/{todo-reminder => todo-reminder-lambda}/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/PostApi.java (100%) rename aws-modules/aws-lambda-modules/{todo-reminder => todo-reminder-lambda}/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/PostItem.java (100%) rename aws-modules/aws-lambda-modules/{todo-reminder => todo-reminder-lambda}/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/ToDoApi.java (100%) rename aws-modules/aws-lambda-modules/{todo-reminder => todo-reminder-lambda}/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/ToDoItem.java (100%) rename aws-modules/aws-lambda-modules/{todo-reminder => todo-reminder-lambda}/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/Config.java (100%) rename aws-modules/aws-lambda-modules/{todo-reminder => todo-reminder-lambda}/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/Credentials.java (100%) rename aws-modules/aws-lambda-modules/{todo-reminder => todo-reminder-lambda}/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/ExecutionContext.java (100%) rename aws-modules/aws-lambda-modules/{todo-reminder => todo-reminder-lambda}/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/Services.java (100%) rename aws-modules/aws-lambda-modules/{todo-reminder => todo-reminder-lambda}/ToDoFunction/src/main/java/com/baeldung/lambda/todo/service/PostService.java (100%) rename aws-modules/aws-lambda-modules/{todo-reminder => todo-reminder-lambda}/ToDoFunction/src/main/java/com/baeldung/lambda/todo/service/ToDoReaderService.java (100%) rename aws-modules/aws-lambda-modules/{todo-reminder => todo-reminder-lambda}/ToDoFunction/src/main/resources/configuration.yml (100%) rename aws-modules/aws-lambda-modules/{todo-reminder => todo-reminder-lambda}/ToDoFunction/src/main/resources/log4j2.xml (100%) rename aws-modules/aws-lambda-modules/{todo-reminder => todo-reminder-lambda}/ToDoFunction/src/test/java/com/baeldung/lambda/todo/AppUnitTest.java (100%) rename aws-modules/aws-lambda-modules/{todo-reminder => todo-reminder-lambda}/ToDoFunction/src/test/java/com/baeldung/lambda/todo/service/ToDoReaderServiceUnitTest.java (100%) rename aws-modules/aws-lambda-modules/{todo-reminder => todo-reminder-lambda}/template.yaml (100%) rename {checker-plugin => checker-framework}/README.md (100%) rename {checker-plugin => checker-framework}/pom.xml (98%) rename {checker-plugin => checker-framework}/src/main/java/com/baeldung/typechecker/FakeNumExample.java (100%) rename {checker-plugin => checker-framework}/src/main/java/com/baeldung/typechecker/FormatExample.java (100%) rename {checker-plugin => checker-framework}/src/main/java/com/baeldung/typechecker/KeyForExample.java (100%) rename {checker-plugin => checker-framework}/src/main/java/com/baeldung/typechecker/MonotonicNotNullExample.java (100%) rename {checker-plugin => checker-framework}/src/main/java/com/baeldung/typechecker/NonNullExample.java (100%) rename {checker-plugin => checker-framework}/src/main/java/com/baeldung/typechecker/RegexExample.java (100%) rename {checker-plugin => checker-framework}/src/main/resources/logback.xml (100%) rename clojure-modules/{ring => clojure-ring}/.gitignore (100%) rename clojure-modules/{ring => clojure-ring}/README.md (100%) rename clojure-modules/{ring => clojure-ring}/project.clj (100%) rename clojure-modules/{ring => clojure-ring}/src/ring/core.clj (100%) rename core-java-modules/core-java-jpms/{decoupling-pattern2 => service-loader-api-pattern}/consumermodule2/pom.xml (92%) rename core-java-modules/core-java-jpms/{decoupling-pattern2 => service-loader-api-pattern}/consumermodule2/src/main/java/com/baeldung/consumermodule/Application.java (100%) rename core-java-modules/core-java-jpms/{decoupling-pattern2 => service-loader-api-pattern}/consumermodule2/src/main/java/module-info.java (100%) rename core-java-modules/core-java-jpms/{decoupling-pattern2 => service-loader-api-pattern}/pom.xml (92%) rename core-java-modules/core-java-jpms/{decoupling-pattern2 => service-loader-api-pattern}/providermodule/pom.xml (91%) rename core-java-modules/core-java-jpms/{decoupling-pattern2 => service-loader-api-pattern}/providermodule/src/main/java/com/baeldung/providermodule/LowercaseTextService.java (100%) rename core-java-modules/core-java-jpms/{decoupling-pattern2 => service-loader-api-pattern}/providermodule/src/main/java/module-info.java (100%) rename core-java-modules/core-java-jpms/{decoupling-pattern2 => service-loader-api-pattern}/servicemodule2/pom.xml (88%) rename core-java-modules/core-java-jpms/{decoupling-pattern2 => service-loader-api-pattern}/servicemodule2/src/main/java/com/baeldung/servicemodule/TextService.java (100%) rename core-java-modules/core-java-jpms/{decoupling-pattern2 => service-loader-api-pattern}/servicemodule2/src/main/java/module-info.java (100%) rename core-java-modules/core-java-jpms/{decoupling-pattern1 => service-provider-factory-pattern}/consumermodule1/pom.xml (89%) rename core-java-modules/core-java-jpms/{decoupling-pattern1 => service-provider-factory-pattern}/consumermodule1/src/main/java/com/baeldung/consumermodule/Application.java (100%) rename core-java-modules/core-java-jpms/{decoupling-pattern1 => service-provider-factory-pattern}/consumermodule1/src/main/java/module-info.java (100%) rename core-java-modules/core-java-jpms/{decoupling-pattern1 => service-provider-factory-pattern}/pom.xml (91%) rename core-java-modules/core-java-jpms/{decoupling-pattern1 => service-provider-factory-pattern}/servicemodule1/pom.xml (86%) rename core-java-modules/core-java-jpms/{decoupling-pattern1 => service-provider-factory-pattern}/servicemodule1/src/main/java/com/baeldung/servicemodule/external/TextService.java (100%) rename core-java-modules/core-java-jpms/{decoupling-pattern1 => service-provider-factory-pattern}/servicemodule1/src/main/java/com/baeldung/servicemodule/external/TextServiceFactory.java (100%) rename core-java-modules/core-java-jpms/{decoupling-pattern1 => service-provider-factory-pattern}/servicemodule1/src/main/java/com/baeldung/servicemodule/internal/LowercaseTextService.java (100%) rename core-java-modules/core-java-jpms/{decoupling-pattern1 => service-provider-factory-pattern}/servicemodule1/src/main/java/com/baeldung/servicemodule/internal/UppercaseTextService.java (100%) rename core-java-modules/core-java-jpms/{decoupling-pattern1 => service-provider-factory-pattern}/servicemodule1/src/main/java/module-info.java (100%) rename docker-modules/docker-caching/multi-module-caching/{core => core-module}/pom.xml (95%) rename docker-modules/docker-caching/multi-module-caching/{core => core-module}/src/main/java/com/baeldung/maven_caching/CoreClass.java (100%) rename docker-modules/docker-caching/multi-module-caching/{runner => runner-module}/pom.xml (95%) rename docker-modules/docker-caching/multi-module-caching/{runner => runner-module}/src/main/java/com/baeldung/maven_caching/MavenCachingApplication.java (100%) rename {code-generation => google-auto-project}/README.md (100%) rename {code-generation => google-auto-project}/pom.xml (96%) rename {code-generation => google-auto-project}/src/main/java/com/baeldung/autofactory/App.java (100%) rename {code-generation => google-auto-project}/src/main/java/com/baeldung/autofactory/CustomStorage.java (100%) rename {code-generation => google-auto-project}/src/main/java/com/baeldung/autofactory/custom/AbstractFactory.java (100%) rename {code-generation => google-auto-project}/src/main/java/com/baeldung/autofactory/custom/CustomPhone.java (100%) rename {code-generation => google-auto-project}/src/main/java/com/baeldung/autofactory/custom/SmartPhone.java (100%) rename {code-generation => google-auto-project}/src/main/java/com/baeldung/autofactory/model/Camera.java (100%) rename {code-generation => google-auto-project}/src/main/java/com/baeldung/autofactory/model/ClassicPhone.java (100%) rename {code-generation => google-auto-project}/src/main/java/com/baeldung/autofactory/model/Phone.java (100%) rename {code-generation => google-auto-project}/src/main/java/com/baeldung/autofactory/modules/SonyCameraModule.java (100%) rename {code-generation => google-auto-project}/src/main/java/com/baeldung/autofactory/provided/IntermediateAssembler.java (100%) rename {code-generation => google-auto-project}/src/main/java/com/baeldung/autofactory/provider/SonyCameraProvider.java (100%) rename {code-generation => google-auto-project}/src/main/java/com/baeldung/autoservice/BingTranslationServiceProvider.java (100%) rename {code-generation => google-auto-project}/src/main/java/com/baeldung/autoservice/GoogleTranslationServiceProvider.java (100%) rename {code-generation => google-auto-project}/src/main/java/com/baeldung/autoservice/TranslationService.java (100%) rename {code-generation => google-auto-project}/src/main/java/com/baeldung/autovalue/AutoValueMoney.java (100%) rename {code-generation => google-auto-project}/src/main/java/com/baeldung/autovalue/AutoValueMoneyWithBuilder.java (100%) rename {code-generation => google-auto-project}/src/main/java/com/baeldung/autovalue/Foo.java (100%) rename {code-generation => google-auto-project}/src/main/java/com/baeldung/autovalue/ImmutableMoney.java (100%) rename {code-generation => google-auto-project}/src/main/java/com/baeldung/autovalue/MutableMoney.java (100%) rename {code-generation => google-auto-project}/src/main/java/com/baeldung/autovalue/Person.java (100%) rename {code-generation => google-auto-project}/src/main/resources/logback.xml (100%) rename {code-generation => google-auto-project}/src/test/java/com/baeldung/autoservice/TranslationServiceUnitTest.java (100%) rename {code-generation => google-auto-project}/src/test/java/com/baeldung/autovalue/MoneyUnitTest.java (100%) rename {code-generation => google-auto-project}/src/test/java/com/baeldung/autovalue/PersonUnitTest.java (100%) diff --git a/aws-modules/aws-lambda-modules/lambda/pom.xml b/aws-modules/aws-lambda-modules/lambda-function/pom.xml similarity index 100% rename from aws-modules/aws-lambda-modules/lambda/pom.xml rename to aws-modules/aws-lambda-modules/lambda-function/pom.xml diff --git a/aws-modules/aws-lambda-modules/lambda/sam-templates/template-implicit.yaml b/aws-modules/aws-lambda-modules/lambda-function/sam-templates/template-implicit.yaml similarity index 100% rename from aws-modules/aws-lambda-modules/lambda/sam-templates/template-implicit.yaml rename to aws-modules/aws-lambda-modules/lambda-function/sam-templates/template-implicit.yaml diff --git a/aws-modules/aws-lambda-modules/lambda/sam-templates/template-inline-swagger.yaml b/aws-modules/aws-lambda-modules/lambda-function/sam-templates/template-inline-swagger.yaml similarity index 100% rename from aws-modules/aws-lambda-modules/lambda/sam-templates/template-inline-swagger.yaml rename to aws-modules/aws-lambda-modules/lambda-function/sam-templates/template-inline-swagger.yaml diff --git a/aws-modules/aws-lambda-modules/lambda/src/main/java/com/baeldung/lambda/LambdaMethodHandler.java b/aws-modules/aws-lambda-modules/lambda-function/src/main/java/com/baeldung/lambda/LambdaMethodHandler.java similarity index 100% rename from aws-modules/aws-lambda-modules/lambda/src/main/java/com/baeldung/lambda/LambdaMethodHandler.java rename to aws-modules/aws-lambda-modules/lambda-function/src/main/java/com/baeldung/lambda/LambdaMethodHandler.java diff --git a/aws-modules/aws-lambda-modules/lambda/src/main/java/com/baeldung/lambda/LambdaRequestHandler.java b/aws-modules/aws-lambda-modules/lambda-function/src/main/java/com/baeldung/lambda/LambdaRequestHandler.java similarity index 100% rename from aws-modules/aws-lambda-modules/lambda/src/main/java/com/baeldung/lambda/LambdaRequestHandler.java rename to aws-modules/aws-lambda-modules/lambda-function/src/main/java/com/baeldung/lambda/LambdaRequestHandler.java diff --git a/aws-modules/aws-lambda-modules/lambda/src/main/java/com/baeldung/lambda/LambdaRequestStreamHandler.java b/aws-modules/aws-lambda-modules/lambda-function/src/main/java/com/baeldung/lambda/LambdaRequestStreamHandler.java similarity index 100% rename from aws-modules/aws-lambda-modules/lambda/src/main/java/com/baeldung/lambda/LambdaRequestStreamHandler.java rename to aws-modules/aws-lambda-modules/lambda-function/src/main/java/com/baeldung/lambda/LambdaRequestStreamHandler.java diff --git a/aws-modules/aws-lambda-modules/lambda/src/main/java/com/baeldung/lambda/apigateway/APIDemoHandler.java b/aws-modules/aws-lambda-modules/lambda-function/src/main/java/com/baeldung/lambda/apigateway/APIDemoHandler.java similarity index 100% rename from aws-modules/aws-lambda-modules/lambda/src/main/java/com/baeldung/lambda/apigateway/APIDemoHandler.java rename to aws-modules/aws-lambda-modules/lambda-function/src/main/java/com/baeldung/lambda/apigateway/APIDemoHandler.java diff --git a/aws-modules/aws-lambda-modules/lambda/src/main/java/com/baeldung/lambda/apigateway/model/Person.java b/aws-modules/aws-lambda-modules/lambda-function/src/main/java/com/baeldung/lambda/apigateway/model/Person.java similarity index 100% rename from aws-modules/aws-lambda-modules/lambda/src/main/java/com/baeldung/lambda/apigateway/model/Person.java rename to aws-modules/aws-lambda-modules/lambda-function/src/main/java/com/baeldung/lambda/apigateway/model/Person.java diff --git a/aws-modules/aws-lambda-modules/lambda/src/main/java/com/baeldung/lambda/dynamodb/SavePersonHandler.java b/aws-modules/aws-lambda-modules/lambda-function/src/main/java/com/baeldung/lambda/dynamodb/SavePersonHandler.java similarity index 100% rename from aws-modules/aws-lambda-modules/lambda/src/main/java/com/baeldung/lambda/dynamodb/SavePersonHandler.java rename to aws-modules/aws-lambda-modules/lambda-function/src/main/java/com/baeldung/lambda/dynamodb/SavePersonHandler.java diff --git a/aws-modules/aws-lambda-modules/lambda/src/main/java/com/baeldung/lambda/dynamodb/bean/PersonRequest.java b/aws-modules/aws-lambda-modules/lambda-function/src/main/java/com/baeldung/lambda/dynamodb/bean/PersonRequest.java similarity index 100% rename from aws-modules/aws-lambda-modules/lambda/src/main/java/com/baeldung/lambda/dynamodb/bean/PersonRequest.java rename to aws-modules/aws-lambda-modules/lambda-function/src/main/java/com/baeldung/lambda/dynamodb/bean/PersonRequest.java diff --git a/aws-modules/aws-lambda-modules/lambda/src/main/java/com/baeldung/lambda/dynamodb/bean/PersonResponse.java b/aws-modules/aws-lambda-modules/lambda-function/src/main/java/com/baeldung/lambda/dynamodb/bean/PersonResponse.java similarity index 100% rename from aws-modules/aws-lambda-modules/lambda/src/main/java/com/baeldung/lambda/dynamodb/bean/PersonResponse.java rename to aws-modules/aws-lambda-modules/lambda-function/src/main/java/com/baeldung/lambda/dynamodb/bean/PersonResponse.java diff --git a/aws-modules/aws-lambda-modules/lambda/src/main/resources/logback.xml b/aws-modules/aws-lambda-modules/lambda-function/src/main/resources/logback.xml similarity index 100% rename from aws-modules/aws-lambda-modules/lambda/src/main/resources/logback.xml rename to aws-modules/aws-lambda-modules/lambda-function/src/main/resources/logback.xml diff --git a/aws-modules/aws-lambda-modules/pom.xml b/aws-modules/aws-lambda-modules/pom.xml index 23fb348631b8..9886ff58d299 100644 --- a/aws-modules/aws-lambda-modules/pom.xml +++ b/aws-modules/aws-lambda-modules/pom.xml @@ -14,9 +14,9 @@ - lambda - shipping-tracker/ShippingFunction - todo-reminder/ToDoFunction + lambda-function + shipping-tracker-lambda/ShippingFunction + todo-reminder-lambda/ToDoFunction \ No newline at end of file diff --git a/aws-modules/aws-lambda-modules/shipping-tracker/.gitignore b/aws-modules/aws-lambda-modules/shipping-tracker-lambda/.gitignore similarity index 100% rename from aws-modules/aws-lambda-modules/shipping-tracker/.gitignore rename to aws-modules/aws-lambda-modules/shipping-tracker-lambda/.gitignore diff --git a/aws-modules/aws-lambda-modules/shipping-tracker/ShippingFunction/pom.xml b/aws-modules/aws-lambda-modules/shipping-tracker-lambda/ShippingFunction/pom.xml similarity index 100% rename from aws-modules/aws-lambda-modules/shipping-tracker/ShippingFunction/pom.xml rename to aws-modules/aws-lambda-modules/shipping-tracker-lambda/ShippingFunction/pom.xml diff --git a/aws-modules/aws-lambda-modules/shipping-tracker/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/App.java b/aws-modules/aws-lambda-modules/shipping-tracker-lambda/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/App.java similarity index 100% rename from aws-modules/aws-lambda-modules/shipping-tracker/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/App.java rename to aws-modules/aws-lambda-modules/shipping-tracker-lambda/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/App.java diff --git a/aws-modules/aws-lambda-modules/shipping-tracker/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/Checkin.java b/aws-modules/aws-lambda-modules/shipping-tracker-lambda/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/Checkin.java similarity index 100% rename from aws-modules/aws-lambda-modules/shipping-tracker/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/Checkin.java rename to aws-modules/aws-lambda-modules/shipping-tracker-lambda/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/Checkin.java diff --git a/aws-modules/aws-lambda-modules/shipping-tracker/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/Consignment.java b/aws-modules/aws-lambda-modules/shipping-tracker-lambda/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/Consignment.java similarity index 100% rename from aws-modules/aws-lambda-modules/shipping-tracker/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/Consignment.java rename to aws-modules/aws-lambda-modules/shipping-tracker-lambda/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/Consignment.java diff --git a/aws-modules/aws-lambda-modules/shipping-tracker/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/Item.java b/aws-modules/aws-lambda-modules/shipping-tracker-lambda/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/Item.java similarity index 100% rename from aws-modules/aws-lambda-modules/shipping-tracker/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/Item.java rename to aws-modules/aws-lambda-modules/shipping-tracker-lambda/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/Item.java diff --git a/aws-modules/aws-lambda-modules/shipping-tracker/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/ShippingDao.java b/aws-modules/aws-lambda-modules/shipping-tracker-lambda/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/ShippingDao.java similarity index 100% rename from aws-modules/aws-lambda-modules/shipping-tracker/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/ShippingDao.java rename to aws-modules/aws-lambda-modules/shipping-tracker-lambda/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/ShippingDao.java diff --git a/aws-modules/aws-lambda-modules/shipping-tracker/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/ShippingService.java b/aws-modules/aws-lambda-modules/shipping-tracker-lambda/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/ShippingService.java similarity index 100% rename from aws-modules/aws-lambda-modules/shipping-tracker/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/ShippingService.java rename to aws-modules/aws-lambda-modules/shipping-tracker-lambda/ShippingFunction/src/main/java/com/baeldung/lambda/shipping/ShippingService.java diff --git a/aws-modules/aws-lambda-modules/shipping-tracker/template.yaml b/aws-modules/aws-lambda-modules/shipping-tracker-lambda/template.yaml similarity index 100% rename from aws-modules/aws-lambda-modules/shipping-tracker/template.yaml rename to aws-modules/aws-lambda-modules/shipping-tracker-lambda/template.yaml diff --git a/aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/pom.xml b/aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/pom.xml similarity index 100% rename from aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/pom.xml rename to aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/pom.xml diff --git a/aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/App.java b/aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/src/main/java/com/baeldung/lambda/todo/App.java similarity index 100% rename from aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/App.java rename to aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/src/main/java/com/baeldung/lambda/todo/App.java diff --git a/aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/PostApi.java b/aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/PostApi.java similarity index 100% rename from aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/PostApi.java rename to aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/PostApi.java diff --git a/aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/PostItem.java b/aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/PostItem.java similarity index 100% rename from aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/PostItem.java rename to aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/PostItem.java diff --git a/aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/ToDoApi.java b/aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/ToDoApi.java similarity index 100% rename from aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/ToDoApi.java rename to aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/ToDoApi.java diff --git a/aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/ToDoItem.java b/aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/ToDoItem.java similarity index 100% rename from aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/ToDoItem.java rename to aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/src/main/java/com/baeldung/lambda/todo/api/ToDoItem.java diff --git a/aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/Config.java b/aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/Config.java similarity index 100% rename from aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/Config.java rename to aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/Config.java diff --git a/aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/Credentials.java b/aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/Credentials.java similarity index 100% rename from aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/Credentials.java rename to aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/Credentials.java diff --git a/aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/ExecutionContext.java b/aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/ExecutionContext.java similarity index 100% rename from aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/ExecutionContext.java rename to aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/ExecutionContext.java diff --git a/aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/Services.java b/aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/Services.java similarity index 100% rename from aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/Services.java rename to aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/src/main/java/com/baeldung/lambda/todo/config/Services.java diff --git a/aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/service/PostService.java b/aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/src/main/java/com/baeldung/lambda/todo/service/PostService.java similarity index 100% rename from aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/service/PostService.java rename to aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/src/main/java/com/baeldung/lambda/todo/service/PostService.java diff --git a/aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/service/ToDoReaderService.java b/aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/src/main/java/com/baeldung/lambda/todo/service/ToDoReaderService.java similarity index 100% rename from aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/main/java/com/baeldung/lambda/todo/service/ToDoReaderService.java rename to aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/src/main/java/com/baeldung/lambda/todo/service/ToDoReaderService.java diff --git a/aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/main/resources/configuration.yml b/aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/src/main/resources/configuration.yml similarity index 100% rename from aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/main/resources/configuration.yml rename to aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/src/main/resources/configuration.yml diff --git a/aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/main/resources/log4j2.xml b/aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/src/main/resources/log4j2.xml similarity index 100% rename from aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/main/resources/log4j2.xml rename to aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/src/main/resources/log4j2.xml diff --git a/aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/test/java/com/baeldung/lambda/todo/AppUnitTest.java b/aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/src/test/java/com/baeldung/lambda/todo/AppUnitTest.java similarity index 100% rename from aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/test/java/com/baeldung/lambda/todo/AppUnitTest.java rename to aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/src/test/java/com/baeldung/lambda/todo/AppUnitTest.java diff --git a/aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/test/java/com/baeldung/lambda/todo/service/ToDoReaderServiceUnitTest.java b/aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/src/test/java/com/baeldung/lambda/todo/service/ToDoReaderServiceUnitTest.java similarity index 100% rename from aws-modules/aws-lambda-modules/todo-reminder/ToDoFunction/src/test/java/com/baeldung/lambda/todo/service/ToDoReaderServiceUnitTest.java rename to aws-modules/aws-lambda-modules/todo-reminder-lambda/ToDoFunction/src/test/java/com/baeldung/lambda/todo/service/ToDoReaderServiceUnitTest.java diff --git a/aws-modules/aws-lambda-modules/todo-reminder/template.yaml b/aws-modules/aws-lambda-modules/todo-reminder-lambda/template.yaml similarity index 100% rename from aws-modules/aws-lambda-modules/todo-reminder/template.yaml rename to aws-modules/aws-lambda-modules/todo-reminder-lambda/template.yaml diff --git a/checker-plugin/README.md b/checker-framework/README.md similarity index 100% rename from checker-plugin/README.md rename to checker-framework/README.md diff --git a/checker-plugin/pom.xml b/checker-framework/pom.xml similarity index 98% rename from checker-plugin/pom.xml rename to checker-framework/pom.xml index e90dcf271e65..a348745343c5 100644 --- a/checker-plugin/pom.xml +++ b/checker-framework/pom.xml @@ -3,9 +3,9 @@ xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 - checker-plugin + checker-framework 1.0-SNAPSHOT - checker-plugin + checker-framework jar diff --git a/checker-plugin/src/main/java/com/baeldung/typechecker/FakeNumExample.java b/checker-framework/src/main/java/com/baeldung/typechecker/FakeNumExample.java similarity index 100% rename from checker-plugin/src/main/java/com/baeldung/typechecker/FakeNumExample.java rename to checker-framework/src/main/java/com/baeldung/typechecker/FakeNumExample.java diff --git a/checker-plugin/src/main/java/com/baeldung/typechecker/FormatExample.java b/checker-framework/src/main/java/com/baeldung/typechecker/FormatExample.java similarity index 100% rename from checker-plugin/src/main/java/com/baeldung/typechecker/FormatExample.java rename to checker-framework/src/main/java/com/baeldung/typechecker/FormatExample.java diff --git a/checker-plugin/src/main/java/com/baeldung/typechecker/KeyForExample.java b/checker-framework/src/main/java/com/baeldung/typechecker/KeyForExample.java similarity index 100% rename from checker-plugin/src/main/java/com/baeldung/typechecker/KeyForExample.java rename to checker-framework/src/main/java/com/baeldung/typechecker/KeyForExample.java diff --git a/checker-plugin/src/main/java/com/baeldung/typechecker/MonotonicNotNullExample.java b/checker-framework/src/main/java/com/baeldung/typechecker/MonotonicNotNullExample.java similarity index 100% rename from checker-plugin/src/main/java/com/baeldung/typechecker/MonotonicNotNullExample.java rename to checker-framework/src/main/java/com/baeldung/typechecker/MonotonicNotNullExample.java diff --git a/checker-plugin/src/main/java/com/baeldung/typechecker/NonNullExample.java b/checker-framework/src/main/java/com/baeldung/typechecker/NonNullExample.java similarity index 100% rename from checker-plugin/src/main/java/com/baeldung/typechecker/NonNullExample.java rename to checker-framework/src/main/java/com/baeldung/typechecker/NonNullExample.java diff --git a/checker-plugin/src/main/java/com/baeldung/typechecker/RegexExample.java b/checker-framework/src/main/java/com/baeldung/typechecker/RegexExample.java similarity index 100% rename from checker-plugin/src/main/java/com/baeldung/typechecker/RegexExample.java rename to checker-framework/src/main/java/com/baeldung/typechecker/RegexExample.java diff --git a/checker-plugin/src/main/resources/logback.xml b/checker-framework/src/main/resources/logback.xml similarity index 100% rename from checker-plugin/src/main/resources/logback.xml rename to checker-framework/src/main/resources/logback.xml diff --git a/clojure-modules/ring/.gitignore b/clojure-modules/clojure-ring/.gitignore similarity index 100% rename from clojure-modules/ring/.gitignore rename to clojure-modules/clojure-ring/.gitignore diff --git a/clojure-modules/ring/README.md b/clojure-modules/clojure-ring/README.md similarity index 100% rename from clojure-modules/ring/README.md rename to clojure-modules/clojure-ring/README.md diff --git a/clojure-modules/ring/project.clj b/clojure-modules/clojure-ring/project.clj similarity index 100% rename from clojure-modules/ring/project.clj rename to clojure-modules/clojure-ring/project.clj diff --git a/clojure-modules/ring/src/ring/core.clj b/clojure-modules/clojure-ring/src/ring/core.clj similarity index 100% rename from clojure-modules/ring/src/ring/core.clj rename to clojure-modules/clojure-ring/src/ring/core.clj diff --git a/core-java-modules/core-java-jpms/pom.xml b/core-java-modules/core-java-jpms/pom.xml index 62aa49f29956..3cfa0e3f454e 100644 --- a/core-java-modules/core-java-jpms/pom.xml +++ b/core-java-modules/core-java-jpms/pom.xml @@ -4,7 +4,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 core-java-jpms - 0.0.1-SNAPSHOT core-java-jpms pom @@ -15,8 +14,8 @@ - decoupling-pattern1 - decoupling-pattern2 + service-provider-factory-pattern + service-loader-api-pattern diff --git a/core-java-modules/core-java-jpms/decoupling-pattern2/consumermodule2/pom.xml b/core-java-modules/core-java-jpms/service-loader-api-pattern/consumermodule2/pom.xml similarity index 92% rename from core-java-modules/core-java-jpms/decoupling-pattern2/consumermodule2/pom.xml rename to core-java-modules/core-java-jpms/service-loader-api-pattern/consumermodule2/pom.xml index 13d0b2d201a7..f928912ffdfe 100644 --- a/core-java-modules/core-java-jpms/decoupling-pattern2/consumermodule2/pom.xml +++ b/core-java-modules/core-java-jpms/service-loader-api-pattern/consumermodule2/pom.xml @@ -8,8 +8,8 @@ 1.0 - com.baeldung.decoupling-pattern2 - decoupling-pattern2 + com.baeldung.service-loader-api-pattern + service-loader-api-pattern 1.0-SNAPSHOT diff --git a/core-java-modules/core-java-jpms/decoupling-pattern2/consumermodule2/src/main/java/com/baeldung/consumermodule/Application.java b/core-java-modules/core-java-jpms/service-loader-api-pattern/consumermodule2/src/main/java/com/baeldung/consumermodule/Application.java similarity index 100% rename from core-java-modules/core-java-jpms/decoupling-pattern2/consumermodule2/src/main/java/com/baeldung/consumermodule/Application.java rename to core-java-modules/core-java-jpms/service-loader-api-pattern/consumermodule2/src/main/java/com/baeldung/consumermodule/Application.java diff --git a/core-java-modules/core-java-jpms/decoupling-pattern2/consumermodule2/src/main/java/module-info.java b/core-java-modules/core-java-jpms/service-loader-api-pattern/consumermodule2/src/main/java/module-info.java similarity index 100% rename from core-java-modules/core-java-jpms/decoupling-pattern2/consumermodule2/src/main/java/module-info.java rename to core-java-modules/core-java-jpms/service-loader-api-pattern/consumermodule2/src/main/java/module-info.java diff --git a/core-java-modules/core-java-jpms/decoupling-pattern2/pom.xml b/core-java-modules/core-java-jpms/service-loader-api-pattern/pom.xml similarity index 92% rename from core-java-modules/core-java-jpms/decoupling-pattern2/pom.xml rename to core-java-modules/core-java-jpms/service-loader-api-pattern/pom.xml index 5b2e4cfc8289..13a443eab5cb 100644 --- a/core-java-modules/core-java-jpms/decoupling-pattern2/pom.xml +++ b/core-java-modules/core-java-jpms/service-loader-api-pattern/pom.xml @@ -3,8 +3,8 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - com.baeldung.decoupling-pattern2 - decoupling-pattern2 + com.baeldung.service-loader-api-pattern + service-loader-api-pattern 1.0-SNAPSHOT pom diff --git a/core-java-modules/core-java-jpms/decoupling-pattern2/providermodule/pom.xml b/core-java-modules/core-java-jpms/service-loader-api-pattern/providermodule/pom.xml similarity index 91% rename from core-java-modules/core-java-jpms/decoupling-pattern2/providermodule/pom.xml rename to core-java-modules/core-java-jpms/service-loader-api-pattern/providermodule/pom.xml index ddb8aeccd13b..bcee01f63194 100644 --- a/core-java-modules/core-java-jpms/decoupling-pattern2/providermodule/pom.xml +++ b/core-java-modules/core-java-jpms/service-loader-api-pattern/providermodule/pom.xml @@ -8,8 +8,8 @@ 1.0 - com.baeldung.decoupling-pattern2 - decoupling-pattern2 + com.baeldung.service-loader-api-pattern + service-loader-api-pattern 1.0-SNAPSHOT diff --git a/core-java-modules/core-java-jpms/decoupling-pattern2/providermodule/src/main/java/com/baeldung/providermodule/LowercaseTextService.java b/core-java-modules/core-java-jpms/service-loader-api-pattern/providermodule/src/main/java/com/baeldung/providermodule/LowercaseTextService.java similarity index 100% rename from core-java-modules/core-java-jpms/decoupling-pattern2/providermodule/src/main/java/com/baeldung/providermodule/LowercaseTextService.java rename to core-java-modules/core-java-jpms/service-loader-api-pattern/providermodule/src/main/java/com/baeldung/providermodule/LowercaseTextService.java diff --git a/core-java-modules/core-java-jpms/decoupling-pattern2/providermodule/src/main/java/module-info.java b/core-java-modules/core-java-jpms/service-loader-api-pattern/providermodule/src/main/java/module-info.java similarity index 100% rename from core-java-modules/core-java-jpms/decoupling-pattern2/providermodule/src/main/java/module-info.java rename to core-java-modules/core-java-jpms/service-loader-api-pattern/providermodule/src/main/java/module-info.java diff --git a/core-java-modules/core-java-jpms/decoupling-pattern2/servicemodule2/pom.xml b/core-java-modules/core-java-jpms/service-loader-api-pattern/servicemodule2/pom.xml similarity index 88% rename from core-java-modules/core-java-jpms/decoupling-pattern2/servicemodule2/pom.xml rename to core-java-modules/core-java-jpms/service-loader-api-pattern/servicemodule2/pom.xml index 06ef9000926f..f40745541ba3 100644 --- a/core-java-modules/core-java-jpms/decoupling-pattern2/servicemodule2/pom.xml +++ b/core-java-modules/core-java-jpms/service-loader-api-pattern/servicemodule2/pom.xml @@ -8,8 +8,8 @@ 1.0 - com.baeldung.decoupling-pattern2 - decoupling-pattern2 + com.baeldung.service-loader-api-pattern + service-loader-api-pattern 1.0-SNAPSHOT diff --git a/core-java-modules/core-java-jpms/decoupling-pattern2/servicemodule2/src/main/java/com/baeldung/servicemodule/TextService.java b/core-java-modules/core-java-jpms/service-loader-api-pattern/servicemodule2/src/main/java/com/baeldung/servicemodule/TextService.java similarity index 100% rename from core-java-modules/core-java-jpms/decoupling-pattern2/servicemodule2/src/main/java/com/baeldung/servicemodule/TextService.java rename to core-java-modules/core-java-jpms/service-loader-api-pattern/servicemodule2/src/main/java/com/baeldung/servicemodule/TextService.java diff --git a/core-java-modules/core-java-jpms/decoupling-pattern2/servicemodule2/src/main/java/module-info.java b/core-java-modules/core-java-jpms/service-loader-api-pattern/servicemodule2/src/main/java/module-info.java similarity index 100% rename from core-java-modules/core-java-jpms/decoupling-pattern2/servicemodule2/src/main/java/module-info.java rename to core-java-modules/core-java-jpms/service-loader-api-pattern/servicemodule2/src/main/java/module-info.java diff --git a/core-java-modules/core-java-jpms/decoupling-pattern1/consumermodule1/pom.xml b/core-java-modules/core-java-jpms/service-provider-factory-pattern/consumermodule1/pom.xml similarity index 89% rename from core-java-modules/core-java-jpms/decoupling-pattern1/consumermodule1/pom.xml rename to core-java-modules/core-java-jpms/service-provider-factory-pattern/consumermodule1/pom.xml index f82e72b85dfa..ba92733f34fa 100644 --- a/core-java-modules/core-java-jpms/decoupling-pattern1/consumermodule1/pom.xml +++ b/core-java-modules/core-java-jpms/service-provider-factory-pattern/consumermodule1/pom.xml @@ -8,8 +8,8 @@ jar - com.baeldung.decoupling-pattern1 - decoupling-pattern1 + com.baeldung.service-provider-factory-pattern + service-provider-factory-pattern 1.0-SNAPSHOT diff --git a/core-java-modules/core-java-jpms/decoupling-pattern1/consumermodule1/src/main/java/com/baeldung/consumermodule/Application.java b/core-java-modules/core-java-jpms/service-provider-factory-pattern/consumermodule1/src/main/java/com/baeldung/consumermodule/Application.java similarity index 100% rename from core-java-modules/core-java-jpms/decoupling-pattern1/consumermodule1/src/main/java/com/baeldung/consumermodule/Application.java rename to core-java-modules/core-java-jpms/service-provider-factory-pattern/consumermodule1/src/main/java/com/baeldung/consumermodule/Application.java diff --git a/core-java-modules/core-java-jpms/decoupling-pattern1/consumermodule1/src/main/java/module-info.java b/core-java-modules/core-java-jpms/service-provider-factory-pattern/consumermodule1/src/main/java/module-info.java similarity index 100% rename from core-java-modules/core-java-jpms/decoupling-pattern1/consumermodule1/src/main/java/module-info.java rename to core-java-modules/core-java-jpms/service-provider-factory-pattern/consumermodule1/src/main/java/module-info.java diff --git a/core-java-modules/core-java-jpms/decoupling-pattern1/pom.xml b/core-java-modules/core-java-jpms/service-provider-factory-pattern/pom.xml similarity index 91% rename from core-java-modules/core-java-jpms/decoupling-pattern1/pom.xml rename to core-java-modules/core-java-jpms/service-provider-factory-pattern/pom.xml index 2121b46b82d5..35a99123120e 100644 --- a/core-java-modules/core-java-jpms/decoupling-pattern1/pom.xml +++ b/core-java-modules/core-java-jpms/service-provider-factory-pattern/pom.xml @@ -3,8 +3,8 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - com.baeldung.decoupling-pattern1 - decoupling-pattern1 + com.baeldung.service-provider-factory-pattern + service-provider-factory-pattern 1.0-SNAPSHOT pom diff --git a/core-java-modules/core-java-jpms/decoupling-pattern1/servicemodule1/pom.xml b/core-java-modules/core-java-jpms/service-provider-factory-pattern/servicemodule1/pom.xml similarity index 86% rename from core-java-modules/core-java-jpms/decoupling-pattern1/servicemodule1/pom.xml rename to core-java-modules/core-java-jpms/service-provider-factory-pattern/servicemodule1/pom.xml index fc4b5854f993..d6e50ee9ff4f 100644 --- a/core-java-modules/core-java-jpms/decoupling-pattern1/servicemodule1/pom.xml +++ b/core-java-modules/core-java-jpms/service-provider-factory-pattern/servicemodule1/pom.xml @@ -9,8 +9,8 @@ jar - com.baeldung.decoupling-pattern1 - decoupling-pattern1 + com.baeldung.service-provider-factory-pattern + service-provider-factory-pattern 1.0-SNAPSHOT diff --git a/core-java-modules/core-java-jpms/decoupling-pattern1/servicemodule1/src/main/java/com/baeldung/servicemodule/external/TextService.java b/core-java-modules/core-java-jpms/service-provider-factory-pattern/servicemodule1/src/main/java/com/baeldung/servicemodule/external/TextService.java similarity index 100% rename from core-java-modules/core-java-jpms/decoupling-pattern1/servicemodule1/src/main/java/com/baeldung/servicemodule/external/TextService.java rename to core-java-modules/core-java-jpms/service-provider-factory-pattern/servicemodule1/src/main/java/com/baeldung/servicemodule/external/TextService.java diff --git a/core-java-modules/core-java-jpms/decoupling-pattern1/servicemodule1/src/main/java/com/baeldung/servicemodule/external/TextServiceFactory.java b/core-java-modules/core-java-jpms/service-provider-factory-pattern/servicemodule1/src/main/java/com/baeldung/servicemodule/external/TextServiceFactory.java similarity index 100% rename from core-java-modules/core-java-jpms/decoupling-pattern1/servicemodule1/src/main/java/com/baeldung/servicemodule/external/TextServiceFactory.java rename to core-java-modules/core-java-jpms/service-provider-factory-pattern/servicemodule1/src/main/java/com/baeldung/servicemodule/external/TextServiceFactory.java diff --git a/core-java-modules/core-java-jpms/decoupling-pattern1/servicemodule1/src/main/java/com/baeldung/servicemodule/internal/LowercaseTextService.java b/core-java-modules/core-java-jpms/service-provider-factory-pattern/servicemodule1/src/main/java/com/baeldung/servicemodule/internal/LowercaseTextService.java similarity index 100% rename from core-java-modules/core-java-jpms/decoupling-pattern1/servicemodule1/src/main/java/com/baeldung/servicemodule/internal/LowercaseTextService.java rename to core-java-modules/core-java-jpms/service-provider-factory-pattern/servicemodule1/src/main/java/com/baeldung/servicemodule/internal/LowercaseTextService.java diff --git a/core-java-modules/core-java-jpms/decoupling-pattern1/servicemodule1/src/main/java/com/baeldung/servicemodule/internal/UppercaseTextService.java b/core-java-modules/core-java-jpms/service-provider-factory-pattern/servicemodule1/src/main/java/com/baeldung/servicemodule/internal/UppercaseTextService.java similarity index 100% rename from core-java-modules/core-java-jpms/decoupling-pattern1/servicemodule1/src/main/java/com/baeldung/servicemodule/internal/UppercaseTextService.java rename to core-java-modules/core-java-jpms/service-provider-factory-pattern/servicemodule1/src/main/java/com/baeldung/servicemodule/internal/UppercaseTextService.java diff --git a/core-java-modules/core-java-jpms/decoupling-pattern1/servicemodule1/src/main/java/module-info.java b/core-java-modules/core-java-jpms/service-provider-factory-pattern/servicemodule1/src/main/java/module-info.java similarity index 100% rename from core-java-modules/core-java-jpms/decoupling-pattern1/servicemodule1/src/main/java/module-info.java rename to core-java-modules/core-java-jpms/service-provider-factory-pattern/servicemodule1/src/main/java/module-info.java diff --git a/docker-modules/docker-caching/multi-module-caching/core/pom.xml b/docker-modules/docker-caching/multi-module-caching/core-module/pom.xml similarity index 95% rename from docker-modules/docker-caching/multi-module-caching/core/pom.xml rename to docker-modules/docker-caching/multi-module-caching/core-module/pom.xml index bcfc4b5783c3..159d76830bb8 100644 --- a/docker-modules/docker-caching/multi-module-caching/core/pom.xml +++ b/docker-modules/docker-caching/multi-module-caching/core-module/pom.xml @@ -3,7 +3,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - core + core-module multi-module-caching diff --git a/docker-modules/docker-caching/multi-module-caching/core/src/main/java/com/baeldung/maven_caching/CoreClass.java b/docker-modules/docker-caching/multi-module-caching/core-module/src/main/java/com/baeldung/maven_caching/CoreClass.java similarity index 100% rename from docker-modules/docker-caching/multi-module-caching/core/src/main/java/com/baeldung/maven_caching/CoreClass.java rename to docker-modules/docker-caching/multi-module-caching/core-module/src/main/java/com/baeldung/maven_caching/CoreClass.java diff --git a/docker-modules/docker-caching/multi-module-caching/pom.xml b/docker-modules/docker-caching/multi-module-caching/pom.xml index 1fdd6173bc76..b64cf1a8b8dc 100644 --- a/docker-modules/docker-caching/multi-module-caching/pom.xml +++ b/docker-modules/docker-caching/multi-module-caching/pom.xml @@ -10,8 +10,8 @@ pom - runner - core + runner-module + core-module diff --git a/docker-modules/docker-caching/multi-module-caching/runner/pom.xml b/docker-modules/docker-caching/multi-module-caching/runner-module/pom.xml similarity index 95% rename from docker-modules/docker-caching/multi-module-caching/runner/pom.xml rename to docker-modules/docker-caching/multi-module-caching/runner-module/pom.xml index e3f234bac07b..e60870686418 100644 --- a/docker-modules/docker-caching/multi-module-caching/runner/pom.xml +++ b/docker-modules/docker-caching/multi-module-caching/runner-module/pom.xml @@ -3,7 +3,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - runner + runner-module multi-module-caching @@ -14,7 +14,7 @@ com.baeldung - core + core-module 0.0.1-SNAPSHOT diff --git a/docker-modules/docker-caching/multi-module-caching/runner/src/main/java/com/baeldung/maven_caching/MavenCachingApplication.java b/docker-modules/docker-caching/multi-module-caching/runner-module/src/main/java/com/baeldung/maven_caching/MavenCachingApplication.java similarity index 100% rename from docker-modules/docker-caching/multi-module-caching/runner/src/main/java/com/baeldung/maven_caching/MavenCachingApplication.java rename to docker-modules/docker-caching/multi-module-caching/runner-module/src/main/java/com/baeldung/maven_caching/MavenCachingApplication.java diff --git a/code-generation/README.md b/google-auto-project/README.md similarity index 100% rename from code-generation/README.md rename to google-auto-project/README.md diff --git a/code-generation/pom.xml b/google-auto-project/pom.xml similarity index 96% rename from code-generation/pom.xml rename to google-auto-project/pom.xml index ed8890e1dd64..839ccabc5fa4 100644 --- a/code-generation/pom.xml +++ b/google-auto-project/pom.xml @@ -3,9 +3,9 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 - code-generation + google-auto-project 1.0 - code-generation + google-auto-project com.baeldung diff --git a/code-generation/src/main/java/com/baeldung/autofactory/App.java b/google-auto-project/src/main/java/com/baeldung/autofactory/App.java similarity index 100% rename from code-generation/src/main/java/com/baeldung/autofactory/App.java rename to google-auto-project/src/main/java/com/baeldung/autofactory/App.java diff --git a/code-generation/src/main/java/com/baeldung/autofactory/CustomStorage.java b/google-auto-project/src/main/java/com/baeldung/autofactory/CustomStorage.java similarity index 100% rename from code-generation/src/main/java/com/baeldung/autofactory/CustomStorage.java rename to google-auto-project/src/main/java/com/baeldung/autofactory/CustomStorage.java diff --git a/code-generation/src/main/java/com/baeldung/autofactory/custom/AbstractFactory.java b/google-auto-project/src/main/java/com/baeldung/autofactory/custom/AbstractFactory.java similarity index 100% rename from code-generation/src/main/java/com/baeldung/autofactory/custom/AbstractFactory.java rename to google-auto-project/src/main/java/com/baeldung/autofactory/custom/AbstractFactory.java diff --git a/code-generation/src/main/java/com/baeldung/autofactory/custom/CustomPhone.java b/google-auto-project/src/main/java/com/baeldung/autofactory/custom/CustomPhone.java similarity index 100% rename from code-generation/src/main/java/com/baeldung/autofactory/custom/CustomPhone.java rename to google-auto-project/src/main/java/com/baeldung/autofactory/custom/CustomPhone.java diff --git a/code-generation/src/main/java/com/baeldung/autofactory/custom/SmartPhone.java b/google-auto-project/src/main/java/com/baeldung/autofactory/custom/SmartPhone.java similarity index 100% rename from code-generation/src/main/java/com/baeldung/autofactory/custom/SmartPhone.java rename to google-auto-project/src/main/java/com/baeldung/autofactory/custom/SmartPhone.java diff --git a/code-generation/src/main/java/com/baeldung/autofactory/model/Camera.java b/google-auto-project/src/main/java/com/baeldung/autofactory/model/Camera.java similarity index 100% rename from code-generation/src/main/java/com/baeldung/autofactory/model/Camera.java rename to google-auto-project/src/main/java/com/baeldung/autofactory/model/Camera.java diff --git a/code-generation/src/main/java/com/baeldung/autofactory/model/ClassicPhone.java b/google-auto-project/src/main/java/com/baeldung/autofactory/model/ClassicPhone.java similarity index 100% rename from code-generation/src/main/java/com/baeldung/autofactory/model/ClassicPhone.java rename to google-auto-project/src/main/java/com/baeldung/autofactory/model/ClassicPhone.java diff --git a/code-generation/src/main/java/com/baeldung/autofactory/model/Phone.java b/google-auto-project/src/main/java/com/baeldung/autofactory/model/Phone.java similarity index 100% rename from code-generation/src/main/java/com/baeldung/autofactory/model/Phone.java rename to google-auto-project/src/main/java/com/baeldung/autofactory/model/Phone.java diff --git a/code-generation/src/main/java/com/baeldung/autofactory/modules/SonyCameraModule.java b/google-auto-project/src/main/java/com/baeldung/autofactory/modules/SonyCameraModule.java similarity index 100% rename from code-generation/src/main/java/com/baeldung/autofactory/modules/SonyCameraModule.java rename to google-auto-project/src/main/java/com/baeldung/autofactory/modules/SonyCameraModule.java diff --git a/code-generation/src/main/java/com/baeldung/autofactory/provided/IntermediateAssembler.java b/google-auto-project/src/main/java/com/baeldung/autofactory/provided/IntermediateAssembler.java similarity index 100% rename from code-generation/src/main/java/com/baeldung/autofactory/provided/IntermediateAssembler.java rename to google-auto-project/src/main/java/com/baeldung/autofactory/provided/IntermediateAssembler.java diff --git a/code-generation/src/main/java/com/baeldung/autofactory/provider/SonyCameraProvider.java b/google-auto-project/src/main/java/com/baeldung/autofactory/provider/SonyCameraProvider.java similarity index 100% rename from code-generation/src/main/java/com/baeldung/autofactory/provider/SonyCameraProvider.java rename to google-auto-project/src/main/java/com/baeldung/autofactory/provider/SonyCameraProvider.java diff --git a/code-generation/src/main/java/com/baeldung/autoservice/BingTranslationServiceProvider.java b/google-auto-project/src/main/java/com/baeldung/autoservice/BingTranslationServiceProvider.java similarity index 100% rename from code-generation/src/main/java/com/baeldung/autoservice/BingTranslationServiceProvider.java rename to google-auto-project/src/main/java/com/baeldung/autoservice/BingTranslationServiceProvider.java diff --git a/code-generation/src/main/java/com/baeldung/autoservice/GoogleTranslationServiceProvider.java b/google-auto-project/src/main/java/com/baeldung/autoservice/GoogleTranslationServiceProvider.java similarity index 100% rename from code-generation/src/main/java/com/baeldung/autoservice/GoogleTranslationServiceProvider.java rename to google-auto-project/src/main/java/com/baeldung/autoservice/GoogleTranslationServiceProvider.java diff --git a/code-generation/src/main/java/com/baeldung/autoservice/TranslationService.java b/google-auto-project/src/main/java/com/baeldung/autoservice/TranslationService.java similarity index 100% rename from code-generation/src/main/java/com/baeldung/autoservice/TranslationService.java rename to google-auto-project/src/main/java/com/baeldung/autoservice/TranslationService.java diff --git a/code-generation/src/main/java/com/baeldung/autovalue/AutoValueMoney.java b/google-auto-project/src/main/java/com/baeldung/autovalue/AutoValueMoney.java similarity index 100% rename from code-generation/src/main/java/com/baeldung/autovalue/AutoValueMoney.java rename to google-auto-project/src/main/java/com/baeldung/autovalue/AutoValueMoney.java diff --git a/code-generation/src/main/java/com/baeldung/autovalue/AutoValueMoneyWithBuilder.java b/google-auto-project/src/main/java/com/baeldung/autovalue/AutoValueMoneyWithBuilder.java similarity index 100% rename from code-generation/src/main/java/com/baeldung/autovalue/AutoValueMoneyWithBuilder.java rename to google-auto-project/src/main/java/com/baeldung/autovalue/AutoValueMoneyWithBuilder.java diff --git a/code-generation/src/main/java/com/baeldung/autovalue/Foo.java b/google-auto-project/src/main/java/com/baeldung/autovalue/Foo.java similarity index 100% rename from code-generation/src/main/java/com/baeldung/autovalue/Foo.java rename to google-auto-project/src/main/java/com/baeldung/autovalue/Foo.java diff --git a/code-generation/src/main/java/com/baeldung/autovalue/ImmutableMoney.java b/google-auto-project/src/main/java/com/baeldung/autovalue/ImmutableMoney.java similarity index 100% rename from code-generation/src/main/java/com/baeldung/autovalue/ImmutableMoney.java rename to google-auto-project/src/main/java/com/baeldung/autovalue/ImmutableMoney.java diff --git a/code-generation/src/main/java/com/baeldung/autovalue/MutableMoney.java b/google-auto-project/src/main/java/com/baeldung/autovalue/MutableMoney.java similarity index 100% rename from code-generation/src/main/java/com/baeldung/autovalue/MutableMoney.java rename to google-auto-project/src/main/java/com/baeldung/autovalue/MutableMoney.java diff --git a/code-generation/src/main/java/com/baeldung/autovalue/Person.java b/google-auto-project/src/main/java/com/baeldung/autovalue/Person.java similarity index 100% rename from code-generation/src/main/java/com/baeldung/autovalue/Person.java rename to google-auto-project/src/main/java/com/baeldung/autovalue/Person.java diff --git a/code-generation/src/main/resources/logback.xml b/google-auto-project/src/main/resources/logback.xml similarity index 100% rename from code-generation/src/main/resources/logback.xml rename to google-auto-project/src/main/resources/logback.xml diff --git a/code-generation/src/test/java/com/baeldung/autoservice/TranslationServiceUnitTest.java b/google-auto-project/src/test/java/com/baeldung/autoservice/TranslationServiceUnitTest.java similarity index 100% rename from code-generation/src/test/java/com/baeldung/autoservice/TranslationServiceUnitTest.java rename to google-auto-project/src/test/java/com/baeldung/autoservice/TranslationServiceUnitTest.java diff --git a/code-generation/src/test/java/com/baeldung/autovalue/MoneyUnitTest.java b/google-auto-project/src/test/java/com/baeldung/autovalue/MoneyUnitTest.java similarity index 100% rename from code-generation/src/test/java/com/baeldung/autovalue/MoneyUnitTest.java rename to google-auto-project/src/test/java/com/baeldung/autovalue/MoneyUnitTest.java diff --git a/code-generation/src/test/java/com/baeldung/autovalue/PersonUnitTest.java b/google-auto-project/src/test/java/com/baeldung/autovalue/PersonUnitTest.java similarity index 100% rename from code-generation/src/test/java/com/baeldung/autovalue/PersonUnitTest.java rename to google-auto-project/src/test/java/com/baeldung/autovalue/PersonUnitTest.java diff --git a/pom.xml b/pom.xml index 6f79e56ba17c..428aa1d268a2 100644 --- a/pom.xml +++ b/pom.xml @@ -330,8 +330,8 @@ parent-spring-5 parent-java - checker-plugin - + checker-framework + core-java-modules/core-java core-java-modules/core-java-8 @@ -523,8 +523,8 @@ parent-spring-5 parent-java - checker-plugin - + checker-framework + core-java-modules/core-java core-java-modules/core-java-8 @@ -854,7 +854,7 @@ axon bazel - code-generation + google-auto-project ddd discord4j disruptor @@ -1107,7 +1107,7 @@ axon bazel - code-generation + google-auto-project ddd discord4j disruptor From 52a1b93e48f99ad4858e00eecaac7c493482473f Mon Sep 17 00:00:00 2001 From: panos-kakos <102670093+panos-kakos@users.noreply.github.com> Date: Sat, 15 Apr 2023 20:02:36 +0300 Subject: [PATCH 106/390] [JAVA-18446] Clean up (#13845) --- libraries-files/pom.xml | 20 +++++++++++--------- libraries-http/pom.xml | 5 ----- libraries-primitive/pom.xml | 1 - logging-modules/log4j2/pom.xml | 1 - 4 files changed, 11 insertions(+), 16 deletions(-) diff --git a/libraries-files/pom.xml b/libraries-files/pom.xml index b36dc150a866..e4b3ffcdb27f 100644 --- a/libraries-files/pom.xml +++ b/libraries-files/pom.xml @@ -38,22 +38,24 @@ ${jackson.version} - com.itextpdf - itext7-core - 7.2.4 - pom + com.itextpdf + itext7-core + ${itext7-core.version} + pom - - org.assertj - assertj-core - 3.23.1 - test + + org.assertj + assertj-core + ${assertj-core.version} + test 0.5.4 2.8.0 + 7.2.4 + 3.23.1 \ No newline at end of file diff --git a/libraries-http/pom.xml b/libraries-http/pom.xml index 0077a5047e0e..18ba571f6099 100644 --- a/libraries-http/pom.xml +++ b/libraries-http/pom.xml @@ -52,11 +52,6 @@ async-http-client ${async.http.client.version} - - com.fasterxml.jackson.core - jackson-databind - ${jackson.version} - com.google.code.gson gson diff --git a/libraries-primitive/pom.xml b/libraries-primitive/pom.xml index badcfc443d84..114ec6484830 100644 --- a/libraries-primitive/pom.xml +++ b/libraries-primitive/pom.xml @@ -3,7 +3,6 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - com.baeldung libraries-primitive 1.0-SNAPSHOT libraries-primitive diff --git a/logging-modules/log4j2/pom.xml b/logging-modules/log4j2/pom.xml index 9fa58769b2d7..da2984442c56 100644 --- a/logging-modules/log4j2/pom.xml +++ b/logging-modules/log4j2/pom.xml @@ -63,7 +63,6 @@ org.apache.maven.plugins maven-compiler-plugin - ${maven-compiler-plugin.version} none From a54cd42c9f93c1000be733482d3f0f00a05dc8dd Mon Sep 17 00:00:00 2001 From: Tapan Avasthi Date: Sun, 16 Apr 2023 04:01:41 +0530 Subject: [PATCH 107/390] BAEL-5834: Add scenario for maven dependency convergence (#13822) * BAEL-5834: Add scenario for maven dependency convergence * BAEL-5834: Remove Makefile to reduce complexity * BAEL-5834: Remove reference of Makefile --------- Co-authored-by: Tapan Avasthi --- .../dependencyconvergence.xml | 22 ++++++++++++++++ ...dependencyconvergence_exclude_scenario.xml | 26 +++++++++++++++++++ ...dependencyconvergence_include_scenario.xml | 26 +++++++++++++++++++ 3 files changed, 74 insertions(+) create mode 100644 maven-modules/version-collision/dependencyconvergence.xml create mode 100644 maven-modules/version-collision/dependencyconvergence_exclude_scenario.xml create mode 100644 maven-modules/version-collision/dependencyconvergence_include_scenario.xml diff --git a/maven-modules/version-collision/dependencyconvergence.xml b/maven-modules/version-collision/dependencyconvergence.xml new file mode 100644 index 000000000000..8f57cbf1d5a2 --- /dev/null +++ b/maven-modules/version-collision/dependencyconvergence.xml @@ -0,0 +1,22 @@ + + + + org.apache.maven.plugins + maven-enforcer-plugin + 3.3.0 + + + enforce + + + + + + + enforce + + + + + + \ No newline at end of file diff --git a/maven-modules/version-collision/dependencyconvergence_exclude_scenario.xml b/maven-modules/version-collision/dependencyconvergence_exclude_scenario.xml new file mode 100644 index 000000000000..32b0462a1102 --- /dev/null +++ b/maven-modules/version-collision/dependencyconvergence_exclude_scenario.xml @@ -0,0 +1,26 @@ + + + + org.apache.maven.plugins + maven-enforcer-plugin + 3.3.0 + + + enforce + + + + + com.google.guava:guava + + + + + + enforce + + + + + + \ No newline at end of file diff --git a/maven-modules/version-collision/dependencyconvergence_include_scenario.xml b/maven-modules/version-collision/dependencyconvergence_include_scenario.xml new file mode 100644 index 000000000000..9e4680fc912b --- /dev/null +++ b/maven-modules/version-collision/dependencyconvergence_include_scenario.xml @@ -0,0 +1,26 @@ + + + + org.apache.maven.plugins + maven-enforcer-plugin + 3.3.0 + + + enforce + + + + + com.google.guava:guava + + + + + + enforce + + + + + + \ No newline at end of file From eba0465dd767411959d8e696cab9748fa23229ae Mon Sep 17 00:00:00 2001 From: AndiCover Date: Fri, 14 Apr 2023 07:47:50 +0200 Subject: [PATCH 108/390] BAEL-5739 Avoiding the StaleElementReferenceException in Selenium --- .../selenium/stale/RobustWebDriver.java | 86 +++++++++ .../selenium/stale/RobustWebElement.java | 176 ++++++++++++++++++ .../selenium/stale/WebElementUtils.java | 30 +++ .../stale/RobustWebElementLiveTest.java | 58 ++++++ .../stale/StaleElementReferenceLiveTest.java | 102 ++++++++++ 5 files changed, 452 insertions(+) create mode 100644 testing-modules/selenium-junit-testng/src/main/java/com/baeldung/selenium/stale/RobustWebDriver.java create mode 100644 testing-modules/selenium-junit-testng/src/main/java/com/baeldung/selenium/stale/RobustWebElement.java create mode 100644 testing-modules/selenium-junit-testng/src/main/java/com/baeldung/selenium/stale/WebElementUtils.java create mode 100644 testing-modules/selenium-junit-testng/src/test/java/com/baeldung/selenium/stale/RobustWebElementLiveTest.java create mode 100644 testing-modules/selenium-junit-testng/src/test/java/com/baeldung/selenium/stale/StaleElementReferenceLiveTest.java diff --git a/testing-modules/selenium-junit-testng/src/main/java/com/baeldung/selenium/stale/RobustWebDriver.java b/testing-modules/selenium-junit-testng/src/main/java/com/baeldung/selenium/stale/RobustWebDriver.java new file mode 100644 index 000000000000..211480dce30c --- /dev/null +++ b/testing-modules/selenium-junit-testng/src/main/java/com/baeldung/selenium/stale/RobustWebDriver.java @@ -0,0 +1,86 @@ +package com.baeldung.selenium.stale; + +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; + +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +public class RobustWebDriver implements WebDriver { + + private final WebDriver originalWebDriver; + + public RobustWebDriver(WebDriver webDriver) { + this.originalWebDriver = webDriver; + } + + @Override + public void get(String url) { + this.originalWebDriver.get(url); + } + + @Override + public String getCurrentUrl() { + return this.originalWebDriver.getCurrentUrl(); + } + + @Override + public String getTitle() { + return this.originalWebDriver.getTitle(); + } + + @Override + public List findElements(By by) { + return this.originalWebDriver.findElements(by) + .stream().map(e -> new RobustWebElement(e, by, this)) + .collect(Collectors.toList()); + } + + @Override + public WebElement findElement(By by) { + return new RobustWebElement(this.originalWebDriver.findElement(by), by, this); + } + + @Override + public String getPageSource() { + return this.originalWebDriver.getPageSource(); + } + + @Override + public void close() { + this.originalWebDriver.close(); + + } + + @Override + public void quit() { + this.originalWebDriver.quit(); + } + + @Override + public Set getWindowHandles() { + return this.originalWebDriver.getWindowHandles(); + } + + @Override + public String getWindowHandle() { + return this.originalWebDriver.getWindowHandle(); + } + + @Override + public TargetLocator switchTo() { + return this.originalWebDriver.switchTo(); + } + + @Override + public Navigation navigate() { + return this.originalWebDriver.navigate(); + } + + @Override + public Options manage() { + return this.originalWebDriver.manage(); + } +} \ No newline at end of file diff --git a/testing-modules/selenium-junit-testng/src/main/java/com/baeldung/selenium/stale/RobustWebElement.java b/testing-modules/selenium-junit-testng/src/main/java/com/baeldung/selenium/stale/RobustWebElement.java new file mode 100644 index 000000000000..fa65e603497c --- /dev/null +++ b/testing-modules/selenium-junit-testng/src/main/java/com/baeldung/selenium/stale/RobustWebElement.java @@ -0,0 +1,176 @@ +package com.baeldung.selenium.stale; + +import org.openqa.selenium.By; +import org.openqa.selenium.Dimension; +import org.openqa.selenium.OutputType; +import org.openqa.selenium.Point; +import org.openqa.selenium.Rectangle; +import org.openqa.selenium.StaleElementReferenceException; +import org.openqa.selenium.WebDriverException; +import org.openqa.selenium.WebElement; + +import java.util.List; +import java.util.function.BiConsumer; +import java.util.function.BiFunction; +import java.util.function.Consumer; +import java.util.function.Function; + +public class RobustWebElement implements WebElement { + + private WebElement originalElement; + private final RobustWebDriver driver; + private final By by; + + private static final int MAX_RETRIES = 10; + private static final String SERE = "Element is no longer attached to the DOM"; + + public RobustWebElement(WebElement element, By by, RobustWebDriver driver) { + this.originalElement = element; + this.by = by; + this.driver = driver; + } + + @Override + public void click() { + executeMethodWithRetries(WebElement::click); + } + + @Override + public void submit() { + executeMethodWithRetries(WebElement::submit); + } + + @Override + public void sendKeys(CharSequence... keysToSend) { + executeMethodWithRetriesVoid(WebElement::sendKeys, keysToSend); + } + + @Override + public void clear() { + executeMethodWithRetries(WebElement::clear); + } + + @Override + public String getTagName() { + return executeMethodWithRetries(WebElement::getTagName); + } + + @Override + public String getAttribute(String name) { + return executeMethodWithRetries(WebElement::getAttribute, name); + } + + @Override + public boolean isSelected() { + return executeMethodWithRetries(WebElement::isSelected); + } + + @Override + public boolean isEnabled() { + return executeMethodWithRetries(WebElement::isEnabled); + } + + @Override + public String getText() { + return executeMethodWithRetries(WebElement::getText); + } + + @Override + public List findElements(By by) { + return executeMethodWithRetries(WebElement::findElements, by); + } + + @Override + public WebElement findElement(By by) { + return executeMethodWithRetries(WebElement::findElement, by); + } + + @Override + public boolean isDisplayed() { + return executeMethodWithRetries(WebElement::isDisplayed); + } + + @Override + public Point getLocation() { + return executeMethodWithRetries(WebElement::getLocation); + } + + @Override + public Dimension getSize() { + return executeMethodWithRetries(WebElement::getSize); + } + + @Override + public Rectangle getRect() { + return executeMethodWithRetries(WebElement::getRect); + } + + @Override + public String getCssValue(String propertyName) { + return executeMethodWithRetries(WebElement::getCssValue, propertyName); + } + + + @Override + public X getScreenshotAs(OutputType target) throws WebDriverException { + return executeMethodWithRetries(WebElement::getScreenshotAs, target); + } + + private void executeMethodWithRetries(Consumer method) { + int retries = 0; + while (retries < MAX_RETRIES) { + try { + WebElementUtils.callMethod(originalElement, method); + return; + } catch (StaleElementReferenceException ex) { + refreshElement(); + } + retries++; + } + throw new StaleElementReferenceException(SERE); + } + + private T executeMethodWithRetries(Function method) { + int retries = 0; + while (retries < MAX_RETRIES) { + try { + return WebElementUtils.callMethodWithReturn(originalElement, method); + } catch (StaleElementReferenceException ex) { + refreshElement(); + } + retries++; + } + throw new StaleElementReferenceException(SERE); + } + + private void executeMethodWithRetriesVoid(BiConsumer method, U parameter) { + int retries = 0; + while (retries < MAX_RETRIES) { + try { + WebElementUtils.callMethod(originalElement, method, parameter); + return; + } catch (StaleElementReferenceException ex) { + refreshElement(); + } + retries++; + } + throw new StaleElementReferenceException(SERE); + } + + private T executeMethodWithRetries(BiFunction method, U parameter) { + int retries = 0; + while (retries < MAX_RETRIES) { + try { + return WebElementUtils.callMethodWithReturn(originalElement, method, parameter); + } catch (StaleElementReferenceException ex) { + refreshElement(); + } + retries++; + } + throw new StaleElementReferenceException(SERE); + } + + private void refreshElement() { + this.originalElement = driver.findElement(by); + } +} \ No newline at end of file diff --git a/testing-modules/selenium-junit-testng/src/main/java/com/baeldung/selenium/stale/WebElementUtils.java b/testing-modules/selenium-junit-testng/src/main/java/com/baeldung/selenium/stale/WebElementUtils.java new file mode 100644 index 000000000000..460cc02bf55e --- /dev/null +++ b/testing-modules/selenium-junit-testng/src/main/java/com/baeldung/selenium/stale/WebElementUtils.java @@ -0,0 +1,30 @@ +package com.baeldung.selenium.stale; + +import org.openqa.selenium.WebElement; + +import java.util.function.BiConsumer; +import java.util.function.BiFunction; +import java.util.function.Consumer; +import java.util.function.Function; + +public class WebElementUtils { + + private WebElementUtils(){ + } + + public static void callMethod(WebElement element, Consumer method) { + method.accept(element); + } + + public static void callMethod(WebElement element, BiConsumer method, U parameter) { + method.accept(element, parameter); + } + + public static T callMethodWithReturn(WebElement element, Function method) { + return method.apply(element); + } + + public static T callMethodWithReturn(WebElement element, BiFunction method, U parameter) { + return method.apply(element, parameter); + } +} \ No newline at end of file diff --git a/testing-modules/selenium-junit-testng/src/test/java/com/baeldung/selenium/stale/RobustWebElementLiveTest.java b/testing-modules/selenium-junit-testng/src/test/java/com/baeldung/selenium/stale/RobustWebElementLiveTest.java new file mode 100644 index 000000000000..3dea95ca8272 --- /dev/null +++ b/testing-modules/selenium-junit-testng/src/test/java/com/baeldung/selenium/stale/RobustWebElementLiveTest.java @@ -0,0 +1,58 @@ +package com.baeldung.selenium.stale; + +import io.github.bonigarcia.wdm.WebDriverManager; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.openqa.selenium.By; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.chrome.ChromeDriver; +import org.openqa.selenium.chrome.ChromeOptions; + +import java.time.Duration; + +final class RobustWebElementLiveTest { + + private static RobustWebDriver driver; + private static final int TIMEOUT = 10; + + private static final By LOCATOR_REFRESH = By.xpath("//a[.='click here']"); + private static final By LOCATOR_DYNAMIC_CONTENT = By.xpath( + "(//div[@id='content']//div[@class='large-10 columns'])[1]"); + + private static void setupChromeDriver() { + WebDriverManager.chromedriver().setup(); + final ChromeOptions options = new ChromeOptions(); + options.addArguments("--remote-allow-origins=*"); + driver = new RobustWebDriver(new ChromeDriver(options)); + options(); + } + + private static void options() { + driver.manage().window().maximize(); + driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(TIMEOUT)); + } + + @BeforeEach + public void init() { + setupChromeDriver(); + } + + @Test + void givenDynamicPage_whenRefreshingAndAccessingSavedElement_thenOK() { + driver.navigate().to("https://the-internet.herokuapp.com/dynamic_content?with_content=static"); + final WebElement element = driver.findElement(LOCATOR_DYNAMIC_CONTENT); + + driver.findElement(LOCATOR_REFRESH).click(); + Assertions.assertDoesNotThrow(element::getText); + } + + @AfterEach + void teardown() { + if (driver != null) { + driver.quit(); + driver = null; + } + } +} \ No newline at end of file diff --git a/testing-modules/selenium-junit-testng/src/test/java/com/baeldung/selenium/stale/StaleElementReferenceLiveTest.java b/testing-modules/selenium-junit-testng/src/test/java/com/baeldung/selenium/stale/StaleElementReferenceLiveTest.java new file mode 100644 index 000000000000..9b42571891f6 --- /dev/null +++ b/testing-modules/selenium-junit-testng/src/test/java/com/baeldung/selenium/stale/StaleElementReferenceLiveTest.java @@ -0,0 +1,102 @@ +package com.baeldung.selenium.stale; + +import io.github.bonigarcia.wdm.WebDriverManager; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.openqa.selenium.By; +import org.openqa.selenium.StaleElementReferenceException; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.chrome.ChromeDriver; +import org.openqa.selenium.chrome.ChromeOptions; + +import java.time.Duration; + +final class StaleElementReferenceLiveTest { + + private static WebDriver driver; + private static final int TIMEOUT = 10; + + private static final By LOCATOR_REFRESH = By.xpath("//a[.='click here']"); + private static final By LOCATOR_DYNAMIC_CONTENT = By.xpath( + "(//div[@id='content']//div[@class='large-10 columns'])[1]"); + + private static void setupChromeDriver() { + WebDriverManager.chromedriver().setup(); + final ChromeOptions options = new ChromeOptions(); + options.addArguments("--remote-allow-origins=*"); + driver = new ChromeDriver(options); + options(); + } + + private static void options() { + driver.manage().window().maximize(); + driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(TIMEOUT)); + } + + @BeforeEach + public void init() { + setupChromeDriver(); + } + + @Test + void givenDynamicPage_whenRefreshingAndAccessingSavedElement_thenSERE() { + driver.navigate().to("https://the-internet.herokuapp.com/dynamic_content?with_content=static"); + final WebElement element = driver.findElement(LOCATOR_DYNAMIC_CONTENT); + + driver.findElement(LOCATOR_REFRESH).click(); + Assertions.assertThrows(StaleElementReferenceException.class, element::getText); + } + + @Test + void givenDynamicPage_whenRefreshingAndAccessingSavedElement_thenHandleSERE() { + driver.navigate().to("https://the-internet.herokuapp.com/dynamic_content?with_content=static"); + final WebElement element = driver.findElement(LOCATOR_DYNAMIC_CONTENT); + + if (!retryingFindClick(LOCATOR_REFRESH)) { + Assertions.fail("Element is still stale after 5 attempts"); + } + Assertions.assertDoesNotThrow(() -> retryingFindGetText(LOCATOR_DYNAMIC_CONTENT)); + } + + private boolean retryingFindClick(By locator) { + boolean result = false; + int attempts = 0; + while (attempts < 5) { + try { + driver.findElement(locator).click(); + result = true; + break; + } catch (StaleElementReferenceException ex) { + System.out.println(ex.getMessage()); + } + attempts++; + } + return result; + } + + private String retryingFindGetText(By locator) { + String result = null; + int attempts = 0; + while (attempts < 5) { + try { + result = driver.findElement(locator).getText(); + break; + } catch (StaleElementReferenceException ex) { + System.out.println(ex.getMessage()); + } + attempts++; + } + return result; + } + + @AfterEach + void teardown() { + if (driver != null) { + driver.quit(); + driver = null; + } + } +} \ No newline at end of file From 5b9d88a8474f858818a4407aba74b75a62a95fd5 Mon Sep 17 00:00:00 2001 From: Azhwani <13301425+azhwani@users.noreply.github.com> Date: Sun, 16 Apr 2023 18:32:18 +0200 Subject: [PATCH 109/390] BAEL-6110: Fix Spring Data JPA Exception: No Property Found for Type (#13753) --- .../spring-boot-data-3/pom.xml | 4 ++ .../NoPropertyFoundApplication.java | 13 ++++++ .../nopropertyfound/config/DbConfig.java | 20 +++++++++ .../nopropertyfound/model/Person.java | 41 +++++++++++++++++++ .../repository/PersonRepository.java | 15 +++++++ .../src/main/resources/application.properties | 7 +++- .../src/main/resources/data.sql | 3 ++ .../src/main/resources/schema.sql | 6 +++ .../PersonRepositoryIntegrationTest.java | 28 +++++++++++++ 9 files changed, 136 insertions(+), 1 deletion(-) create mode 100644 spring-boot-modules/spring-boot-data-3/src/main/java/com/baeldung/nopropertyfound/NoPropertyFoundApplication.java create mode 100644 spring-boot-modules/spring-boot-data-3/src/main/java/com/baeldung/nopropertyfound/config/DbConfig.java create mode 100644 spring-boot-modules/spring-boot-data-3/src/main/java/com/baeldung/nopropertyfound/model/Person.java create mode 100644 spring-boot-modules/spring-boot-data-3/src/main/java/com/baeldung/nopropertyfound/repository/PersonRepository.java create mode 100644 spring-boot-modules/spring-boot-data-3/src/main/resources/data.sql create mode 100644 spring-boot-modules/spring-boot-data-3/src/main/resources/schema.sql create mode 100644 spring-boot-modules/spring-boot-data-3/src/test/java/com/baeldung/nopropertyfound/PersonRepositoryIntegrationTest.java diff --git a/spring-boot-modules/spring-boot-data-3/pom.xml b/spring-boot-modules/spring-boot-data-3/pom.xml index fcf7451c61e4..4903d2ea26f2 100644 --- a/spring-boot-modules/spring-boot-data-3/pom.xml +++ b/spring-boot-modules/spring-boot-data-3/pom.xml @@ -34,6 +34,10 @@ mysql-connector-java runtime + + com.h2database + h2 + org.springframework.boot spring-boot-starter-test diff --git a/spring-boot-modules/spring-boot-data-3/src/main/java/com/baeldung/nopropertyfound/NoPropertyFoundApplication.java b/spring-boot-modules/spring-boot-data-3/src/main/java/com/baeldung/nopropertyfound/NoPropertyFoundApplication.java new file mode 100644 index 000000000000..276df9535b95 --- /dev/null +++ b/spring-boot-modules/spring-boot-data-3/src/main/java/com/baeldung/nopropertyfound/NoPropertyFoundApplication.java @@ -0,0 +1,13 @@ +package com.baeldung.nopropertyfound; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class NoPropertyFoundApplication { + + public static void main(String[] args) { + SpringApplication.run(NoPropertyFoundApplication.class, args); + } + +} diff --git a/spring-boot-modules/spring-boot-data-3/src/main/java/com/baeldung/nopropertyfound/config/DbConfig.java b/spring-boot-modules/spring-boot-data-3/src/main/java/com/baeldung/nopropertyfound/config/DbConfig.java new file mode 100644 index 000000000000..9a589e55a379 --- /dev/null +++ b/spring-boot-modules/spring-boot-data-3/src/main/java/com/baeldung/nopropertyfound/config/DbConfig.java @@ -0,0 +1,20 @@ +package com.baeldung.nopropertyfound.config; + +import javax.sql.DataSource; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.jdbc.DataSourceBuilder; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class DbConfig { + + @Bean + @ConfigurationProperties(prefix = "h2.datasource") + public DataSource dataSource() { + return DataSourceBuilder.create() + .build(); + } + +} diff --git a/spring-boot-modules/spring-boot-data-3/src/main/java/com/baeldung/nopropertyfound/model/Person.java b/spring-boot-modules/spring-boot-data-3/src/main/java/com/baeldung/nopropertyfound/model/Person.java new file mode 100644 index 000000000000..3392d3ec67ca --- /dev/null +++ b/spring-boot-modules/spring-boot-data-3/src/main/java/com/baeldung/nopropertyfound/model/Person.java @@ -0,0 +1,41 @@ +package com.baeldung.nopropertyfound.model; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; + +@Entity +public class Person { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private int id; + private String firstName; + private String lastName; + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + +} diff --git a/spring-boot-modules/spring-boot-data-3/src/main/java/com/baeldung/nopropertyfound/repository/PersonRepository.java b/spring-boot-modules/spring-boot-data-3/src/main/java/com/baeldung/nopropertyfound/repository/PersonRepository.java new file mode 100644 index 000000000000..900c391c93de --- /dev/null +++ b/spring-boot-modules/spring-boot-data-3/src/main/java/com/baeldung/nopropertyfound/repository/PersonRepository.java @@ -0,0 +1,15 @@ +package com.baeldung.nopropertyfound.repository; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import com.baeldung.nopropertyfound.model.Person; + +@Repository +public interface PersonRepository extends JpaRepository { + + // findByFirsttName will cause Spring Data to throw PropertyReferenceException + // Person findByFirsttName(String firstName); + Person findByFirstName(String firstName); + +} diff --git a/spring-boot-modules/spring-boot-data-3/src/main/resources/application.properties b/spring-boot-modules/spring-boot-data-3/src/main/resources/application.properties index cbe044134feb..71f39e0ee333 100644 --- a/spring-boot-modules/spring-boot-data-3/src/main/resources/application.properties +++ b/spring-boot-modules/spring-boot-data-3/src/main/resources/application.properties @@ -4,4 +4,9 @@ spring.datasource.username=root spring.datasource.password=root spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect spring.jpa.hibernate.ddl-auto=none -spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults=false \ No newline at end of file +spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults=false + +h2.datasource.url=jdbc:h2:mem:testdb +h2.datasource.driver-class-name=org.h2.Driver +h2.datasource.username=sa +h2.datasource.password= diff --git a/spring-boot-modules/spring-boot-data-3/src/main/resources/data.sql b/spring-boot-modules/spring-boot-data-3/src/main/resources/data.sql new file mode 100644 index 000000000000..5623bbfadf46 --- /dev/null +++ b/spring-boot-modules/spring-boot-data-3/src/main/resources/data.sql @@ -0,0 +1,3 @@ +INSERT INTO person (first_name, last_name) VALUES('Azhrioun', 'Abderrahim'); +INSERT INTO person (first_name, last_name) VALUES('Brian', 'Wheeler'); +INSERT INTO person (first_name, last_name) VALUES('Dave', 'Anderson'); \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-data-3/src/main/resources/schema.sql b/spring-boot-modules/spring-boot-data-3/src/main/resources/schema.sql new file mode 100644 index 000000000000..738ef25298f9 --- /dev/null +++ b/spring-boot-modules/spring-boot-data-3/src/main/resources/schema.sql @@ -0,0 +1,6 @@ +DROP TABLE IF EXISTS person; +CREATE TABLE person( + id INT AUTO_INCREMENT PRIMARY KEY, + first_name VARCHAR(200), + last_name VARCHAR(200) +) \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-data-3/src/test/java/com/baeldung/nopropertyfound/PersonRepositoryIntegrationTest.java b/spring-boot-modules/spring-boot-data-3/src/test/java/com/baeldung/nopropertyfound/PersonRepositoryIntegrationTest.java new file mode 100644 index 000000000000..2a9d1a46f235 --- /dev/null +++ b/spring-boot-modules/spring-boot-data-3/src/test/java/com/baeldung/nopropertyfound/PersonRepositoryIntegrationTest.java @@ -0,0 +1,28 @@ +package com.baeldung.nopropertyfound; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; + +import com.baeldung.nopropertyfound.model.Person; +import com.baeldung.nopropertyfound.repository.PersonRepository; + +@DataJpaTest +class PersonRepositoryIntegrationTest { + + @Autowired + private PersonRepository personRepository; + + @Test + void givenQueryMethod_whenUsingValidProperty_thenCorrect() { + + Person person = personRepository.findByFirstName("Azhrioun"); + + assertNotNull(person); + assertEquals("Abderrahim", person.getLastName()); + } + +} From 1c9cf3facd498fbd01b6ac8406c28e867c596f51 Mon Sep 17 00:00:00 2001 From: neha298 <32795246+neha298@users.noreply.github.com> Date: Sun, 16 Apr 2023 23:42:27 +0530 Subject: [PATCH 110/390] Fastexcel --- apache-poi/pom.xml | 11 ++++ .../baeldung/fastexcel/FastexcelHelper.java | 64 +++++++++++++++++++ .../fastexcel/FastexcelIntegrationTest.java | 50 +++++++++++++++ 3 files changed, 125 insertions(+) create mode 100644 apache-poi/src/main/java/com/baeldung/fastexcel/FastexcelHelper.java create mode 100644 apache-poi/src/test/java/com/baeldung/fastexcel/FastexcelIntegrationTest.java diff --git a/apache-poi/pom.xml b/apache-poi/pom.xml index 546eedec5b90..78781cf21522 100644 --- a/apache-poi/pom.xml +++ b/apache-poi/pom.xml @@ -30,6 +30,16 @@ + + org.dhatim + fastexcel + ${fastexcel.version} + + + org.dhatim + fastexcel-reader + ${fastexcel.version} + @@ -52,6 +62,7 @@ 5.2.0 1.0.6 + 0.15.3 3.2.0 diff --git a/apache-poi/src/main/java/com/baeldung/fastexcel/FastexcelHelper.java b/apache-poi/src/main/java/com/baeldung/fastexcel/FastexcelHelper.java new file mode 100644 index 000000000000..524f345184d7 --- /dev/null +++ b/apache-poi/src/main/java/com/baeldung/fastexcel/FastexcelHelper.java @@ -0,0 +1,64 @@ +package com.baeldung.fastexcel; + +import org.dhatim.fastexcel.Workbook; +import org.dhatim.fastexcel.Worksheet; +import org.dhatim.fastexcel.reader.Cell; +import org.dhatim.fastexcel.reader.ReadableWorkbook; +import org.dhatim.fastexcel.reader.Row; +import org.dhatim.fastexcel.reader.Sheet; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Stream; + +public class FastexcelHelper { + + public Map> readExcel(String fileLocation) throws IOException { + Map> data = new HashMap<>(); + + try (FileInputStream file = new FileInputStream(fileLocation); ReadableWorkbook wb = new ReadableWorkbook(file)) { + Sheet sheet = wb.getFirstSheet(); + try (Stream rows = sheet.openStream()) { + rows.forEach(r -> { + data.put(r.getRowNum(), new ArrayList<>()); + + for (Cell cell : r) { + data.get(r.getRowNum()).add(cell.getRawValue()); + } + }); + } + } + + return data; + } + + public void writeExcel() throws IOException { + File currDir = new File("."); + String path = currDir.getAbsolutePath(); + String fileLocation = path.substring(0, path.length() - 1) + "fastexcel.xlsx"; + + try (OutputStream os = Files.newOutputStream(Paths.get(fileLocation)); Workbook wb = new Workbook(os, "MyApplication", "1.0")) { + Worksheet ws = wb.newWorksheet("Sheet 1"); + + ws.width(0, 25); + ws.width(1, 15); + + + ws.range(0, 0, 0, 1).style().fontName("Arial").fontSize(16).bold().fillColor("3366FF").set(); + ws.value(0, 0, "Name"); + ws.value(0, 1, "Age"); + + ws.range(1, 0, 1, 1).style().wrapText(true).set(); + ws.value(2, 0, "John Smith"); + ws.value(2, 1, 20L); + } + } +} diff --git a/apache-poi/src/test/java/com/baeldung/fastexcel/FastexcelIntegrationTest.java b/apache-poi/src/test/java/com/baeldung/fastexcel/FastexcelIntegrationTest.java new file mode 100644 index 000000000000..8c1d568b25f8 --- /dev/null +++ b/apache-poi/src/test/java/com/baeldung/fastexcel/FastexcelIntegrationTest.java @@ -0,0 +1,50 @@ +package com.baeldung.fastexcel; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import java.io.File; +import java.io.IOException; +import java.util.List; +import java.util.Map; + +import static org.junit.Assert.assertEquals; + +public class FastexcelIntegrationTest { + + private FastexcelHelper fastexcelHelper; + private static String FILE_NAME = "fastexcel.xlsx"; + private String fileLocation; + + @Before + public void generateExcelFile() throws IOException { + + File currDir = new File("."); + String path = currDir.getAbsolutePath(); + fileLocation = path.substring(0, path.length() - 1) + FILE_NAME; + System.out.println(fileLocation); + + fastexcelHelper = new FastexcelHelper(); + fastexcelHelper.writeExcel(); + } + + @Test + public void whenParsingExcelFile_thenCorrect() throws IOException { + Map> data = fastexcelHelper.readExcel(fileLocation); + + assertEquals("Name", data.get(1).get(0)); + assertEquals("Age", data.get(1).get(1)); + + assertEquals("John Smith", data.get(3).get(0)); + assertEquals("20", data.get(3).get(1)); + } + + @After + public void cleanup() { + File testFile = new File(fileLocation); + if (testFile.exists()) { + testFile.delete(); + } + } +} \ No newline at end of file From 34d23ba9fb45b355317879e434aaea67620baaea Mon Sep 17 00:00:00 2001 From: neha298 <32795246+neha298@users.noreply.github.com> Date: Mon, 17 Apr 2023 01:01:42 +0530 Subject: [PATCH 111/390] Removed extra whitespace --- .../src/main/java/com/baeldung/fastexcel/FastexcelHelper.java | 1 - 1 file changed, 1 deletion(-) diff --git a/apache-poi/src/main/java/com/baeldung/fastexcel/FastexcelHelper.java b/apache-poi/src/main/java/com/baeldung/fastexcel/FastexcelHelper.java index 524f345184d7..fd5492359a6e 100644 --- a/apache-poi/src/main/java/com/baeldung/fastexcel/FastexcelHelper.java +++ b/apache-poi/src/main/java/com/baeldung/fastexcel/FastexcelHelper.java @@ -51,7 +51,6 @@ public void writeExcel() throws IOException { ws.width(0, 25); ws.width(1, 15); - ws.range(0, 0, 0, 1).style().fontName("Arial").fontSize(16).bold().fillColor("3366FF").set(); ws.value(0, 0, "Name"); ws.value(0, 1, "Age"); From 98416715b0c53673c3172ad7d0c12840ddc7f783 Mon Sep 17 00:00:00 2001 From: neha298 <32795246+neha298@users.noreply.github.com> Date: Mon, 17 Apr 2023 01:11:46 +0530 Subject: [PATCH 112/390] Removed print statement --- .../java/com/baeldung/fastexcel/FastexcelIntegrationTest.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/apache-poi/src/test/java/com/baeldung/fastexcel/FastexcelIntegrationTest.java b/apache-poi/src/test/java/com/baeldung/fastexcel/FastexcelIntegrationTest.java index 8c1d568b25f8..a36c06e41f6a 100644 --- a/apache-poi/src/test/java/com/baeldung/fastexcel/FastexcelIntegrationTest.java +++ b/apache-poi/src/test/java/com/baeldung/fastexcel/FastexcelIntegrationTest.java @@ -23,7 +23,6 @@ public void generateExcelFile() throws IOException { File currDir = new File("."); String path = currDir.getAbsolutePath(); fileLocation = path.substring(0, path.length() - 1) + FILE_NAME; - System.out.println(fileLocation); fastexcelHelper = new FastexcelHelper(); fastexcelHelper.writeExcel(); @@ -47,4 +46,4 @@ public void cleanup() { testFile.delete(); } } -} \ No newline at end of file +} From 5647b814c992ec469643fb3d29db9b6b4b37804c Mon Sep 17 00:00:00 2001 From: neha298 <32795246+neha298@users.noreply.github.com> Date: Mon, 17 Apr 2023 01:26:06 +0530 Subject: [PATCH 113/390] Row index modification --- .../src/main/java/com/baeldung/fastexcel/FastexcelHelper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apache-poi/src/main/java/com/baeldung/fastexcel/FastexcelHelper.java b/apache-poi/src/main/java/com/baeldung/fastexcel/FastexcelHelper.java index fd5492359a6e..9d6041b66e74 100644 --- a/apache-poi/src/main/java/com/baeldung/fastexcel/FastexcelHelper.java +++ b/apache-poi/src/main/java/com/baeldung/fastexcel/FastexcelHelper.java @@ -55,7 +55,7 @@ public void writeExcel() throws IOException { ws.value(0, 0, "Name"); ws.value(0, 1, "Age"); - ws.range(1, 0, 1, 1).style().wrapText(true).set(); + ws.range(2, 0, 2, 1).style().wrapText(true).set(); ws.value(2, 0, "John Smith"); ws.value(2, 1, 20L); } From cce2ed68a4492ffe6f202ac6b71d8bd1ff1ece13 Mon Sep 17 00:00:00 2001 From: Eugene Kovko <37694937+eukovko@users.noreply.github.com> Date: Mon, 17 Apr 2023 05:14:50 +0200 Subject: [PATCH 114/390] feat: BAEL-5947 External Debugging with JMXTerm (#13847) * feat: BAEL-5947 External Debugging with JMXTerm * fix: Removed a faulty test * fix: Change Random to ThreadLocalRandom * fix: Renamed a method * fix: Formatting fix --- .../baeldung/jmxterm/AbstractPlayerMBean.java | 16 ++++ .../jmxterm/BroadcastingGuessGame.java | 42 ++++++++++ .../java/com/baeldung/jmxterm/GameRunner.java | 19 +++++ .../java/com/baeldung/jmxterm/GuessGame.java | 80 +++++++++++++++++++ .../com/baeldung/jmxterm/GuessGameMBean.java | 8 ++ .../com/baeldung/jmxterm/MBeanGameServer.java | 37 +++++++++ .../java/com/baeldung/jmxterm/Player.java | 33 ++++++++ .../com/baeldung/jmxterm/PlayerMBean.java | 10 +++ .../jmxterm/RandomNumbergenerator.java | 18 +++++ .../com/baeldung/jmxterm/PlayerUnitTest.java | 21 +++++ 10 files changed, 284 insertions(+) create mode 100644 core-java-modules/core-java-perf/src/main/java/com/baeldung/jmxterm/AbstractPlayerMBean.java create mode 100644 core-java-modules/core-java-perf/src/main/java/com/baeldung/jmxterm/BroadcastingGuessGame.java create mode 100644 core-java-modules/core-java-perf/src/main/java/com/baeldung/jmxterm/GameRunner.java create mode 100644 core-java-modules/core-java-perf/src/main/java/com/baeldung/jmxterm/GuessGame.java create mode 100644 core-java-modules/core-java-perf/src/main/java/com/baeldung/jmxterm/GuessGameMBean.java create mode 100644 core-java-modules/core-java-perf/src/main/java/com/baeldung/jmxterm/MBeanGameServer.java create mode 100644 core-java-modules/core-java-perf/src/main/java/com/baeldung/jmxterm/Player.java create mode 100644 core-java-modules/core-java-perf/src/main/java/com/baeldung/jmxterm/PlayerMBean.java create mode 100644 core-java-modules/core-java-perf/src/main/java/com/baeldung/jmxterm/RandomNumbergenerator.java create mode 100644 core-java-modules/core-java-perf/src/test/java/com/baeldung/jmxterm/PlayerUnitTest.java diff --git a/core-java-modules/core-java-perf/src/main/java/com/baeldung/jmxterm/AbstractPlayerMBean.java b/core-java-modules/core-java-perf/src/main/java/com/baeldung/jmxterm/AbstractPlayerMBean.java new file mode 100644 index 000000000000..698d107c51ad --- /dev/null +++ b/core-java-modules/core-java-perf/src/main/java/com/baeldung/jmxterm/AbstractPlayerMBean.java @@ -0,0 +1,16 @@ +package com.baeldung.jmxterm; + +import java.util.UUID; + +public abstract class AbstractPlayerMBean implements PlayerMBean{ + + private final UUID id; + + protected AbstractPlayerMBean() { + this.id = UUID.randomUUID(); + } + + String getId() { + return getName() + id.toString(); + } +} diff --git a/core-java-modules/core-java-perf/src/main/java/com/baeldung/jmxterm/BroadcastingGuessGame.java b/core-java-modules/core-java-perf/src/main/java/com/baeldung/jmxterm/BroadcastingGuessGame.java new file mode 100644 index 000000000000..921d87c4d7b6 --- /dev/null +++ b/core-java-modules/core-java-perf/src/main/java/com/baeldung/jmxterm/BroadcastingGuessGame.java @@ -0,0 +1,42 @@ +package com.baeldung.jmxterm; + +import javax.management.ListenerNotFoundException; +import javax.management.MBeanNotificationInfo; +import javax.management.Notification; +import javax.management.NotificationBroadcaster; +import javax.management.NotificationBroadcasterSupport; +import javax.management.NotificationFilter; +import javax.management.NotificationListener; + +public abstract class BroadcastingGuessGame implements NotificationBroadcaster, GuessGameMBean { + private final NotificationBroadcasterSupport broadcaster = + new NotificationBroadcasterSupport(); + + private long notificationSequence = 0; + + private final MBeanNotificationInfo[] notificationInfo; + + protected BroadcastingGuessGame() { + this.notificationInfo = new MBeanNotificationInfo[]{ + new MBeanNotificationInfo(new String[]{"game"}, Notification.class.getName(), "Game notification") + }; + } + + protected void notifyAboutWinner(Player winner) { + String message = "Winner is " + winner.getName() + " with score " + winner.getScore(); + Notification notification = new Notification("game.winner", this, notificationSequence++, message); + broadcaster.sendNotification(notification); + } + + public void addNotificationListener(NotificationListener listener, NotificationFilter filter, Object handback) { + broadcaster.addNotificationListener(listener, filter, handback); + } + + public void removeNotificationListener(NotificationListener listener) throws ListenerNotFoundException { + broadcaster.removeNotificationListener(listener); + } + + public MBeanNotificationInfo[] getNotificationInfo() { + return notificationInfo; + } +} diff --git a/core-java-modules/core-java-perf/src/main/java/com/baeldung/jmxterm/GameRunner.java b/core-java-modules/core-java-perf/src/main/java/com/baeldung/jmxterm/GameRunner.java new file mode 100644 index 000000000000..3955d37504eb --- /dev/null +++ b/core-java-modules/core-java-perf/src/main/java/com/baeldung/jmxterm/GameRunner.java @@ -0,0 +1,19 @@ +package com.baeldung.jmxterm; + +import java.util.Arrays; +import java.util.List; + +public class GameRunner { + + public static void main(String[] args) { + MBeanGameServer mBeanGameServer = new MBeanGameServer(); + Player bob = new Player("Bob"); + Player alice = new Player("Alice"); + Player john = new Player("John"); + List players = Arrays.asList(bob, alice, john); + GuessGame guessGame = new GuessGame(players); + mBeanGameServer.registerGame(guessGame); + guessGame.start(); + } + +} diff --git a/core-java-modules/core-java-perf/src/main/java/com/baeldung/jmxterm/GuessGame.java b/core-java-modules/core-java-perf/src/main/java/com/baeldung/jmxterm/GuessGame.java new file mode 100644 index 000000000000..c9d680880f3e --- /dev/null +++ b/core-java-modules/core-java-perf/src/main/java/com/baeldung/jmxterm/GuessGame.java @@ -0,0 +1,80 @@ +package com.baeldung.jmxterm; + +import static com.baeldung.jmxterm.RandomNumbergenerator.generateRandomNumber; + +import java.util.List; +import java.util.logging.Level; +import java.util.logging.Logger; + +public class GuessGame extends BroadcastingGuessGame { + + + public static final int SECOND = 1000; + private static final Logger log = Logger.getLogger(GuessGame.class.getCanonicalName()); + private final List players; + private volatile boolean isFinished = false; + private volatile boolean isPaused = false; + + + public GuessGame(List players) { + this.players = players; + log.setLevel(Level.WARNING); + } + + public void start() { + int randomNumber = generateRandomNumber(); + while (!isFinished) { + waitASecond(); + while (!isPaused && !isFinished) { + log.info("Current random number is " + randomNumber); + waitASecond(); + for (Player player : players) { + int guess = player.guessNumber(); + if (guess == randomNumber) { + log.info("Players " + player.getName() + " " + guess + " is correct"); + player.incrementScore(); + notifyAboutWinner(player); + randomNumber = generateRandomNumber(); + break; + } + log.info("Player " + player.getName() + " guessed incorrectly with " + guess); + } + log.info("\n"); + } + if (isPaused) { + log.info("Game is paused"); + } + if (isFinished) { + log.info("Game is finished"); + } + } + } + + @Override + public void finishGame() { + isFinished = true; + } + + @Override + public void pauseGame() { + isPaused = true; + } + + @Override + public void unpauseGame() { + isPaused = false; + } + + public List getPlayers() { + return players; + } + + private void waitASecond() { + try { + Thread.sleep(SECOND); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + +} diff --git a/core-java-modules/core-java-perf/src/main/java/com/baeldung/jmxterm/GuessGameMBean.java b/core-java-modules/core-java-perf/src/main/java/com/baeldung/jmxterm/GuessGameMBean.java new file mode 100644 index 000000000000..fdf8149f713b --- /dev/null +++ b/core-java-modules/core-java-perf/src/main/java/com/baeldung/jmxterm/GuessGameMBean.java @@ -0,0 +1,8 @@ +package com.baeldung.jmxterm; + +public interface GuessGameMBean { + + void finishGame(); + void pauseGame(); + void unpauseGame(); +} diff --git a/core-java-modules/core-java-perf/src/main/java/com/baeldung/jmxterm/MBeanGameServer.java b/core-java-modules/core-java-perf/src/main/java/com/baeldung/jmxterm/MBeanGameServer.java new file mode 100644 index 000000000000..922a0baf76ab --- /dev/null +++ b/core-java-modules/core-java-perf/src/main/java/com/baeldung/jmxterm/MBeanGameServer.java @@ -0,0 +1,37 @@ +package com.baeldung.jmxterm; + +import java.lang.management.ManagementFactory; +import javax.management.InstanceAlreadyExistsException; +import javax.management.MBeanRegistrationException; +import javax.management.MBeanServer; +import javax.management.MalformedObjectNameException; +import javax.management.NotCompliantMBeanException; +import javax.management.ObjectName; + +public class MBeanGameServer { + + public static final String ID_FORMAT = "com.baeldung.jmxterm:type=%s,id=%s"; + private final MBeanServer server = ManagementFactory.getPlatformMBeanServer(); + + public void registerPlayer(AbstractPlayerMBean player) { + registerBean(player, "player", player.getId()); + } + + public void registerGame(GuessGame guessGame) { + registerBean(guessGame, "game", "singlegame"); + guessGame.getPlayers().forEach(this::registerPlayer); + } + + private void registerBean(Object bean, String type, String id) { + try { + ObjectName name = new ObjectName(String.format(ID_FORMAT, type, id)); + server.registerMBean(bean, name); + } catch (InstanceAlreadyExistsException | + MBeanRegistrationException | + NotCompliantMBeanException | + MalformedObjectNameException e) { + throw new RuntimeException(e); + } + } + +} diff --git a/core-java-modules/core-java-perf/src/main/java/com/baeldung/jmxterm/Player.java b/core-java-modules/core-java-perf/src/main/java/com/baeldung/jmxterm/Player.java new file mode 100644 index 000000000000..b24e31390254 --- /dev/null +++ b/core-java-modules/core-java-perf/src/main/java/com/baeldung/jmxterm/Player.java @@ -0,0 +1,33 @@ +package com.baeldung.jmxterm; + +import static com.baeldung.jmxterm.RandomNumbergenerator.*; + +public class Player extends AbstractPlayerMBean { + private final String name; + private int score = 0; + + public Player(String name) { + super(); + this.name = name; + } + + @Override + public int guessNumber() { + return generateRandomNumber(); + } + + public void incrementScore() { + score++; + } + + @Override + public int getScore() { + return score; + } + + @Override + public String getName() { + return name; + } + +} diff --git a/core-java-modules/core-java-perf/src/main/java/com/baeldung/jmxterm/PlayerMBean.java b/core-java-modules/core-java-perf/src/main/java/com/baeldung/jmxterm/PlayerMBean.java new file mode 100644 index 000000000000..78b73ff578f2 --- /dev/null +++ b/core-java-modules/core-java-perf/src/main/java/com/baeldung/jmxterm/PlayerMBean.java @@ -0,0 +1,10 @@ +package com.baeldung.jmxterm; + +public interface PlayerMBean { + + int guessNumber(); + + int getScore(); + + String getName(); +} diff --git a/core-java-modules/core-java-perf/src/main/java/com/baeldung/jmxterm/RandomNumbergenerator.java b/core-java-modules/core-java-perf/src/main/java/com/baeldung/jmxterm/RandomNumbergenerator.java new file mode 100644 index 000000000000..1418f502c628 --- /dev/null +++ b/core-java-modules/core-java-perf/src/main/java/com/baeldung/jmxterm/RandomNumbergenerator.java @@ -0,0 +1,18 @@ +package com.baeldung.jmxterm; + +import java.util.concurrent.ThreadLocalRandom; + +public class RandomNumbergenerator { + + private static final int MIN = 0; + private static final int MAX = 10; + + private static final ThreadLocalRandom RANDOM = ThreadLocalRandom.current(); + + private RandomNumbergenerator() { + } + public static int generateRandomNumber() { + return RANDOM.nextInt(MIN, MAX + 1); + } + +} diff --git a/core-java-modules/core-java-perf/src/test/java/com/baeldung/jmxterm/PlayerUnitTest.java b/core-java-modules/core-java-perf/src/test/java/com/baeldung/jmxterm/PlayerUnitTest.java new file mode 100644 index 000000000000..a0f31b1995ff --- /dev/null +++ b/core-java-modules/core-java-perf/src/test/java/com/baeldung/jmxterm/PlayerUnitTest.java @@ -0,0 +1,21 @@ +package com.baeldung.jmxterm; + +import static org.junit.jupiter.api.Assertions.*; + +import org.junit.jupiter.api.Test; + +class PlayerUnitTest { + + @Test + void givenNewPlayer_thenScoreIsZero() { + Player player = new Player("John"); + assertEquals(0, player.getScore()); + } + + @Test + void givenNewPlayer_whenIncrementScore_thenScoreIsOne() { + Player player = new Player("John"); + player.incrementScore(); + assertEquals(1, player.getScore()); + } +} \ No newline at end of file From 31a403811786ee375d2125bd24f008afce2a2270 Mon Sep 17 00:00:00 2001 From: psevestre Date: Mon, 17 Apr 2023 13:16:05 -0300 Subject: [PATCH 115/390] [BAEL-5905] Spoon Library (#13853) * [BAEL-4849] Article code * [BAEL-4968] Article code * [BAEL-4968] Article code * [BAEL-4968] Article code * [BAEL-4968] Remove extra comments * [BAEL-5258] Article Code * [BAEL-2765] PKCE Support for Secret Clients * [BAEL-5698] Article code * [BAEL-5698] Article code * [BAEL-5905] Initial code * [BAEL-5905] Article code --------- Co-authored-by: Philippe Sevestre --- libraries-4/pom.xml | 22 ++++ .../baeldung/spoon/AddCopyrightProcessor.java | 15 +++ .../spoon/AddCopyrightTransformer.java | 31 +++++ .../com/baeldung/spoon/ClassReporter.java | 111 ++++++++++++++++++ .../spoon/AddCopyrightProcessorUnitTest.java | 23 ++++ .../AddCopyrightTransformerUnitTest.java | 17 +++ .../baeldung/spoon/ClassReporterUnitTest.java | 34 ++++++ .../src/test/resources/spoon/BrokenClass.java | 12 ++ .../resources/spoon/SpoonClassToTest.java | 28 +++++ messaging-modules/rabbitmq/README.md | 1 + 10 files changed, 294 insertions(+) create mode 100644 libraries-4/src/main/java/com/baeldung/spoon/AddCopyrightProcessor.java create mode 100644 libraries-4/src/main/java/com/baeldung/spoon/AddCopyrightTransformer.java create mode 100644 libraries-4/src/main/java/com/baeldung/spoon/ClassReporter.java create mode 100644 libraries-4/src/test/java/com/baeldung/spoon/AddCopyrightProcessorUnitTest.java create mode 100644 libraries-4/src/test/java/com/baeldung/spoon/AddCopyrightTransformerUnitTest.java create mode 100644 libraries-4/src/test/java/com/baeldung/spoon/ClassReporterUnitTest.java create mode 100644 libraries-4/src/test/resources/spoon/BrokenClass.java create mode 100644 libraries-4/src/test/resources/spoon/SpoonClassToTest.java diff --git a/libraries-4/pom.xml b/libraries-4/pom.xml index 87e618ee5b7b..38695706368a 100644 --- a/libraries-4/pom.xml +++ b/libraries-4/pom.xml @@ -109,9 +109,30 @@ javafx-fxml ${javafx.version} + + + fr.inria.gforge.spoon + spoon-core + ${spoon-core.version} + + + + com.fasterxml.jackson.core + jackson-core + ${jackson-core.version} + + + + com.fasterxml.jackson.core + jackson-annotations + ${jackson-annotations.version} + + + 2.14.2 + 2.14.2 1.2.6 8.2.0 1.1.0 @@ -129,6 +150,7 @@ 2.2.4 1.2.0 19 + 10.3.0 \ No newline at end of file diff --git a/libraries-4/src/main/java/com/baeldung/spoon/AddCopyrightProcessor.java b/libraries-4/src/main/java/com/baeldung/spoon/AddCopyrightProcessor.java new file mode 100644 index 000000000000..7298cffa1210 --- /dev/null +++ b/libraries-4/src/main/java/com/baeldung/spoon/AddCopyrightProcessor.java @@ -0,0 +1,15 @@ +package com.baeldung.spoon; + +import spoon.processing.AbstractProcessor; +import spoon.reflect.code.CtComment; +import spoon.reflect.code.CtComment.CommentType; +import spoon.reflect.declaration.CtClass; + +public class AddCopyrightProcessor extends AbstractProcessor> { + + @Override + public void process(CtClass clazz) { + CtComment comment = getFactory().createComment("Copyright(c) 2023 etc", CommentType.JAVADOC); + clazz.addComment(comment); + } +} diff --git a/libraries-4/src/main/java/com/baeldung/spoon/AddCopyrightTransformer.java b/libraries-4/src/main/java/com/baeldung/spoon/AddCopyrightTransformer.java new file mode 100644 index 000000000000..b7f20b6b8516 --- /dev/null +++ b/libraries-4/src/main/java/com/baeldung/spoon/AddCopyrightTransformer.java @@ -0,0 +1,31 @@ +package com.baeldung.spoon; + +import spoon.Launcher; +import spoon.SpoonAPI; +import spoon.reflect.CtModel; +import spoon.reflect.code.CtComment; +import spoon.reflect.code.CtComment.CommentType; +import spoon.reflect.declaration.CtClass; + +public class AddCopyrightTransformer { + + public void addCopyright(String source) { + + SpoonAPI spoon = new Launcher(); + spoon.addInputResource(source); + spoon.getEnvironment().setLevel("DEBUG"); + CtModel model = spoon.buildModel(); + + model.filterChildren((el) -> el instanceof CtClass) + .forEach((CtClass cl) -> { + CtComment comment = cl.getFactory() + .createComment("Copyright(c) 2023 etc", CommentType.JAVADOC); + cl.addComment(comment); + }); + + spoon.setSourceOutputDirectory("./target"); + spoon.prettyprint(); + } + + +} diff --git a/libraries-4/src/main/java/com/baeldung/spoon/ClassReporter.java b/libraries-4/src/main/java/com/baeldung/spoon/ClassReporter.java new file mode 100644 index 000000000000..a532b83be18d --- /dev/null +++ b/libraries-4/src/main/java/com/baeldung/spoon/ClassReporter.java @@ -0,0 +1,111 @@ +package com.baeldung.spoon; + +import spoon.Launcher; +import spoon.SpoonAPI; +import spoon.reflect.CtModel; +import spoon.reflect.declaration.CtClass; +import spoon.reflect.declaration.CtMethod; +import spoon.support.sniper.SniperJavaPrettyPrinter; + +/** + * Loads a given class and creates a summary o + */ +public class ClassReporter { + + + public MethodSummary generateMethodSummaryReport(String source) { + + SpoonAPI spoon = new Launcher(); + spoon.addInputResource(source); + CtModel model = spoon.buildModel(); + MethodSummary report = new MethodSummary(); + model.filterChildren((el) -> el instanceof CtClass) + .forEach((CtClass clazz) -> processMethods(report,clazz)); + + return report; + } + + private void processMethods(MethodSummary report, CtClass ctClass) { + + ctClass.filterChildren((c) -> c instanceof CtMethod ) + .forEach((CtMethod m) -> { + if (m.isPublic()) { + report.addPublicMethod(); + } + else if ( m.isPrivate()) { + report.addPrivateMethod(); + } + else if ( m.isProtected()) { + report.addProtectedMethod(); + } + else { + report.addPackagePrivateMethod(); + } + }); + } + + + public static class MethodSummary { + private int totalMethodCount; + private int publicMethodCount; + private int protectedMethodCount; + private int packagePrivateMethodCount; + private int privateMethodCount; + + void addPublicMethod() { + totalMethodCount++; + publicMethodCount++; + } + + void addPrivateMethod() { + totalMethodCount++; + privateMethodCount++; + } + + void addProtectedMethod() { + totalMethodCount++; + protectedMethodCount++; + } + + void addPackagePrivateMethod() { + totalMethodCount++; + packagePrivateMethodCount++; + } + + /** + * @return the totalMethodCount + */ + public int getTotalMethodCount() { + return totalMethodCount; + } + + /** + * @return the publicMethodCount + */ + public int getPublicMethodCount() { + return publicMethodCount; + } + + /** + * @return the protectedMethodCount + */ + public int getProtectedMethodCount() { + return protectedMethodCount; + } + + /** + * @return the privateMethodCount + */ + public int getPrivateMethodCount() { + return privateMethodCount; + } + + /** + * @return the privateMethodCount + */ + public int getPackagePrivateMethodCount() { + return packagePrivateMethodCount; + } + + } +} diff --git a/libraries-4/src/test/java/com/baeldung/spoon/AddCopyrightProcessorUnitTest.java b/libraries-4/src/test/java/com/baeldung/spoon/AddCopyrightProcessorUnitTest.java new file mode 100644 index 000000000000..44b45342b0ac --- /dev/null +++ b/libraries-4/src/test/java/com/baeldung/spoon/AddCopyrightProcessorUnitTest.java @@ -0,0 +1,23 @@ +package com.baeldung.spoon; + +import org.junit.Test; + +import spoon.Launcher; +import spoon.SpoonAPI; + +public class AddCopyrightProcessorUnitTest { + + @Test + public void whenAddCopyright_thenSuccess() { + + SpoonAPI spoon = new Launcher(); + spoon.addProcessor(new AddCopyrightProcessor()); + spoon.addInputResource("src/test/resources/spoon/SpoonClassToTest.java"); + spoon.setSourceOutputDirectory("./target/spoon-processed"); + spoon.buildModel(); + spoon.process(); + spoon.prettyprint(); + + } + +} diff --git a/libraries-4/src/test/java/com/baeldung/spoon/AddCopyrightTransformerUnitTest.java b/libraries-4/src/test/java/com/baeldung/spoon/AddCopyrightTransformerUnitTest.java new file mode 100644 index 000000000000..af6ba9e16b3b --- /dev/null +++ b/libraries-4/src/test/java/com/baeldung/spoon/AddCopyrightTransformerUnitTest.java @@ -0,0 +1,17 @@ +package com.baeldung.spoon; + +import org.junit.Test; + +public class AddCopyrightTransformerUnitTest { + + + + @Test + public void whenAddCopyright_thenSuccess() { + + AddCopyrightTransformer transformer = new AddCopyrightTransformer(); + transformer.addCopyright("src/test/resources/spoon/SpoonClassToTest.java"); + + } + +} diff --git a/libraries-4/src/test/java/com/baeldung/spoon/ClassReporterUnitTest.java b/libraries-4/src/test/java/com/baeldung/spoon/ClassReporterUnitTest.java new file mode 100644 index 000000000000..38e6d8ddc71a --- /dev/null +++ b/libraries-4/src/test/java/com/baeldung/spoon/ClassReporterUnitTest.java @@ -0,0 +1,34 @@ +package com.baeldung.spoon; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.Test; + +import com.baeldung.spoon.ClassReporter.MethodSummary; + +public class ClassReporterUnitTest { + + @Test + public void givenBrokenClass_whenGenerateReport_thenSuccess() { + ClassReporter reporter = new ClassReporter(); + MethodSummary report = reporter.generateMethodSummaryReport("src/test/resources/spoon/BrokenClass.java"); + + assertThat(report).isNotNull(); + assertThat(report.getPrivateMethodCount()).isEqualTo(0); + assertThat(report.getPublicMethodCount()).isEqualTo(1); + assertThat(report.getProtectedMethodCount()).isEqualTo(1); + + } + + @Test + public void whenGenerateReport_thenSuccess() { + + ClassReporter reporter = new ClassReporter(); + MethodSummary report = reporter.generateMethodSummaryReport("src/test/resources/spoon/SpoonClassToTest.java"); + assertThat(report).isNotNull(); + assertThat(report.getPackagePrivateMethodCount()).isEqualTo(1); + assertThat(report.getPublicMethodCount()).isEqualTo(1); + assertThat(report.getPrivateMethodCount()).isEqualTo(1); + } + +} diff --git a/libraries-4/src/test/resources/spoon/BrokenClass.java b/libraries-4/src/test/resources/spoon/BrokenClass.java new file mode 100644 index 000000000000..cf603b2afb1c --- /dev/null +++ b/libraries-4/src/test/resources/spoon/BrokenClass.java @@ -0,0 +1,12 @@ +package spoon; +public class BrokenClass { + + // Syntax error + pluvic void brokenMethod() {} + + // Syntax error + protected void protectedMethod() thraws Exception {} + + // Public method + public void publicMethod() {} +} \ No newline at end of file diff --git a/libraries-4/src/test/resources/spoon/SpoonClassToTest.java b/libraries-4/src/test/resources/spoon/SpoonClassToTest.java new file mode 100644 index 000000000000..75f06885c097 --- /dev/null +++ b/libraries-4/src/test/resources/spoon/SpoonClassToTest.java @@ -0,0 +1,28 @@ +package spoon; + +import some.superduper.HelperClass; +import some.superduper.SomeVO; + +public class SpoonClassToTest { + + private static HelperClass helper; + + public SpoonClassToTest() {} + + public int publicMethod() {} + + private int internalStuff() {} + + protected SomeVO protectedMethod() { + return new SomeVO(); + } + + void packageProtectedMethod() { + + try { + HelperClass.callSomeMethodThatThrows(); + } + catch(Exception ignored) {} + } + +} \ No newline at end of file diff --git a/messaging-modules/rabbitmq/README.md b/messaging-modules/rabbitmq/README.md index 93bb795d7b44..8cfcca3378c8 100644 --- a/messaging-modules/rabbitmq/README.md +++ b/messaging-modules/rabbitmq/README.md @@ -9,3 +9,4 @@ This module contains articles about RabbitMQ. - [Channels and Connections in RabbitMQ](https://www.baeldung.com/java-rabbitmq-channels-connections) - [Create Dynamic Queues in RabbitMQ](https://www.baeldung.com/rabbitmq-dynamic-queues) + From 5f0f58273ca47a8acbd701659afacded726f4295 Mon Sep 17 00:00:00 2001 From: Abhinav Pandey Date: Mon, 17 Apr 2023 23:33:07 +0530 Subject: [PATCH 116/390] BAEL-6355 - OpenAI API with Spring Boot --- .../config/OpenAIRestTemplateConfig.java | 25 +++++++++++ .../openapi/controller/ChatController.java | 44 +++++++++++++++++++ .../com/baeldung/openapi/dto/ChatRequest.java | 32 ++++++++++++++ .../baeldung/openapi/dto/ChatResponse.java | 38 ++++++++++++++++ .../com/baeldung/openapi/dto/Message.java | 31 +++++++++++++ .../src/main/resources/application.properties | 6 ++- 6 files changed, 175 insertions(+), 1 deletion(-) create mode 100644 spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/openapi/config/OpenAIRestTemplateConfig.java create mode 100644 spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/openapi/controller/ChatController.java create mode 100644 spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/openapi/dto/ChatRequest.java create mode 100644 spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/openapi/dto/ChatResponse.java create mode 100644 spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/openapi/dto/Message.java diff --git a/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/openapi/config/OpenAIRestTemplateConfig.java b/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/openapi/config/OpenAIRestTemplateConfig.java new file mode 100644 index 000000000000..b832ee4264c7 --- /dev/null +++ b/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/openapi/config/OpenAIRestTemplateConfig.java @@ -0,0 +1,25 @@ +package com.baeldung.openapi.config; + +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.client.RestTemplate; + +@Configuration +public class OpenAIRestTemplateConfig { + + @Value("${openai.api.key}") + private String openaiApiKey; + + @Bean + @Qualifier("openaiRestTemplate") + public RestTemplate openaiRestTemplate() { + RestTemplate restTemplate = new RestTemplate(); + restTemplate.getInterceptors().add((request, body, execution) -> { + request.getHeaders().add("Authorization", "Bearer " + openaiApiKey); + return execution.execute(request, body); + }); + return restTemplate; + } +} \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/openapi/controller/ChatController.java b/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/openapi/controller/ChatController.java new file mode 100644 index 000000000000..4cd65580dc88 --- /dev/null +++ b/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/openapi/controller/ChatController.java @@ -0,0 +1,44 @@ +package com.baeldung.openapi.controller; + +import com.baeldung.openapi.dto.ChatRequest; +import com.baeldung.openapi.dto.ChatResponse; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.client.RestTemplate; + +@RestController +public class ChatController { + + @Qualifier("openaiRestTemplate") + @Autowired + private RestTemplate restTemplate; + + @Value("${openai.model}") + private String model; + + @Value("${openai.api.url}") + private String apiUrl; + + @GetMapping("/chat") + public String chat(@RequestParam String prompt) { + // create a request + ChatRequest request = new ChatRequest(model, prompt); + + // call the API + ChatResponse response = restTemplate.postForObject( + apiUrl, + request, + ChatResponse.class); + + if (response == null || response.getChoices() == null || response.getChoices().isEmpty()) { + return "No response"; + } + + // return the first response + return response.getChoices().get(0).getMessage().getContent(); + } +} \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/openapi/dto/ChatRequest.java b/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/openapi/dto/ChatRequest.java new file mode 100644 index 000000000000..1e32b937ce55 --- /dev/null +++ b/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/openapi/dto/ChatRequest.java @@ -0,0 +1,32 @@ +package com.baeldung.openapi.dto; + +import java.util.ArrayList; +import java.util.List; + +public class ChatRequest { + private String model; + private List messages; + + public ChatRequest(String model, String prompt) { + this.model = model; + + this.messages = new ArrayList<>(); + this.messages.add(new Message("user", prompt)); + } + + public String getModel() { + return model; + } + + public void setModel(String model) { + this.model = model; + } + + public List getMessages() { + return messages; + } + + public void setMessages(List messages) { + this.messages = messages; + } +} diff --git a/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/openapi/dto/ChatResponse.java b/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/openapi/dto/ChatResponse.java new file mode 100644 index 000000000000..937e2d87dbda --- /dev/null +++ b/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/openapi/dto/ChatResponse.java @@ -0,0 +1,38 @@ +package com.baeldung.openapi.dto; + +import java.util.List; + +public class ChatResponse { + + private List choices; + + public static class Choice { + + private int index; + private Message message; + + public int getIndex() { + return index; + } + + public void setIndex(int index) { + this.index = index; + } + + public Message getMessage() { + return message; + } + + public void setMessage(Message message) { + this.message = message; + } + } + + public List getChoices() { + return choices; + } + + public void setChoices(List choices) { + this.choices = choices; + } +} diff --git a/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/openapi/dto/Message.java b/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/openapi/dto/Message.java new file mode 100644 index 000000000000..242cf4e89fc2 --- /dev/null +++ b/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/openapi/dto/Message.java @@ -0,0 +1,31 @@ +package com.baeldung.openapi.dto; + +public class Message { + + private String role; + private String content; + + Message(String role, String content) { + this.role = role; + this.content = content; + } + + Message() { + } + + public String getRole() { + return role; + } + + public void setRole(String role) { + this.role = role; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } +} \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-libraries-2/src/main/resources/application.properties b/spring-boot-modules/spring-boot-libraries-2/src/main/resources/application.properties index a18eda349ac8..47b2973fca66 100644 --- a/spring-boot-modules/spring-boot-libraries-2/src/main/resources/application.properties +++ b/spring-boot-modules/spring-boot-libraries-2/src/main/resources/application.properties @@ -47,4 +47,8 @@ resilience4j.ratelimiter.instances.rateLimiterApi.limit-refresh-period=60s resilience4j.ratelimiter.instances.rateLimiterApi.timeout-duration=0s resilience4j.ratelimiter.instances.rateLimiterApi.allow-health-indicator-to-fail=true resilience4j.ratelimiter.instances.rateLimiterApi.subscribe-for-events=true -resilience4j.ratelimiter.instances.rateLimiterApi.event-consumer-buffer-size=50 \ No newline at end of file +resilience4j.ratelimiter.instances.rateLimiterApi.event-consumer-buffer-size=50 + +openai.model=gpt-3.5-turbo +openai.api.url=https://api.openai.com/v1/chat/completions +openai.api.key=your-api-key \ No newline at end of file From b4c21214425625c4a828e1d00c0bafe2835e11f4 Mon Sep 17 00:00:00 2001 From: Azhwani <13301425+azhwani@users.noreply.github.com> Date: Tue, 18 Apr 2023 08:28:52 +0200 Subject: [PATCH 117/390] BAEL-5737: Fix the JsonMappingException: Can not deserialize instance of java.util.ArrayList (#13837) --- .../baeldung/mappingexception/Country.java | 26 +++++++++++ .../JacksonMappingExceptionUnitTest.java | 45 ++++++++++++++----- 2 files changed, 61 insertions(+), 10 deletions(-) create mode 100644 jackson-modules/jackson-exceptions/src/main/java/com/baeldung/mappingexception/Country.java diff --git a/jackson-modules/jackson-exceptions/src/main/java/com/baeldung/mappingexception/Country.java b/jackson-modules/jackson-exceptions/src/main/java/com/baeldung/mappingexception/Country.java new file mode 100644 index 000000000000..a8e6dfbc9456 --- /dev/null +++ b/jackson-modules/jackson-exceptions/src/main/java/com/baeldung/mappingexception/Country.java @@ -0,0 +1,26 @@ +package com.baeldung.mappingexception; + +import java.util.List; + +public class Country { + + private String name; + private List cities; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public List getCities() { + return cities; + } + + public void setCities(List cities) { + this.cities = cities; + } + +} diff --git a/jackson-modules/jackson-exceptions/src/test/java/com/baeldung/mappingexception/JacksonMappingExceptionUnitTest.java b/jackson-modules/jackson-exceptions/src/test/java/com/baeldung/mappingexception/JacksonMappingExceptionUnitTest.java index df3562682822..026fd6719fc6 100644 --- a/jackson-modules/jackson-exceptions/src/test/java/com/baeldung/mappingexception/JacksonMappingExceptionUnitTest.java +++ b/jackson-modules/jackson-exceptions/src/test/java/com/baeldung/mappingexception/JacksonMappingExceptionUnitTest.java @@ -1,34 +1,33 @@ package com.baeldung.mappingexception; import static org.hamcrest.Matchers.containsString; -import static org.hamcrest.Matchers.not; import static org.hamcrest.Matchers.notNullValue; import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertThrows; +import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.Arrays; -import java.io.IOException; -import java.util.List; import org.junit.Test; import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility; import com.fasterxml.jackson.annotation.PropertyAccessor; -import com.fasterxml.jackson.core.JsonGenerationException; -import com.fasterxml.jackson.core.JsonParseException; +import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.module.SimpleModule; -import com.google.common.collect.Lists; public class JacksonMappingExceptionUnitTest { @Test(expected = JsonMappingException.class) - public final void givenObjectHasNoAccessors_whenSerializing_thenException() throws JsonParseException, IOException { + public void givenObjectHasNoAccessors_whenSerializing_thenException() throws JsonProcessingException { final String dtoAsString = new ObjectMapper().writeValueAsString(new MyDtoNoAccessors()); assertThat(dtoAsString, notNullValue()); } @Test - public final void givenObjectHasNoAccessors_whenSerializingWithPrivateFieldsVisibility_thenNoException() throws JsonParseException, IOException { + public void givenObjectHasNoAccessors_whenSerializingWithPrivateFieldsVisibility_thenNoException() throws JsonProcessingException { final ObjectMapper objectMapper = new ObjectMapper(); objectMapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY); final String dtoAsString = objectMapper.writeValueAsString(new MyDtoNoAccessors()); @@ -39,7 +38,7 @@ public final void givenObjectHasNoAccessors_whenSerializingWithPrivateFieldsVisi } @Test - public final void givenObjectHasNoAccessorsButHasVisibleFields_whenSerializing_thenNoException() throws JsonParseException, IOException { + public void givenObjectHasNoAccessorsButHasVisibleFields_whenSerializing_thenNoException() throws JsonProcessingException { final ObjectMapper objectMapper = new ObjectMapper(); final String dtoAsString = objectMapper.writeValueAsString(new MyDtoNoAccessorsAndFieldVisibility()); @@ -48,4 +47,30 @@ public final void givenObjectHasNoAccessorsButHasVisibleFields_whenSerializing_t assertThat(dtoAsString, containsString("booleanValue")); } + @Test + public void givenJsonWithInvalidList_whenDeserializing_thenThrowException() throws JsonProcessingException { + final String json = "{\"name\":\"Netherlands\",\"cities\":{\"Amsterdam\", \"Tamassint\"}}"; + final ObjectMapper mapper = new ObjectMapper(); + + Exception exception = assertThrows(JsonMappingException.class, () -> mapper.reader() + .forType(Country.class) + .readValue(json)); + + assertTrue(exception.getMessage() + .contains("Cannot deserialize value of type `java.util.ArrayList`")); + } + + @Test + public void givenJsonWithValidList_whenDeserializing_thenCorrect() throws JsonProcessingException { + final String json = "{\"name\":\"Netherlands\",\"cities\":[\"Amsterdam\", \"Tamassint\"]}"; + final ObjectMapper mapper = new ObjectMapper(); + + Country country = mapper.reader() + .forType(Country.class) + .readValue(json); + + assertEquals("Netherlands", country.getName()); + assertEquals(Arrays.asList("Amsterdam", "Tamassint"), country.getCities()); + } + } From 00229f7944552df049f93f7c1e8c2a6ae76735b1 Mon Sep 17 00:00:00 2001 From: Bipin kumar Date: Wed, 19 Apr 2023 20:25:45 +0530 Subject: [PATCH 118/390] JAVA-19787 : Adding example for h2 default sql schema and data initialization (#13863) --- .../dataloading/ApplicationDataLoading.java | 20 ++++++++ .../com/baeldung/dataloading/model/User.java | 49 +++++++++++++++++++ .../application-datasource.properties | 11 +++++ 3 files changed, 80 insertions(+) create mode 100644 persistence-modules/spring-boot-persistence/src/main/java/com/baeldung/dataloading/ApplicationDataLoading.java create mode 100644 persistence-modules/spring-boot-persistence/src/main/java/com/baeldung/dataloading/model/User.java create mode 100644 persistence-modules/spring-boot-persistence/src/main/resources/application-datasource.properties diff --git a/persistence-modules/spring-boot-persistence/src/main/java/com/baeldung/dataloading/ApplicationDataLoading.java b/persistence-modules/spring-boot-persistence/src/main/java/com/baeldung/dataloading/ApplicationDataLoading.java new file mode 100644 index 000000000000..619f0e0411bb --- /dev/null +++ b/persistence-modules/spring-boot-persistence/src/main/java/com/baeldung/dataloading/ApplicationDataLoading.java @@ -0,0 +1,20 @@ +package com.baeldung.dataloading; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.ApplicationContext; +import org.springframework.core.env.AbstractEnvironment; + +import com.baeldung.boot.Application; + +@SpringBootApplication(scanBasePackages = { "com.baeldung.dataloading" }) +public class ApplicationDataLoading { + private static ApplicationContext applicationContext; + + public static void main(String[] args) { + System.setProperty(AbstractEnvironment.ACTIVE_PROFILES_PROPERTY_NAME, "datasource"); + + applicationContext = SpringApplication.run(Application.class, args); + } + +} diff --git a/persistence-modules/spring-boot-persistence/src/main/java/com/baeldung/dataloading/model/User.java b/persistence-modules/spring-boot-persistence/src/main/java/com/baeldung/dataloading/model/User.java new file mode 100644 index 000000000000..e0927f36465c --- /dev/null +++ b/persistence-modules/spring-boot-persistence/src/main/java/com/baeldung/dataloading/model/User.java @@ -0,0 +1,49 @@ +package com.baeldung.dataloading.model; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; + +@Entity +@Table(name = "users") +public class User { + + @Id + @GeneratedValue + private Integer id; + private String name; + private Integer status; + + public User() { + } + + public User(String name, Integer status) { + this.name = name; + this.status = status; + } + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Integer getStatus() { + return status; + } + + public void setStatus(Integer status) { + this.status = status; + } +} diff --git a/persistence-modules/spring-boot-persistence/src/main/resources/application-datasource.properties b/persistence-modules/spring-boot-persistence/src/main/resources/application-datasource.properties new file mode 100644 index 000000000000..11f409719f96 --- /dev/null +++ b/persistence-modules/spring-boot-persistence/src/main/resources/application-datasource.properties @@ -0,0 +1,11 @@ +spring.datasource.driver-class-name=org.h2.Driver +spring.datasource.url=jdbc:h2:mem:db;DB_CLOSE_DELAY=-1 +spring.datasource.username=sa +spring.datasource.password= +spring.jpa.hibernate.ddl-auto=none +# Enabling H2 Console +spring.h2.console.enabled=true +# Uppercase Table Names +spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl +hibernate.globally_quoted_identifiers=true +spring.jpa.database-platform=org.hibernate.dialect.H2Dialect From 9bf58c945a7f8695eed2de95dbc1ff0fbbd9db12 Mon Sep 17 00:00:00 2001 From: Dhawal Kapil Date: Wed, 19 Apr 2023 23:28:25 +0530 Subject: [PATCH 119/390] JAVA-19718 Minor corrections and fixes (#13865) --- .../dataloading/ApplicationDataLoading.java | 12 ++--- .../baeldung/dataloading/model/Country.java | 36 ++++++++++++++ .../com/baeldung/dataloading/model/User.java | 49 ------------------- .../application-datasource.properties | 13 +++-- 4 files changed, 48 insertions(+), 62 deletions(-) create mode 100644 persistence-modules/spring-boot-persistence/src/main/java/com/baeldung/dataloading/model/Country.java delete mode 100644 persistence-modules/spring-boot-persistence/src/main/java/com/baeldung/dataloading/model/User.java diff --git a/persistence-modules/spring-boot-persistence/src/main/java/com/baeldung/dataloading/ApplicationDataLoading.java b/persistence-modules/spring-boot-persistence/src/main/java/com/baeldung/dataloading/ApplicationDataLoading.java index 619f0e0411bb..40742d303e7b 100644 --- a/persistence-modules/spring-boot-persistence/src/main/java/com/baeldung/dataloading/ApplicationDataLoading.java +++ b/persistence-modules/spring-boot-persistence/src/main/java/com/baeldung/dataloading/ApplicationDataLoading.java @@ -2,19 +2,15 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.context.ApplicationContext; import org.springframework.core.env.AbstractEnvironment; -import com.baeldung.boot.Application; - @SpringBootApplication(scanBasePackages = { "com.baeldung.dataloading" }) public class ApplicationDataLoading { - private static ApplicationContext applicationContext; - public static void main(String[] args) { - System.setProperty(AbstractEnvironment.ACTIVE_PROFILES_PROPERTY_NAME, "datasource"); + public static void main(String[] args) { + System.setProperty(AbstractEnvironment.ACTIVE_PROFILES_PROPERTY_NAME, "datasource"); - applicationContext = SpringApplication.run(Application.class, args); - } + SpringApplication.run(ApplicationDataLoading.class, args); + } } diff --git a/persistence-modules/spring-boot-persistence/src/main/java/com/baeldung/dataloading/model/Country.java b/persistence-modules/spring-boot-persistence/src/main/java/com/baeldung/dataloading/model/Country.java new file mode 100644 index 000000000000..692d48caf023 --- /dev/null +++ b/persistence-modules/spring-boot-persistence/src/main/java/com/baeldung/dataloading/model/Country.java @@ -0,0 +1,36 @@ +package com.baeldung.dataloading.model; + +import static javax.persistence.GenerationType.IDENTITY; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; + +@Entity +public class Country { + + @Id + @GeneratedValue(strategy = IDENTITY) + private Integer id; + + @Column(nullable = false) + private String name; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + +} diff --git a/persistence-modules/spring-boot-persistence/src/main/java/com/baeldung/dataloading/model/User.java b/persistence-modules/spring-boot-persistence/src/main/java/com/baeldung/dataloading/model/User.java deleted file mode 100644 index e0927f36465c..000000000000 --- a/persistence-modules/spring-boot-persistence/src/main/java/com/baeldung/dataloading/model/User.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.baeldung.dataloading.model; - -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; -import javax.persistence.Table; - -@Entity -@Table(name = "users") -public class User { - - @Id - @GeneratedValue - private Integer id; - private String name; - private Integer status; - - public User() { - } - - public User(String name, Integer status) { - this.name = name; - this.status = status; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public Integer getStatus() { - return status; - } - - public void setStatus(Integer status) { - this.status = status; - } -} diff --git a/persistence-modules/spring-boot-persistence/src/main/resources/application-datasource.properties b/persistence-modules/spring-boot-persistence/src/main/resources/application-datasource.properties index 11f409719f96..98cf2ba96568 100644 --- a/persistence-modules/spring-boot-persistence/src/main/resources/application-datasource.properties +++ b/persistence-modules/spring-boot-persistence/src/main/resources/application-datasource.properties @@ -2,10 +2,13 @@ spring.datasource.driver-class-name=org.h2.Driver spring.datasource.url=jdbc:h2:mem:db;DB_CLOSE_DELAY=-1 spring.datasource.username=sa spring.datasource.password= -spring.jpa.hibernate.ddl-auto=none + +spring.jpa.database-platform=org.hibernate.dialect.H2Dialect +spring.jpa.hibernate.ddl-auto=create +spring.jpa.defer-datasource-initialization=true + # Enabling H2 Console spring.h2.console.enabled=true -# Uppercase Table Names -spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl -hibernate.globally_quoted_identifiers=true -spring.jpa.database-platform=org.hibernate.dialect.H2Dialect + +# By default enabled for Embedded Databases +#spring.sql.init.mode=always \ No newline at end of file From 76541c07cb7990ea2f07a3a31f565423b68ac8eb Mon Sep 17 00:00:00 2001 From: edizor <113095366+edizor@users.noreply.github.com> Date: Thu, 20 Apr 2023 17:13:37 +0800 Subject: [PATCH 120/390] Update README.md [skip ci] --- core-java-modules/core-java-strings/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/core-java-modules/core-java-strings/README.md b/core-java-modules/core-java-strings/README.md index 835e9ec58259..84cf31e8bd40 100644 --- a/core-java-modules/core-java-strings/README.md +++ b/core-java-modules/core-java-strings/README.md @@ -13,3 +13,4 @@ This module contains articles about strings in Java. - [Java Multi-line String](https://www.baeldung.com/java-multiline-string) - [Guide to Java String Pool](https://www.baeldung.com/java-string-pool) - [Fixing “constant string too long” Build Error](https://www.baeldung.com/java-constant-string-too-long-error) +- [Reuse StringBuilder for Efficiency](https://www.baeldung.com/java-reuse-stringbuilder-for-efficiency) From 88294906d32e585d12f20059226dfb649e316938 Mon Sep 17 00:00:00 2001 From: edizor <113095366+edizor@users.noreply.github.com> Date: Thu, 20 Apr 2023 17:17:22 +0800 Subject: [PATCH 121/390] Update README.md [skip ci] --- core-java-modules/core-java-numbers-6/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core-java-modules/core-java-numbers-6/README.md b/core-java-modules/core-java-numbers-6/README.md index 4856d86052c2..97e4e2ca2803 100644 --- a/core-java-modules/core-java-numbers-6/README.md +++ b/core-java-modules/core-java-numbers-6/README.md @@ -1,4 +1,4 @@ ### Relevant Articles: - [Java Program to Calculate Pi](https://www.baeldung.com/java-monte-carlo-compute-pi) - -- More articles: [[<-- prev]](../core-java-numbers-5) \ No newline at end of file +- [Convert Integer to Hexadecimal in Java](https://www.baeldung.com/java-convert-int-to-hex) +- More articles: [[<-- prev]](../core-java-numbers-5) From e980e48583b2091e2487e9e1c05124ffb44380f3 Mon Sep 17 00:00:00 2001 From: edizor <113095366+edizor@users.noreply.github.com> Date: Thu, 20 Apr 2023 17:19:59 +0800 Subject: [PATCH 122/390] Update README.md [skip ci] --- core-java-modules/core-java-19/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/core-java-modules/core-java-19/README.md b/core-java-modules/core-java-19/README.md index 6a9c6c7fdd3c..68244d9f91e8 100644 --- a/core-java-modules/core-java-19/README.md +++ b/core-java-modules/core-java-19/README.md @@ -1,3 +1,4 @@ ## Relevant Articles - [Record Patterns in Java 19](https://www.baeldung.com/java-19-record-patterns) - [Structured Concurrency in Java 19](https://www.baeldung.com/java-structured-concurrency) +- [Possible Root Causes for High CPU Usage in Java](https://www.baeldung.com/java-high-cpu-usage-causes) From c43691235bcc25a09f36ce7a02c0f671e5d60b34 Mon Sep 17 00:00:00 2001 From: edizor <113095366+edizor@users.noreply.github.com> Date: Thu, 20 Apr 2023 17:24:21 +0800 Subject: [PATCH 123/390] Update README.md [skip ci] --- spring-boot-modules/spring-boot-properties-3/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/spring-boot-modules/spring-boot-properties-3/README.md b/spring-boot-modules/spring-boot-properties-3/README.md index 37b63abb844c..4bc4a2325f2f 100644 --- a/spring-boot-modules/spring-boot-properties-3/README.md +++ b/spring-boot-modules/spring-boot-properties-3/README.md @@ -11,4 +11,5 @@ - [IntelliJ – Cannot Resolve Spring Boot Configuration Properties Error](https://www.baeldung.com/intellij-resolve-spring-boot-configuration-properties) - [Log Properties in a Spring Boot Application](https://www.baeldung.com/spring-boot-log-properties) - [Using Environment Variables in Spring Boot’s application.properties](https://www.baeldung.com/spring-boot-properties-env-variables) +- [Loading Multiple YAML Configuration Files in Spring Boot](https://www.baeldung.com/spring-boot-load-multiple-yaml-configuration-files) - More articles: [[<-- prev]](../spring-boot-properties-2) From 6046d82347103fd225e67509701634e96e3b65b0 Mon Sep 17 00:00:00 2001 From: edizor <113095366+edizor@users.noreply.github.com> Date: Thu, 20 Apr 2023 17:28:12 +0800 Subject: [PATCH 124/390] Update README.md [skip ci] --- core-java-modules/core-java-8-datetime-2/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core-java-modules/core-java-8-datetime-2/README.md b/core-java-modules/core-java-8-datetime-2/README.md index f16563aacc5a..56f66c10fbcf 100644 --- a/core-java-modules/core-java-8-datetime-2/README.md +++ b/core-java-modules/core-java-8-datetime-2/README.md @@ -2,4 +2,5 @@ - [Generating Random Dates in Java](https://www.baeldung.com/java-random-dates) - [Creating a LocalDate with Values in Java](https://www.baeldung.com/java-creating-localdate-with-values) -- [[<-- Prev]](/core-java-modules/core-java-datetime-java8-1) \ No newline at end of file +- [Parsing Date Strings with Varying Formats](https://www.baeldung.com/java-parsing-dates-many-formats) +- [[<-- Prev]](/core-java-modules/core-java-datetime-java8-1) From d5b9bb2712badad3cc9e9c6371e700928cb4d745 Mon Sep 17 00:00:00 2001 From: edizor <113095366+edizor@users.noreply.github.com> Date: Thu, 20 Apr 2023 17:30:31 +0800 Subject: [PATCH 125/390] Update README.md [skip ci] --- core-java-modules/core-java-uuid/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/core-java-modules/core-java-uuid/README.md b/core-java-modules/core-java-uuid/README.md index 4438c9a7702e..bd7bd9d9daac 100644 --- a/core-java-modules/core-java-uuid/README.md +++ b/core-java-modules/core-java-uuid/README.md @@ -5,3 +5,4 @@ - [Guide to UUID in Java](http://www.baeldung.com/java-uuid) - [Validate UUID String in Java](https://www.baeldung.com/java-validate-uuid-string) - [Generate the Same UUID From a String in Java](https://www.baeldung.com/java-generate-same-uuid-from-string) +- [Generating Time Based UUIDs](https://www.baeldung.com/java-generating-time-based-uuids) From f99f38f268693072c8bd29bfb139b7c4e0a5905d Mon Sep 17 00:00:00 2001 From: edizor <113095366+edizor@users.noreply.github.com> Date: Thu, 20 Apr 2023 17:34:22 +0800 Subject: [PATCH 126/390] Update README.md [skip ci] --- spring-boot-modules/spring-caching/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/spring-boot-modules/spring-caching/README.md b/spring-boot-modules/spring-caching/README.md index e10d6080e87c..4994c22c0bd6 100644 --- a/spring-boot-modules/spring-caching/README.md +++ b/spring-boot-modules/spring-caching/README.md @@ -6,3 +6,4 @@ - [Using Multiple Cache Managers in Spring](https://www.baeldung.com/spring-multiple-cache-managers) - [Testing @Cacheable on Spring Data Repositories](https://www.baeldung.com/spring-data-testing-cacheable) - [Spring Boot Ehcache Example](https://www.baeldung.com/spring-boot-ehcache) +- [Get All Cached Keys with Caffeine Cache in Spring Boot](https://www.baeldung.com/spring-boot-caffeine-spring-get-all-keys) From adf30711812aa7baeb385ae00376970c873b52ce Mon Sep 17 00:00:00 2001 From: edizor <113095366+edizor@users.noreply.github.com> Date: Thu, 20 Apr 2023 17:38:05 +0800 Subject: [PATCH 127/390] Update README.md [skip ci] --- aws-modules/aws-s3/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/aws-modules/aws-s3/README.md b/aws-modules/aws-s3/README.md index efebf7d933bf..109a8984052d 100644 --- a/aws-modules/aws-s3/README.md +++ b/aws-modules/aws-s3/README.md @@ -6,4 +6,5 @@ This module contains articles about Simple Storage Service (S3) on AWS - [AWS S3 with Java](https://www.baeldung.com/aws-s3-java) - [Multipart Uploads in Amazon S3 with Java](https://www.baeldung.com/aws-s3-multipart-upload) -- [Using the JetS3t Java Client With Amazon S3](https://www.baeldung.com/jets3t-amazon-s3) \ No newline at end of file +- [Using the JetS3t Java Client With Amazon S3](https://www.baeldung.com/jets3t-amazon-s3) +- [Check if a Specified Key Exists in a Given S3 Bucket Using Java](https://www.baeldung.com/java-aws-s3-check-specified-key-exists) From f95a6ad63c1ce1b1dce48fba30005678d7d68cef Mon Sep 17 00:00:00 2001 From: edizor <113095366+edizor@users.noreply.github.com> Date: Thu, 20 Apr 2023 17:43:02 +0800 Subject: [PATCH 128/390] Update README.md [skip ci] --- spring-boot-modules/spring-boot-data-3/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/spring-boot-modules/spring-boot-data-3/README.md b/spring-boot-modules/spring-boot-data-3/README.md index edb9394277f3..7130d251181c 100644 --- a/spring-boot-modules/spring-boot-data-3/README.md +++ b/spring-boot-modules/spring-boot-data-3/README.md @@ -1,3 +1,4 @@ ### Relevant Articles: - [Spring Data JPA – Run an App Without a Database](https://www.baeldung.com/spring-data-jpa-run-app-without-db) - [Integrate AWS Secrets Manager in Spring Boot](https://www.baeldung.com/spring-boot-integrate-aws-secrets-manager) +- [Fix Spring Data JPA Exception: No Property Found for Type](https://www.baeldung.com/spring-data-jpa-exception-no-property-found-for-type) From 6b736c476b2253e71b282334e0cff1f7a1d7ae61 Mon Sep 17 00:00:00 2001 From: edizor <113095366+edizor@users.noreply.github.com> Date: Thu, 20 Apr 2023 17:48:05 +0800 Subject: [PATCH 129/390] Update README.md [skip ci] --- core-java-modules/core-java-9-jigsaw/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core-java-modules/core-java-9-jigsaw/README.md b/core-java-modules/core-java-9-jigsaw/README.md index cfffb865886c..73905e6033e5 100644 --- a/core-java-modules/core-java-9-jigsaw/README.md +++ b/core-java-modules/core-java-9-jigsaw/README.md @@ -8,5 +8,5 @@ This module contains articles about Project Jigsaw and the Java Platform Module - [A Guide to Java 9 Modularity](https://www.baeldung.com/java-9-modularity) - [Java 9 java.lang.Module API](https://www.baeldung.com/java-9-module-api) - [Java 9 Illegal Reflective Access Warning](https://www.baeldung.com/java-illegal-reflective-access) - +- [Java Modularity and Unit Testing](https://www.baeldung.com/java-modularity-unit-testing) From 66364072caa9735d6147659f7e1231a92a3342f0 Mon Sep 17 00:00:00 2001 From: edizor <113095366+edizor@users.noreply.github.com> Date: Thu, 20 Apr 2023 17:52:19 +0800 Subject: [PATCH 130/390] Create README.md [skip ci] --- gradle-modules/gradle-customization/protobuf/README.md | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 gradle-modules/gradle-customization/protobuf/README.md diff --git a/gradle-modules/gradle-customization/protobuf/README.md b/gradle-modules/gradle-customization/protobuf/README.md new file mode 100644 index 000000000000..4e94aa3557dc --- /dev/null +++ b/gradle-modules/gradle-customization/protobuf/README.md @@ -0,0 +1,2 @@ +## Relevant Articles +- [Configuring Protobuf Compilation with Custom Source Directories](https://www.baeldung.com/java-configure-protobuf-compilation-custom-source-directories) From b9d4700181722e7292795c4af8f997955cd2612e Mon Sep 17 00:00:00 2001 From: edizor <113095366+edizor@users.noreply.github.com> Date: Thu, 20 Apr 2023 17:54:06 +0800 Subject: [PATCH 131/390] Update README.md [skip ci] --- jackson-modules/jackson-exceptions/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/jackson-modules/jackson-exceptions/README.md b/jackson-modules/jackson-exceptions/README.md index 6f082aaaa563..b9c43cb09f1d 100644 --- a/jackson-modules/jackson-exceptions/README.md +++ b/jackson-modules/jackson-exceptions/README.md @@ -5,3 +5,4 @@ This module contains articles about Jackson exceptions. ### Relevant Articles: - [Jackson Exceptions – Problems and Solutions](https://www.baeldung.com/jackson-exception) - [Jackson – JsonMappingException (No serializer found for class)](https://www.baeldung.com/jackson-jsonmappingexception) +- [Fix the JsonMappingException: Can not deserialize instance of java.util.ArrayList from Object value (token `JsonToken.START_OBJECT`)](https://www.baeldung.com/jsonmappingexception-can-not-deserialize-instance-of-java-util-arraylist-from-object-value-token-jsontoken-start_object) From c9073e9db751eb32a005aaca229123c09bc357a5 Mon Sep 17 00:00:00 2001 From: Pedro Lopes Date: Thu, 20 Apr 2023 07:34:11 -0300 Subject: [PATCH 132/390] BAEL-6291: @StandardException Annotation in Lombok (#13772) * custom exception class * exception in vanilla java * Revert "exception in vanilla java" This reverts commit c1a47b95c558a2eb2e9cf782e633658cee08d05a. * adding vanilla java exception --- .../lombok/standardexception/CustomException.java | 7 +++++++ .../CustomNumberFormatException.java | 11 +++++++++++ 2 files changed, 18 insertions(+) create mode 100644 lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/standardexception/CustomException.java create mode 100644 lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/standardexception/CustomNumberFormatException.java diff --git a/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/standardexception/CustomException.java b/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/standardexception/CustomException.java new file mode 100644 index 000000000000..bee85b339814 --- /dev/null +++ b/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/standardexception/CustomException.java @@ -0,0 +1,7 @@ +package com.baeldung.lombok.standardexception; + +import lombok.experimental.StandardException; + +@StandardException +public class CustomException extends NumberFormatException { +} diff --git a/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/standardexception/CustomNumberFormatException.java b/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/standardexception/CustomNumberFormatException.java new file mode 100644 index 000000000000..fbd98cac1643 --- /dev/null +++ b/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/standardexception/CustomNumberFormatException.java @@ -0,0 +1,11 @@ +package com.baeldung.lombok.standardexception; + +public class CustomNumberFormatException extends NumberFormatException { + public CustomNumberFormatException() { + super(); + } + + public CustomNumberFormatException(String s) { + super(s); + } +} \ No newline at end of file From 9f3235b979fe69ce541e41742ddaedcd1f244925 Mon Sep 17 00:00:00 2001 From: Mikhail Polivakha <68962645+Mikhail2048@users.noreply.github.com> Date: Thu, 20 Apr 2023 17:30:56 +0300 Subject: [PATCH 133/390] misha2048 Generate uuids with hibernate (#13785) * misha2048 Retrying Requests using Apache HttpClient * Generate UUIDs with Hibernate misha2048 * BAEL-6321 change target module after review --------- Co-authored-by: Mihail Polivaha <68962645+Mihail2048@users.noreply.github.com> --- persistence-modules/hibernate-jpa/pom.xml | 3 +- .../EmployeeSearchServiceIntegrationTest.java | 11 +-- .../hibernate-mapping-2/pom.xml | 1 - .../{manytomany/util => }/HibernateUtil.java | 10 ++- .../main/java/com/baeldung/uuids/Element.java | 32 ++++++++ .../java/com/baeldung/uuids/Reservation.java | 43 ++++++++++ .../main/java/com/baeldung/uuids/Sale.java | 36 +++++++++ .../java/com/baeldung/uuids/WebSiteUser.java | 33 ++++++++ ...nyToManyAnnotationMainIntegrationTest.java | 2 +- ...IDsHibernateGenerationIntegrationTest.java | 78 +++++++++++++++++++ persistence-modules/pom.xml | 6 +- 11 files changed, 240 insertions(+), 15 deletions(-) rename persistence-modules/hibernate-mapping-2/src/main/java/com/baeldung/{manytomany/util => }/HibernateUtil.java (80%) create mode 100644 persistence-modules/hibernate-mapping-2/src/main/java/com/baeldung/uuids/Element.java create mode 100644 persistence-modules/hibernate-mapping-2/src/main/java/com/baeldung/uuids/Reservation.java create mode 100644 persistence-modules/hibernate-mapping-2/src/main/java/com/baeldung/uuids/Sale.java create mode 100644 persistence-modules/hibernate-mapping-2/src/main/java/com/baeldung/uuids/WebSiteUser.java create mode 100644 persistence-modules/hibernate-mapping-2/src/test/java/com/baeldung/hibernate/uuids/UUIDsHibernateGenerationIntegrationTest.java diff --git a/persistence-modules/hibernate-jpa/pom.xml b/persistence-modules/hibernate-jpa/pom.xml index 086e487eb906..5a99c1c4d0dc 100644 --- a/persistence-modules/hibernate-jpa/pom.xml +++ b/persistence-modules/hibernate-jpa/pom.xml @@ -83,7 +83,6 @@ - 6.1.7.Final 8.0.32 2.6.0 3.0.4 @@ -92,4 +91,4 @@ 1.4.6 - \ No newline at end of file + diff --git a/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/jpacriteriabuilder/EmployeeSearchServiceIntegrationTest.java b/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/jpacriteriabuilder/EmployeeSearchServiceIntegrationTest.java index d9bffcfc08d7..16d1057285cb 100644 --- a/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/jpacriteriabuilder/EmployeeSearchServiceIntegrationTest.java +++ b/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/jpacriteriabuilder/EmployeeSearchServiceIntegrationTest.java @@ -81,13 +81,10 @@ public final void teardown() { @Test public final void givenCriteriaQuery_whenSearchedUsingCriteriaBuilderWithListofAuthors_thenResultIsFilteredByAuthorNames() { - List titles = new ArrayList<>() { - { - add("Manager"); - add("Senior Manager"); - add("Director"); - } - }; + List titles = new ArrayList<>(); + titles.add("Manager"); + titles.add("Senior Manager"); + titles.add("Director"); List result = searchService.filterbyTitleUsingCriteriaBuilder(titles); assertEquals("Number of Employees does not match with expected.", 6, result.size()); assertThat(result.stream() diff --git a/persistence-modules/hibernate-mapping-2/pom.xml b/persistence-modules/hibernate-mapping-2/pom.xml index a56f67b202d3..1b9a3e45d3df 100644 --- a/persistence-modules/hibernate-mapping-2/pom.xml +++ b/persistence-modules/hibernate-mapping-2/pom.xml @@ -62,7 +62,6 @@ 6.0.6 3.0.3 - 6.1.7.Final 9.0.0.M26 4.0.2 2.1.214 diff --git a/persistence-modules/hibernate-mapping-2/src/main/java/com/baeldung/manytomany/util/HibernateUtil.java b/persistence-modules/hibernate-mapping-2/src/main/java/com/baeldung/HibernateUtil.java similarity index 80% rename from persistence-modules/hibernate-mapping-2/src/main/java/com/baeldung/manytomany/util/HibernateUtil.java rename to persistence-modules/hibernate-mapping-2/src/main/java/com/baeldung/HibernateUtil.java index d42956456467..26ad7e77ba13 100644 --- a/persistence-modules/hibernate-mapping-2/src/main/java/com/baeldung/manytomany/util/HibernateUtil.java +++ b/persistence-modules/hibernate-mapping-2/src/main/java/com/baeldung/HibernateUtil.java @@ -1,4 +1,4 @@ -package com.baeldung.manytomany.util; +package com.baeldung; import org.hibernate.SessionFactory; import org.hibernate.boot.registry.StandardServiceRegistryBuilder; @@ -9,6 +9,10 @@ import com.baeldung.manytomany.model.Employee; import com.baeldung.manytomany.model.Project; +import com.baeldung.uuids.WebSiteUser; +import com.baeldung.uuids.Element; +import com.baeldung.uuids.Reservation; +import com.baeldung.uuids.Sale; public class HibernateUtil { @@ -21,6 +25,10 @@ private static SessionFactory buildSessionFactory() { Configuration configuration = new Configuration(); configuration.addAnnotatedClass(Employee.class); configuration.addAnnotatedClass(Project.class); + configuration.addAnnotatedClass(WebSiteUser.class); + configuration.addAnnotatedClass(Element.class); + configuration.addAnnotatedClass(Reservation.class); + configuration.addAnnotatedClass(Sale.class); configuration.configure("manytomany.cfg.xml"); LOGGER.debug("Hibernate Annotation Configuration loaded"); diff --git a/persistence-modules/hibernate-mapping-2/src/main/java/com/baeldung/uuids/Element.java b/persistence-modules/hibernate-mapping-2/src/main/java/com/baeldung/uuids/Element.java new file mode 100644 index 000000000000..1a17cba90c04 --- /dev/null +++ b/persistence-modules/hibernate-mapping-2/src/main/java/com/baeldung/uuids/Element.java @@ -0,0 +1,32 @@ +package com.baeldung.uuids; + +import java.util.UUID; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import org.hibernate.annotations.UuidGenerator; + +@Entity +public class Element { + + @Id + @UuidGenerator + private String id; + + private String name; + + 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; + } +} \ No newline at end of file diff --git a/persistence-modules/hibernate-mapping-2/src/main/java/com/baeldung/uuids/Reservation.java b/persistence-modules/hibernate-mapping-2/src/main/java/com/baeldung/uuids/Reservation.java new file mode 100644 index 000000000000..83b232d94014 --- /dev/null +++ b/persistence-modules/hibernate-mapping-2/src/main/java/com/baeldung/uuids/Reservation.java @@ -0,0 +1,43 @@ +package com.baeldung.uuids; + +import java.util.UUID; +import jakarta.persistence.Id; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; + +@Entity +public class Reservation { + + @Id + @GeneratedValue(strategy = GenerationType.UUID) + private UUID id; + + private String status; + + private String number; + + public UUID getId() { + return id; + } + + public void setId(UUID id) { + this.id = id; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getNumber() { + return number; + } + + public void setNumber(String number) { + this.number = number; + } +} diff --git a/persistence-modules/hibernate-mapping-2/src/main/java/com/baeldung/uuids/Sale.java b/persistence-modules/hibernate-mapping-2/src/main/java/com/baeldung/uuids/Sale.java new file mode 100644 index 000000000000..f9b1c246cd6c --- /dev/null +++ b/persistence-modules/hibernate-mapping-2/src/main/java/com/baeldung/uuids/Sale.java @@ -0,0 +1,36 @@ +package com.baeldung.uuids; + +import jakarta.persistence.Id; +import jakarta.persistence.Entity; +import org.hibernate.annotations.UuidGenerator; + +import java.util.UUID; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import org.hibernate.annotations.UuidGenerator; + +@Entity +public class Sale { + + @Id + @UuidGenerator + private UUID id; + + private boolean completed; + + public UUID getId() { + return id; + } + + public void setId(UUID id) { + this.id = id; + } + + public boolean isCompleted() { + return completed; + } + + public void setCompleted(boolean completed) { + this.completed = completed; + } +} \ No newline at end of file diff --git a/persistence-modules/hibernate-mapping-2/src/main/java/com/baeldung/uuids/WebSiteUser.java b/persistence-modules/hibernate-mapping-2/src/main/java/com/baeldung/uuids/WebSiteUser.java new file mode 100644 index 000000000000..1150c03dcc48 --- /dev/null +++ b/persistence-modules/hibernate-mapping-2/src/main/java/com/baeldung/uuids/WebSiteUser.java @@ -0,0 +1,33 @@ +package com.baeldung.uuids; + +import java.util.UUID; +import java.time.LocalDate; +import jakarta.persistence.Id; +import jakarta.persistence.Entity; +import org.hibernate.annotations.UuidGenerator; + +@Entity +public class WebSiteUser { + + @Id + @UuidGenerator(style = UuidGenerator.Style.TIME) + private UUID id; + + private LocalDate registrationDate; + + public UUID getId() { + return id; + } + + public void setId(UUID id) { + this.id = id; + } + + public LocalDate getRegistrationDate() { + return registrationDate; + } + + public void setRegistrationDate(LocalDate registrationDate) { + this.registrationDate = registrationDate; + } +} diff --git a/persistence-modules/hibernate-mapping-2/src/test/java/com/baeldung/hibernate/manytomany/HibernateManyToManyAnnotationMainIntegrationTest.java b/persistence-modules/hibernate-mapping-2/src/test/java/com/baeldung/hibernate/manytomany/HibernateManyToManyAnnotationMainIntegrationTest.java index 5255cb040f97..15ad2c50b919 100644 --- a/persistence-modules/hibernate-mapping-2/src/test/java/com/baeldung/hibernate/manytomany/HibernateManyToManyAnnotationMainIntegrationTest.java +++ b/persistence-modules/hibernate-mapping-2/src/test/java/com/baeldung/hibernate/manytomany/HibernateManyToManyAnnotationMainIntegrationTest.java @@ -17,7 +17,7 @@ import com.baeldung.manytomany.model.Employee; import com.baeldung.manytomany.model.Project; -import com.baeldung.manytomany.util.HibernateUtil; +import com.baeldung.HibernateUtil; /** * Configured in: manytomany.cfg.xml diff --git a/persistence-modules/hibernate-mapping-2/src/test/java/com/baeldung/hibernate/uuids/UUIDsHibernateGenerationIntegrationTest.java b/persistence-modules/hibernate-mapping-2/src/test/java/com/baeldung/hibernate/uuids/UUIDsHibernateGenerationIntegrationTest.java new file mode 100644 index 000000000000..7d605484ed7f --- /dev/null +++ b/persistence-modules/hibernate-mapping-2/src/test/java/com/baeldung/hibernate/uuids/UUIDsHibernateGenerationIntegrationTest.java @@ -0,0 +1,78 @@ +package com.baeldung.hibernate.uuids; + +import com.baeldung.HibernateUtil; + +import com.baeldung.uuids.Reservation; +import com.baeldung.uuids.Sale; +import com.baeldung.uuids.WebSiteUser; +import com.baeldung.uuids.Element; +import org.assertj.core.api.Assertions; +import java.io.IOException; + +import org.hibernate.SessionFactory; +import org.hibernate.Session; +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Before; +import org.junit.Test; +import java.util.UUID; +import java.time.LocalDate; + +public class UUIDsHibernateGenerationIntegrationTest { + + private SessionFactory sessionFactory; + + private Session session; + + @Before + public void setUp() throws IOException { + sessionFactory = HibernateUtil.getSessionFactory(); + session = sessionFactory.openSession(); + } + + @Test + public void whenGeneratingUUIDUsingNewJPAGenerationType_thenHibernateGeneratedUUID() throws IOException { + Reservation reservation = new Reservation(); + reservation.setStatus("created"); + reservation.setNumber("12345"); + UUID saved = (UUID) session.save(reservation); + Assertions.assertThat(saved).isNotNull(); + } + + @Test + public void whenGeneratingUUIDUsingNewJPAGenerationType_thenHibernateGeneratedUUIDOfVersion4() throws IOException { + Reservation reservation = new Reservation(); + reservation.setStatus("new"); + reservation.setNumber("012"); + UUID saved = (UUID) session.save(reservation); + Assertions.assertThat(saved).isNotNull(); + Assertions.assertThat(saved.version()).isEqualTo(4); + } + + @Test + public void whenGeneratingUUIDUsingGenericConverter_thenAlsoGetUUIDGeneratedVersion4() throws IOException { + Sale sale = new Sale(); + sale.setCompleted(true); + UUID saved = (UUID) session.save(sale); + Assertions.assertThat(saved).isNotNull(); + Assertions.assertThat(saved.version()).isEqualTo(4); + } + + @Test + public void whenGeneratingTimeBasedUUID_thenUUIDGeneratedVersion1() throws IOException { + WebSiteUser user = new WebSiteUser(); + user.setRegistrationDate(LocalDate.now()); + UUID saved = (UUID) session.save(user); + Assertions.assertThat(saved).isNotNull(); + Assertions.assertThat(saved.version()).isEqualTo(1); + } + + @Test + public void whenGeneratingUUIDAsString_thenUUIDGeneratedVersion1() throws IOException { + Element element = new Element(); + element.setName("a"); + String saved = (String) session.save(element); + Assertions.assertThat(saved).isNotEmpty(); + Assertions.assertThat(UUID.fromString(saved).version()).isEqualTo(4); + } +} \ No newline at end of file diff --git a/persistence-modules/pom.xml b/persistence-modules/pom.xml index 85cf251d184d..71158d1ac810 100644 --- a/persistence-modules/pom.xml +++ b/persistence-modules/pom.xml @@ -30,7 +30,7 @@ hibernate-mapping-2 - hibernate-exceptions + hibernate-libraries hibernate-jpa @@ -114,10 +114,10 @@ - 6.1.7.Final + 6.2.0.Final 42.5.4 2.3.4 1.16.3 - \ No newline at end of file + From 239fb85d3e81a3dda9536fecd94a5b56c364dd60 Mon Sep 17 00:00:00 2001 From: anuragkumawat Date: Thu, 20 Apr 2023 21:10:19 +0530 Subject: [PATCH 134/390] Java 19120 Code review changes (#13747) * JAVA-19120 Move article Lambda Expression vs. Anonymous Inner Class to core-java-8-2 module --------- Co-authored-by: Anastasios Ioannidis <121166333+anastasiosioannidis@users.noreply.github.com> --- core-java-modules/core-java-8-2/README.md | 1 + .../java/com/baeldung/anonymousclass/AnonymousClassExample.java | 0 .../com/baeldung/lambdaexpression/LambdaExpressionExample.java | 0 core-java-modules/core-java-lambdas/README.md | 1 - 4 files changed, 1 insertion(+), 1 deletion(-) rename core-java-modules/{core-java-lambdas => core-java-8-2}/src/main/java/com/baeldung/anonymousclass/AnonymousClassExample.java (100%) rename core-java-modules/{core-java-lambdas => core-java-8-2}/src/main/java/com/baeldung/lambdaexpression/LambdaExpressionExample.java (100%) diff --git a/core-java-modules/core-java-8-2/README.md b/core-java-modules/core-java-8-2/README.md index efba1f23ad79..c723a827b162 100644 --- a/core-java-modules/core-java-8-2/README.md +++ b/core-java-modules/core-java-8-2/README.md @@ -11,5 +11,6 @@ This module contains articles about Java 8 core features - [Convert Between Byte Array and UUID in Java](https://www.baeldung.com/java-byte-array-to-uuid) - [Create a Simple “Rock-Paper-Scissors” Game in Java](https://www.baeldung.com/java-rock-paper-scissors) - [VarArgs vs Array Input Parameters in Java](https://www.baeldung.com/varargs-vs-array) +- [Lambda Expression vs. Anonymous Inner Class](https://www.baeldung.com/java-lambdas-vs-anonymous-class) - [Java Helper vs. Utility Classes](https://www.baeldung.com/java-helper-vs-utility-classes) - [[<-- Prev]](/core-java-modules/core-java-8) diff --git a/core-java-modules/core-java-lambdas/src/main/java/com/baeldung/anonymousclass/AnonymousClassExample.java b/core-java-modules/core-java-8-2/src/main/java/com/baeldung/anonymousclass/AnonymousClassExample.java similarity index 100% rename from core-java-modules/core-java-lambdas/src/main/java/com/baeldung/anonymousclass/AnonymousClassExample.java rename to core-java-modules/core-java-8-2/src/main/java/com/baeldung/anonymousclass/AnonymousClassExample.java diff --git a/core-java-modules/core-java-lambdas/src/main/java/com/baeldung/lambdaexpression/LambdaExpressionExample.java b/core-java-modules/core-java-8-2/src/main/java/com/baeldung/lambdaexpression/LambdaExpressionExample.java similarity index 100% rename from core-java-modules/core-java-lambdas/src/main/java/com/baeldung/lambdaexpression/LambdaExpressionExample.java rename to core-java-modules/core-java-8-2/src/main/java/com/baeldung/lambdaexpression/LambdaExpressionExample.java diff --git a/core-java-modules/core-java-lambdas/README.md b/core-java-modules/core-java-lambdas/README.md index 56b2a79e7e9d..cad209767387 100644 --- a/core-java-modules/core-java-lambdas/README.md +++ b/core-java-modules/core-java-lambdas/README.md @@ -10,4 +10,3 @@ - [Serialize a Lambda in Java](https://www.baeldung.com/java-serialize-lambda) - [Convert Anonymous Class into Lambda in Java](https://www.baeldung.com/java-from-anonymous-class-to-lambda) - [When to Use Callable and Supplier in Java](https://www.baeldung.com/java-callable-vs-supplier) -- [Lambda Expression vs. Anonymous Inner Class](https://www.baeldung.com/java-lambdas-vs-anonymous-class) From a3829ca6e3758f543957caee83cce255da6ec142 Mon Sep 17 00:00:00 2001 From: anuragkumawat Date: Thu, 20 Apr 2023 21:51:19 +0530 Subject: [PATCH 135/390] JAVA-19119 Move article Java Money and the Currency API to core-java-lang-math-3 module (#13602) * JAVA-19119 Move article Java Money and the Currency API to core-java-lang-math-3 module --- core-java-modules/core-java-lang-math-3/README.md | 1 + core-java-modules/core-java-lang-math-3/pom.xml | 6 ++++++ .../src/main/java/com/baeldung/money/JavaMoney.java | 0 .../java/com/baeldung/money/JavaMoneyUnitManualTest.java | 0 core-java-modules/core-java/README.md | 1 - core-java-modules/core-java/pom.xml | 6 ------ 6 files changed, 7 insertions(+), 7 deletions(-) rename core-java-modules/{core-java => core-java-lang-math-3}/src/main/java/com/baeldung/money/JavaMoney.java (100%) rename core-java-modules/{core-java => core-java-lang-math-3}/src/test/java/com/baeldung/money/JavaMoneyUnitManualTest.java (100%) diff --git a/core-java-modules/core-java-lang-math-3/README.md b/core-java-modules/core-java-lang-math-3/README.md index 89adc231000a..847bd314a7ee 100644 --- a/core-java-modules/core-java-lang-math-3/README.md +++ b/core-java-modules/core-java-lang-math-3/README.md @@ -10,4 +10,5 @@ - [Create a BMI Calculator in Java](https://www.baeldung.com/java-body-mass-index-calculator) - [Java Program to Calculate the Standard Deviation](https://www.baeldung.com/java-calculate-standard-deviation) - [Java Program to Print Pascal’s Triangle](https://www.baeldung.com/java-pascal-triangle) +- [Java Money and the Currency API](http://www.baeldung.com/java-money-and-currency) - More articles: [[<-- Prev]](/core-java-modules/core-java-lang-math-2) diff --git a/core-java-modules/core-java-lang-math-3/pom.xml b/core-java-modules/core-java-lang-math-3/pom.xml index 9cd3673df323..7860f57735c1 100644 --- a/core-java-modules/core-java-lang-math-3/pom.xml +++ b/core-java-modules/core-java-lang-math-3/pom.xml @@ -23,11 +23,17 @@ javaluator ${javaluator.version} + + org.javamoney + moneta + ${javamoney.moneta.version} + 0.4.8 3.0.3 + 1.1 \ No newline at end of file diff --git a/core-java-modules/core-java/src/main/java/com/baeldung/money/JavaMoney.java b/core-java-modules/core-java-lang-math-3/src/main/java/com/baeldung/money/JavaMoney.java similarity index 100% rename from core-java-modules/core-java/src/main/java/com/baeldung/money/JavaMoney.java rename to core-java-modules/core-java-lang-math-3/src/main/java/com/baeldung/money/JavaMoney.java diff --git a/core-java-modules/core-java/src/test/java/com/baeldung/money/JavaMoneyUnitManualTest.java b/core-java-modules/core-java-lang-math-3/src/test/java/com/baeldung/money/JavaMoneyUnitManualTest.java similarity index 100% rename from core-java-modules/core-java/src/test/java/com/baeldung/money/JavaMoneyUnitManualTest.java rename to core-java-modules/core-java-lang-math-3/src/test/java/com/baeldung/money/JavaMoneyUnitManualTest.java diff --git a/core-java-modules/core-java/README.md b/core-java-modules/core-java/README.md index 287e510c1ecf..47435106c082 100644 --- a/core-java-modules/core-java/README.md +++ b/core-java-modules/core-java/README.md @@ -2,4 +2,3 @@ ### Relevant Articles: -- [Java Money and the Currency API](http://www.baeldung.com/java-money-and-currency) diff --git a/core-java-modules/core-java/pom.xml b/core-java-modules/core-java/pom.xml index 423487d5da40..14e9c92b58cb 100644 --- a/core-java-modules/core-java/pom.xml +++ b/core-java-modules/core-java/pom.xml @@ -48,11 +48,6 @@ ${lombok.version} provided - - org.javamoney - moneta - ${javamoney.moneta.version} - org.springframework spring-core @@ -173,7 +168,6 @@ 0.4 1.8.7 - 1.1 4.3.20.RELEASE From 835cdb3cff4ced0d72f8a4e261632759d8951aaf Mon Sep 17 00:00:00 2001 From: Kai Yuan Date: Fri, 21 Apr 2023 00:41:34 +0200 Subject: [PATCH 136/390] [BAEL-6363_nextInt-vs-nextLine] Integer.parseInt(scanner.nextLine()) vs scanner.nextInt() in Java (#13858) --- .../scanner/NextLineVsNextIntUnitTest.java | 85 +++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 core-java-modules/core-java-io-apis-2/src/test/java/com/baeldung/scanner/NextLineVsNextIntUnitTest.java diff --git a/core-java-modules/core-java-io-apis-2/src/test/java/com/baeldung/scanner/NextLineVsNextIntUnitTest.java b/core-java-modules/core-java-io-apis-2/src/test/java/com/baeldung/scanner/NextLineVsNextIntUnitTest.java new file mode 100644 index 000000000000..8fab7c62e946 --- /dev/null +++ b/core-java-modules/core-java-io-apis-2/src/test/java/com/baeldung/scanner/NextLineVsNextIntUnitTest.java @@ -0,0 +1,85 @@ +package com.baeldung.scanner; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + +import java.util.InputMismatchException; +import java.util.Scanner; + +import org.junit.jupiter.api.Test; + +public class NextLineVsNextIntUnitTest { + + @Test + void whenInputLineIsNumber_thenNextLineAndNextIntBothWork() { + String input = "42\n"; + + //nextLine() + Scanner sc1 = new Scanner(input); + int num1 = Integer.parseInt(sc1.nextLine()); + assertEquals(42, num1); + + //nextInt() + Scanner sc2 = new Scanner(input); + int num2 = sc2.nextInt(); + assertEquals(42, num2); + + } + + @Test + void whenInputIsNotValidNumber_thenNextLineAndNextIntThrowDifferentException() { + String input = "Nan\n"; + + //nextLine() -> NumberFormatException + Scanner sc1 = new Scanner(input); + assertThrows(NumberFormatException.class, () -> Integer.parseInt(sc1.nextLine())); + + //nextInt() -> InputMismatchException + Scanner sc2 = new Scanner(input); + assertThrows(InputMismatchException.class, sc2::nextInt); + } + + @Test + void whenUsingNextInt_thenTheNextTokenAfterItFailsToParseIsNotConsumed() { + String input = "42 is a magic number\n"; + + //nextInt() to read '42' + Scanner sc2 = new Scanner(input); + int num2 = sc2.nextInt(); + assertEquals(42, num2); + + // call nextInt() again on "is" + assertThrows(InputMismatchException.class, sc2::nextInt); + + String theNextToken = sc2.next(); + assertEquals("is", theNextToken); + + theNextToken = sc2.next(); + assertEquals("a", theNextToken); + } + + @Test + void whenReadingTwoInputLines_thenNextLineAndNextIntBehaveDifferently() { + + String input = new StringBuilder().append("42\n") + .append("It is a magic number.\n") + .toString(); + + //nextLine() + Scanner sc1 = new Scanner(input); + int num1 = Integer.parseInt(sc1.nextLine()); + String nextLineText1 = sc1.nextLine(); + assertEquals(42, num1); + assertEquals("It is a magic number.", nextLineText1); + + //nextInt() + Scanner sc2 = new Scanner(input); + int num2 = sc2.nextInt(); + assertEquals(42, num2); + + // nextInt() leaves the newline character (\n) behind + String nextLineText2 = sc2.nextLine(); + assertEquals("", nextLineText2); + } + +} \ No newline at end of file From 9727f5cbbbfeaa6a2b129356a727fd97eb82a810 Mon Sep 17 00:00:00 2001 From: Avin Buricha Date: Fri, 21 Apr 2023 06:49:56 +0530 Subject: [PATCH 137/390] BAEL-6258 | Article code (#13782) * BAEL-6258 | Article code * Renaming test class --- libraries-data-2/pom.xml | 6 ++ .../baeldung/swaggerparser/SwaggerParser.java | 92 +++++++++++++++++++ .../src/main/resources/sample.json | 55 +++++++++++ .../src/main/resources/sample.yml | 33 +++++++ .../swaggerparser/SwaggerParserUnitTest.java | 65 +++++++++++++ .../test/resources/invalid-openapi-sample.yml | 32 +++++++ .../test/resources/valid-openapi-sample.yml | 33 +++++++ 7 files changed, 316 insertions(+) create mode 100644 libraries-data-2/src/main/java/com/baeldung/swaggerparser/SwaggerParser.java create mode 100644 libraries-data-2/src/main/resources/sample.json create mode 100644 libraries-data-2/src/main/resources/sample.yml create mode 100644 libraries-data-2/src/test/java/com/baeldung/swaggerparser/SwaggerParserUnitTest.java create mode 100644 libraries-data-2/src/test/resources/invalid-openapi-sample.yml create mode 100644 libraries-data-2/src/test/resources/valid-openapi-sample.yml diff --git a/libraries-data-2/pom.xml b/libraries-data-2/pom.xml index f673ebd4703e..655bad2e2b04 100644 --- a/libraries-data-2/pom.xml +++ b/libraries-data-2/pom.xml @@ -134,6 +134,11 @@ ${byte-buddy.version} test + + io.swagger.parser.v3 + swagger-parser + ${swagger-parser.version} + @@ -171,6 +176,7 @@ 1.1.0 3.0.0 2.8.4 + 2.1.13 \ No newline at end of file diff --git a/libraries-data-2/src/main/java/com/baeldung/swaggerparser/SwaggerParser.java b/libraries-data-2/src/main/java/com/baeldung/swaggerparser/SwaggerParser.java new file mode 100644 index 000000000000..d1f04e680aae --- /dev/null +++ b/libraries-data-2/src/main/java/com/baeldung/swaggerparser/SwaggerParser.java @@ -0,0 +1,92 @@ +package com.baeldung.swaggerparser; + +import java.util.List; + +import io.swagger.parser.OpenAPIParser; +import io.swagger.v3.oas.models.OpenAPI; +import io.swagger.v3.oas.models.PathItem; +import io.swagger.v3.oas.models.Paths; +import io.swagger.v3.oas.models.info.Info; +import io.swagger.v3.oas.models.responses.ApiResponse; +import io.swagger.v3.oas.models.responses.ApiResponses; +import io.swagger.v3.oas.models.servers.Server; +import io.swagger.v3.parser.core.models.SwaggerParseResult; + +public class SwaggerParser { + + private static String OPENAPI_SPECIFICATION_STRING = "{\"openapi\":\"3.0.0\",\"info\":{\"title\":\"User APIs\",\"version\":\"1.0\"},\"servers\":[{\"url\":\"https://jsonplaceholder.typicode.com\",\"description\":\"Json Place Holder Service\"}],\"paths\":{\"/users/{id}\":{\"parameters\":[{\"schema\":{\"type\":\"integer\"},\"name\":\"id\",\"in\":\"path\",\"required\":true}],\"get\":{\"summary\":\"Fetch user by ID\",\"tags\":[\"User\"],\"responses\":{\"200\":{\"description\":\"OK\",\"content\":{\"application/json\":{\"schema\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"integer\"},\"name\":{\"type\":\"string\"}}}}}}},\"operationId\":\"get-users-user_id\",\"description\":\"Retrieve a specific user by ID\"}}}}"; + + public static void main(String[] args) { + parseYAMLFile(); + parseJSONFile(); + parseString(); + } + + private static void parseString() { + SwaggerParseResult result = new OpenAPIParser().readContents(OPENAPI_SPECIFICATION_STRING, null, null); + + OpenAPI openAPI = result.getOpenAPI(); + + if (openAPI != null) { + printData(openAPI); + } + } + + private static void parseJSONFile() { + SwaggerParseResult result = new OpenAPIParser().readLocation("sample.yml", null, null); + + OpenAPI openAPI = result.getOpenAPI(); + + if (openAPI != null) { + printData(openAPI); + } + } + + private static void parseYAMLFile() { + SwaggerParseResult result = new OpenAPIParser().readLocation("sample.json", null, null); + + OpenAPI openAPI = result.getOpenAPI(); + + if (openAPI != null) { + printData(openAPI); + } + } + + private static void printData(OpenAPI openAPI) { + System.out.println(openAPI.getSpecVersion()); + + Info info = openAPI.getInfo(); + System.out.println(info.getTitle()); + System.out.println(info.getVersion()); + + List servers = openAPI.getServers(); + for (Server server : servers) { + System.out.println(server.getUrl()); + System.out.println(server.getDescription()); + } + + Paths paths = openAPI.getPaths(); + paths.entrySet() + .forEach(pathEntry -> { + System.out.println(pathEntry.getKey()); + + PathItem path = pathEntry.getValue(); + System.out.println(path.getGet() + .getSummary()); + System.out.println(path.getGet() + .getDescription()); + System.out.println(path.getGet() + .getOperationId()); + + ApiResponses responses = path.getGet() + .getResponses(); + responses.entrySet() + .forEach(responseEntry -> { + System.out.println(responseEntry.getKey()); + + ApiResponse response = responseEntry.getValue(); + System.out.println(response.getDescription()); + }); + }); + } +} diff --git a/libraries-data-2/src/main/resources/sample.json b/libraries-data-2/src/main/resources/sample.json new file mode 100644 index 000000000000..8b59bbb42a12 --- /dev/null +++ b/libraries-data-2/src/main/resources/sample.json @@ -0,0 +1,55 @@ +{ + "openapi": "3.0.0", + "info": { + "title": "User APIs", + "version": "1.0" + }, + "servers": [ + { + "url": "https://jsonplaceholder.typicode.com", + "description": "Json Place Holder Service" + } + ], + "paths": { + "/users/{id}": { + "parameters": [ + { + "schema": { + "type": "integer" + }, + "name": "id", + "in": "path", + "required": true + } + ], + "get": { + "summary": "Fetch user by ID", + "tags": [ + "User" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + } + } + } + } + } + } + }, + "operationId": "get-users-user_id", + "description": "Retrieve a specific user by ID" + } + } + } +} \ No newline at end of file diff --git a/libraries-data-2/src/main/resources/sample.yml b/libraries-data-2/src/main/resources/sample.yml new file mode 100644 index 000000000000..ddfa06439398 --- /dev/null +++ b/libraries-data-2/src/main/resources/sample.yml @@ -0,0 +1,33 @@ +openapi: 3.0.0 +info: + title: User APIs + version: '1.0' +servers: + - url: https://jsonplaceholder.typicode.com + description: Json Place Holder Service +paths: + /users/{id}: + parameters: + - schema: + type: integer + name: id + in: path + required: true + get: + summary: Fetch user by ID + tags: + - User + responses: + '200': + description: OK + content: + application/json: + schema: + type: object + properties: + id: + type: integer + name: + type: string + operationId: get-users-user_id + description: Retrieve a specific user by ID \ No newline at end of file diff --git a/libraries-data-2/src/test/java/com/baeldung/swaggerparser/SwaggerParserUnitTest.java b/libraries-data-2/src/test/java/com/baeldung/swaggerparser/SwaggerParserUnitTest.java new file mode 100644 index 000000000000..615bd917cba6 --- /dev/null +++ b/libraries-data-2/src/test/java/com/baeldung/swaggerparser/SwaggerParserUnitTest.java @@ -0,0 +1,65 @@ +package com.baeldung.swaggerparser; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.util.List; + +import org.junit.jupiter.api.Test; + +import io.swagger.parser.OpenAPIParser; +import io.swagger.v3.oas.models.OpenAPI; +import io.swagger.v3.parser.core.models.SwaggerParseResult; + +public class SwaggerParserUnitTest { + + private static String OPENAPI_SPECIFICATION_STRING = "{\"openapi\":\"3.0.0\",\"info\":{\"title\":\"User APIs\",\"version\":\"1.0\"},\"servers\":[{\"url\":\"https://jsonplaceholder.typicode.com\",\"description\":\"Json Place Holder Service\"}],\"paths\":{\"/users/{id}\":{\"parameters\":[{\"schema\":{\"type\":\"integer\"},\"name\":\"id\",\"in\":\"path\",\"required\":true}],\"get\":{\"summary\":\"Fetch user by ID\",\"tags\":[\"User\"],\"responses\":{\"200\":{\"description\":\"OK\",\"content\":{\"application/json\":{\"schema\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"integer\"},\"name\":{\"type\":\"string\"}}}}}}},\"operationId\":\"get-users-user_id\",\"description\":\"Retrieve a specific user by ID\"}}}}"; + + @Test + public void givenAValidOpenAPIYAMLFile_whenParsing_thenCheckIfParsed() { + SwaggerParseResult result = new OpenAPIParser().readLocation("valid-openapi-sample.yml", null, null); + + OpenAPI openAPI = result.getOpenAPI(); + + assertNotNull(openAPI); + } + + @Test + public void givenAValidOpenAPIYAMLFile_whenParsing_thenCheckIfNotErrors() { + SwaggerParseResult result = new OpenAPIParser().readLocation("valid-openapi-sample.yml", null, null); + + List messages = result.getMessages(); + + assertTrue(messages.isEmpty()); + } + + @Test + public void givenAnInvalidOpenAPIYAMLFile_whenParsing_thenCheckIfErrors() { + SwaggerParseResult result = new OpenAPIParser().readLocation("invalid-openapi-sample.yml", null, null); + + List messages = result.getMessages(); + + assertFalse(messages.isEmpty()); + } + + @Test + public void givenAValidOpenAPISpecificationString_whenParsing_thenCheckIfParsed() { + SwaggerParseResult result = new OpenAPIParser().readContents(OPENAPI_SPECIFICATION_STRING, null, null); + + OpenAPI openAPI = result.getOpenAPI(); + + assertNotNull(openAPI); + } + + @Test + public void givenAValidOpenAPISpecificationString_whenParsing_thenCheckIfNotErrors() { + SwaggerParseResult result = new OpenAPIParser().readLocation(OPENAPI_SPECIFICATION_STRING, null, null); + + List messages = result.getMessages(); + + assertNull(messages); + } + +} diff --git a/libraries-data-2/src/test/resources/invalid-openapi-sample.yml b/libraries-data-2/src/test/resources/invalid-openapi-sample.yml new file mode 100644 index 000000000000..eaac64c9a99a --- /dev/null +++ b/libraries-data-2/src/test/resources/invalid-openapi-sample.yml @@ -0,0 +1,32 @@ +openapi: 3.0.0 +info: + title: User APIs + version: '1.0' +servers: + - description: Json Place Holder Service +paths: + /users/{id}: + parameters: + - schema: + type: integer + name: id + in: path + required: true + get: + summary: Fetch user by ID + tags: + - User + responses: + '200': + description: OK + content: + application/json: + schema: + type: object + properties: + id: + type: integer + name: + type: string + operationId: get-users-user_id + description: Retrieve a specific user by ID \ No newline at end of file diff --git a/libraries-data-2/src/test/resources/valid-openapi-sample.yml b/libraries-data-2/src/test/resources/valid-openapi-sample.yml new file mode 100644 index 000000000000..ddfa06439398 --- /dev/null +++ b/libraries-data-2/src/test/resources/valid-openapi-sample.yml @@ -0,0 +1,33 @@ +openapi: 3.0.0 +info: + title: User APIs + version: '1.0' +servers: + - url: https://jsonplaceholder.typicode.com + description: Json Place Holder Service +paths: + /users/{id}: + parameters: + - schema: + type: integer + name: id + in: path + required: true + get: + summary: Fetch user by ID + tags: + - User + responses: + '200': + description: OK + content: + application/json: + schema: + type: object + properties: + id: + type: integer + name: + type: string + operationId: get-users-user_id + description: Retrieve a specific user by ID \ No newline at end of file From 2d3ef28c61d49c77622c4f072fae3ca49fa96f93 Mon Sep 17 00:00:00 2001 From: panos-kakos <102670093+panos-kakos@users.noreply.github.com> Date: Fri, 21 Apr 2023 12:09:19 +0300 Subject: [PATCH 138/390] [JAVA-18138] Moved java-jdi to jdk9-and-above profile (#13846) * [JAVA-18138] Moved java-jdi to jdk9-and-above profile --- java-jdi/pom.xml | 25 +++++++++++++++++-------- pom.xml | 8 ++------ 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/java-jdi/pom.xml b/java-jdi/pom.xml index b4c11c1bfec4..dded13896f77 100644 --- a/java-jdi/pom.xml +++ b/java-jdi/pom.xml @@ -15,13 +15,7 @@ - - com.sun - tools - ${tools.version} - system - ${java.home}/../lib/tools.jar - + @@ -32,10 +26,25 @@ true + + + org.apache.maven.plugins + maven-compiler-plugin + + ${maven.compiler.source.version} + ${maven.compiler.target.version} + + --add-exports=jdk.jdi/com.sun.jdi=ALL-UNNAMED + + + + + - 1.8 + 17 + 17 \ No newline at end of file diff --git a/pom.xml b/pom.xml index 428aa1d268a2..0b5b73ddfda2 100644 --- a/pom.xml +++ b/pom.xml @@ -354,8 +354,6 @@ - java-jdi - jetbrains language-interop @@ -547,8 +545,6 @@ - java-jdi - language-interop @@ -868,7 +864,7 @@ hystrix jackson-simple java-blockchain - + java-jdi java-rmi java-spi javax-sound @@ -1123,7 +1119,7 @@ hystrix jackson-simple java-blockchain - + java-jdi java-rmi java-spi javax-sound From 1d70ffc16fac29f007aec0898f91096fdfdcf912 Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Fri, 21 Apr 2023 18:40:15 +0300 Subject: [PATCH 139/390] Update README.md --- core-java-modules/core-java-nio-2/README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/core-java-modules/core-java-nio-2/README.md b/core-java-modules/core-java-nio-2/README.md index 308356cf8bfa..527600779a44 100644 --- a/core-java-modules/core-java-nio-2/README.md +++ b/core-java-modules/core-java-nio-2/README.md @@ -14,5 +14,4 @@ This module contains articles about core Java non-blocking input and output (IO) - [What Is the Difference Between NIO and NIO.2?](https://www.baeldung.com/java-nio-vs-nio-2) - [Guide to ByteBuffer](https://www.baeldung.com/java-bytebuffer) - [Find Files that Match Wildcard Strings in Java](https://www.baeldung.com/java-files-match-wildcard-strings) -- [Get the Desktop Path in Java](https://www.baeldung.com/java-desktop-path) - [[<-- Prev]](/core-java-modules/core-java-nio) From a72398aa2ecb6e9b60805459be59191b04bce812 Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Fri, 21 Apr 2023 18:40:28 +0300 Subject: [PATCH 140/390] Update README.md --- core-java-modules/core-java-io-apis-2/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/core-java-modules/core-java-io-apis-2/README.md b/core-java-modules/core-java-io-apis-2/README.md index f3d72fe8b5f8..bbaf7d9584da 100644 --- a/core-java-modules/core-java-io-apis-2/README.md +++ b/core-java-modules/core-java-io-apis-2/README.md @@ -5,3 +5,5 @@ This module contains articles about core Java input/output(IO) APIs. ### Relevant Articles: - [Constructing a Relative Path From Two Absolute Paths in Java](https://www.baeldung.com/java-relative-path-absolute) - [Java Scanner Taking a Character Input](https://www.baeldung.com/java-scanner-character-input) +- [Get the Desktop Path in Java](https://www.baeldung.com/java-desktop-path) + From 102cd1f0d39165c6aebcf44e1b61ae9f071ca6a0 Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Fri, 21 Apr 2023 18:48:42 +0300 Subject: [PATCH 141/390] Update README.md --- core-java-modules/core-java-streams-4/README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/core-java-modules/core-java-streams-4/README.md b/core-java-modules/core-java-streams-4/README.md index 4175fb1f700e..c6717ec5feee 100644 --- a/core-java-modules/core-java-streams-4/README.md +++ b/core-java-modules/core-java-streams-4/README.md @@ -10,4 +10,3 @@ - [Understanding the Difference Between Stream.of() and IntStream.range()](https://www.baeldung.com/java-stream-of-and-intstream-range) - [Check if Object Is an Array in Java](https://www.baeldung.com/java-check-if-object-is-an-array) - [Mapping an Array of Integers to Strings Using Java Streams](https://www.baeldung.com/java-stream-integer-array-to-strings) -- [Difference Between parallelStream() and stream().parallel() in Java](https://www.baeldung.com/java-parallelstream-vs-stream-parallel) From 3356fc212e5651c9af797f8986eb4e5738d45bda Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Fri, 21 Apr 2023 18:48:58 +0300 Subject: [PATCH 142/390] Create README.md --- core-java-modules/core-java-streams-5/README.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 core-java-modules/core-java-streams-5/README.md diff --git a/core-java-modules/core-java-streams-5/README.md b/core-java-modules/core-java-streams-5/README.md new file mode 100644 index 000000000000..4f367799f2dd --- /dev/null +++ b/core-java-modules/core-java-streams-5/README.md @@ -0,0 +1 @@ +- [Difference Between parallelStream() and stream().parallel() in Java](https://www.baeldung.com/java-parallelstream-vs-stream-parallel) From 5d02c60bc8df43c5d704dbb9b7d6d40f27148d9b Mon Sep 17 00:00:00 2001 From: Michael Olayemi Date: Sat, 22 Apr 2023 06:32:53 +0100 Subject: [PATCH 143/390] BAEL-5766 Overview of NLP Libraries in Java (#13798) * BAEL-5766 Overview of NLP Libraries in Java * BAEL-5766 Overview of NLP Libraries in Java * Overview of NLP Libraries in Java * Overview of NLP Libraries in Java --- libraries-ai/README.md | 1 + libraries-ai/langdetect-183.bin | Bin 0 -> 10568188 bytes libraries-ai/pom.xml | 33 ++++++++++++++ .../nlp/CoreNLPTokenizerUnitTest.java | 41 ++++++++++++++++++ .../baeldung/nlp/OpenNLPLanguageDetector.java | 33 ++++++++++++++ pom.xml | 1 + 6 files changed, 109 insertions(+) create mode 100644 libraries-ai/README.md create mode 100644 libraries-ai/langdetect-183.bin create mode 100644 libraries-ai/pom.xml create mode 100644 libraries-ai/src/test/java/com/baeldung/nlp/CoreNLPTokenizerUnitTest.java create mode 100644 libraries-ai/src/test/java/com/baeldung/nlp/OpenNLPLanguageDetector.java diff --git a/libraries-ai/README.md b/libraries-ai/README.md new file mode 100644 index 000000000000..8b137891791f --- /dev/null +++ b/libraries-ai/README.md @@ -0,0 +1 @@ + diff --git a/libraries-ai/langdetect-183.bin b/libraries-ai/langdetect-183.bin new file mode 100644 index 0000000000000000000000000000000000000000..0b4ea89690e6fb57874f2767948d5bbef581dbba GIT binary patch literal 10568188 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 z z#J-kNS&_+4xAvB^$BwIEbrwIzVbm+!J^;W)lAPNj(;NXpF{BUp5mES(z&geN5! z5zsWY##&5xu}wTPdcUiyP&iiu(2k}?E&V`}+q*-T9i%=xz(JYA>&5nCr21hUp%kKI z9zvChRbE0dZ>>8Deek|Re)KujS{lq*Zy#ZC+qU=-I%<=RoVpBf4m*^=39vTACXeD* zLA4-O+`1HfExA5d`Wn%8^DN$YBbK};rmA&=BzD!R+?oM8{iGHp5r>BC7U7%5lJ8Vi zXo1lP`}B%T1*z%BtADk29H~wliLMcL>mJ3ZhB|<#%|HZL$o-KH+@eMiDX>jm!;fOg zH=qDA9G*=ceeXjbiV_EGaw?U5YC&S0M;cKjgO!S_W5U`E`sT4 zDUZR`X7?SIk~SpUn52C?mbPdp6)VY_5s3n3mp3RWqd|?B03yFNafl2ETJU0y5H7xv zPfvY&e;`w771W5VL92YlH{k{@OMLvtI^z)jB(G;T`>)yeP#Y;*$lio?f*~1lSz<>2 z0;~;OnAj}0hODQ6Qn12dMl~~uOt1$;YRrRM`a?)p%-aQ}ryIbwXMWj<(6dV){p%LI|@{1iP@k z!BSEx%Fde8HIB0xjL|44I!q`_(*Rs#0VztXDYO*`z|$Yf6MG9MA+Q_lz$R|Mj*&6Jdq=%%8q2R<8j*(+GluWQiAP);M?Yc5TEDKtIJYZ zoI6-j=i*}aeMH<%*dSn;25AlwY=FNLeS{ojfMeKXA^#ir*di>3u_!TE!c`t=4?VKE zkw}?rNQ429M=6z+KUMdrm(EMHC>Igx&I?AUC=n-)RTfT)K?L~yZvcyeI+(%r8Bt(! z`PKx#?2uLaTH9~hfAHUuAKc>~T#>6yfAH$1=5F+lU232C`Vl9k9eSu6=-g@>7P8p-^^U5WEAUpFyOBm- zcaT#lhORgo2FLD3f=qrbM!|_$7`6OZMuyv@k>|eSLB;-BlIXVm5KJLXq=i4 zZWWV5?Z7jW!*M@WU6}??N9(asHSapG_+^22Gtt`WqexIwM6W4X$ws8ggcj{*+KwMY zibCe3ectX73FhPF0aS9BkqyXo`2H%It2e_BwoRep6O>h{mpzbnn`gC~Cvs+n>y5mc zRgAim`p`OHRaO%|JwL}N8N*8eKw%3cR&6s<09ZFjDQ`>w@~ za6@v)6tiyC+5$7n$n zxwYJU>=k}EmaE7Lyv_@@D^My|nu{RlV+Cxj)IAFqaYbYH*JWax{UorPR%p!b4k2*fxbDaa`i`n4R5i=RFnlEi=Zz}Zp z4*K>GCH}wMy=l;OS#=(EyHd{JOr^L|N%==YRVuEiN>#qYx#!#yJ96Y8OR*fy0|)^T z2#|zi1O_1{Ato_{7!9JK8JnqrrV-85%_JI{SRnc0{+@VO@b2W{I6!c6J+v_#FeR8~p4g+nA@mKF zUv*?m<^mH48YppRgL9l#Gp(aonj<7VVbbtpWzi0Jke}F$vBAw4d#O?gLdfi15LZ06 z2Hu>7@rH{gU}ynS;+@ZQQ@HTg6iqy@ZtY7-4*61^zM6s%;<4~9S-mY$tlo3fiwU?^6Geu>z!-g-CbhJJtNq<&)IuUi`apt@XAh|NPTfNZVX!ouZB+q;SFf{KWR2V=7sAyPl>fC*CWV?B~e^#XJZY_hv+z)+0EvePEfH*?0>oDNc1umRRK#?hLn7zF zKn5))BhlCnIF5E(X>t%r4tJce6h{G`$^@$q#M#EA+XPM1E3kCpf|-56GGU9B9!d9}v~PCIj>-gekC4PY(BenxwMF#k z@nIKY4~=Gp6NHD1$kUk^&`iJ%WtdwXsO>J-jiBGX&aU@Sq@CcV{sfXM2r_v*@ohw> zX#>_{h+v`Q;$Qmte)ap{C&~2HQbd>&Ks@Q+gS)Mh7#ev!ba=f!xgEM1@Q0D5tauty z1DB>u_jO!c17xNN3T?GmKv~m_q(CdPrk(+B$PXv#S0$N+d}Np3zhu2Bopy2vMU>>Y z`d$7lv7k06NI0z z6J96sl*9QcjL>y;CnA&nqUYBDdR>QjU3TC>0$$zm8&8zJF-2~`r<-h-SVBCdWF{X| zs~L)(dph;my02HSOae7f*MbvK%>xCSB8YM6m1nS)8P zUxbnoLg528KIHk@#A4?bu#26t7PyfkbC#q}WbP0cDjaYjhd41i5ZCRQVa0%|OpPTc zYgl}6be$l_Lmy+_Kr=z!-+|e%XRz-H^lhT&qF2J{)20nZQ%XQnXz-9EnbwELIRzmN zj~H17fuvy}(}jb!$3&939p$G|qfU{)2O@&wRcCzww;c3J|Wy|9iO> zVcFsG&GWb8EXA`eKqG2FTZ5TT=*8TIr5;cNGrn~1VYm(d?z?0WJkHcYujV=4%UNs< zVq5X~0*sug`ST0VzRF*k{}R~q)vowkb2P3Bq-ve!3v?9|A>1O%un0+sF;B){l&&L$ z`>O@lplSgOeipL#b2eUYGx=9bDL&@{6#K9}JPHmozrEsnmQdFf5!AXnXH6+t0rP)( z<|U~J0-Sl2#bYCUCBAc67GyqV)JZTRzy7m)pGAUzMfTq_9YN53Rv75-gFkm>z%xGA zWC)$V0E;+5i$^{9z7rzJrIhw->O0H&s~Ext1Vw$YGuwr1h{rw z?Goq6rYZzEYjVjyazrFzYb5+`H)v-aR$#lN#z5a0&m%VKAK&dNOAQvHY-EnZc#7gbyZ!zeF3^&WD9{~Hs6=N zOH}qJ&$KX1PmF&0d^*mbtt=|&*vI9J(%E4{TFdadl=5ZiBoAz;mKFbkZ)rot!ff_y z>vmbB#(v>W_ScqL2dAs$?|5~hrnG~O^i9LPmeTXP@*RTvYNdvo^_?>g)Pt9?OI6Ce zwizle)|}}q;?$CS;H&zH1@(2-syuhIA-PE(-1aR4{a5->=dMXM_{LSO@|CgOWk(**M)1Mo>$AA-9-M>xMZU%s*ykdZo)0M({itl7U3s^2WMw$yvdX(~ zVolLW{_D%7>msS-`b!M$mMbv0fP~{Yns$w;HC!FoF;Yn2PGo^&y!c0RfzNqW!L6EdU}JE$8o#*&{;Jz zw#`P3X<1L#WBAbqor>*oT5`-DZRZ)%=^e@Z2B%sMa{R25$T20p5M*kcwl^X@csbQR zvyQY>zQ^NU0}^=Pq`a!ABAM(%Cet-EVfI)FI5(9r);FXX$*?VV4$j-Mqd8Wd$h~}5 zRF`8WQ(xLE12oeyFRKk6x>3|3z% zM5^N6@f~!5IPM&9nl`?QMJ{|Hlb2N9k)YFZid{Ie8q5^T+0=!YjJuJ~>n4b94=Os?d&->@Bux z+5@9S|9)>#3uj<-)>Lg?z0p>w=mQhWGKc9$4E}o|G>#|j)rRbvVf2tuK@Ex>h&)Ti zL-~9;p29`$CV8g_o&aq+dzJRo7F)BFv#N^t3$9CLhNh6QzAxh;r5o`t!gyov>rGWI{v0Ih;@0e%kYv+JGf( z^JMb&QgW3!dRNr}?Hq@}=hcE4qW*C$vx+<5lU4M0`DjV0pxIE~HV+uJf%v;>YG7@& zt~!Y{Yj0?IR&sa$c&DW9PWKkk$^1iyis~*l5P93QP28-wnz7zjRKh5(pQ-KJxLZnc zG-`8Wtu}t>ej9eht`?IqL5$~()wxs}v<-FFT{$f?Y1uOOL1r6?qq&J*o$1GW3MpC@ z#V(-~>n8&k6RgLIFBg@vAET;r5IbLJAUY>cBn`vpn!kexTg&}f)&IROxw?=-Z^x|E zPWALC;Gp=T@ZL#(NyihO*EZ(}4<(Jy4X8mnNjrRiHU+jnHD6NI@fZCVAp5%w+3m6M z&P0h#rs^c~6YVbD2Ko*fsz4>Gi2FO`+3=7%)rAIED%uFIo|xj{Pel*>M^DwgGtxSL z38kCMz1`5oOFN1|g`yddJ<0MesPCi)DMelx9&mZ;z*=se?!wb$UC0(}WXndZ@+5P|eBV9r zdZBx=jbNyR#*U_J^*li?=RM|dI_#T8!*JwO7hxcU?oalsJ>BJjO||E74hcXAsF zJK_yRsJ+|D6w9VtRw;0_+s7mRHkU3Xz^Q-yTUNnDEvRv~$5uKpvvXlb9Ac^!;X_C# z26L+yP|106@g(*v9%>e03wIz|L&>1OQxK9Lb(2`y0`3;se~NHd*T@-?;&7$R40ALy z;nX*U5cm?r{ds>uud_BSD;R&d=Bm|=kwJRBrA`}Jjk8&y_|7HyWy!Cjl7n(_Ir|r7 zR4!WxFs51=%L z0;yw0KCEi7NH$5klWj#}o2ETKWFK2hsl_QSs~TNt#ZlR;Mc|U2o7T)ErdPSPtEbvZ zWsP{6CHdw-{&2>4agOJ;;5EUHT$Jijs#NKTBBzC{YFyHzNIg#fN;emw(YA2YuNEXB zuu5QF^5VcE*&gI@w#<5V(kV46uxn`^3hez7y9{QIWw$fZ&NdPcqSsp}c#EK~U3;=i zAA44W3i*a&yM*=xq!#jIBylI=m9hc{B_|sImjkG~lKtp`#8BLHs)Bqh>_vE(c%)V@ z6{Iur#z{c2Ha14f;PD&qVjhJR-J*OF?yrfOlf%0St(r451K8-3R6+(j+{6JeT=bY0 z;IO(a{dW9n_+#+wW7`b-eT!&_ggnKC zpL~D^7M;R3LyLeUPHG4oz_qI<2?FoUh?<{c^1=my!y)c;PMa+*59Al+p;ROhBg2Ue z(|)FhBw?%vyjEnP(jCv4!)pW?U_nB3%XB1*0R1RJ4%TH-mAGPWM$-By4QN6~p%E|V zM@C#$agL=zhww$3{GQx+0c8NAP6Le=Bq!-7j3ywiAQaPv1hD`L-V(Zs@cnT;^v|PG z@odEoKSMiqLKT=SjnuU;fioPT+!65+v55337Zau<^%TX-U4A%1`UJj|;23e>{I@E=Zy_p!Fa#Yl*@$O7pXdV*XYX8y)N% zN8(Sm*eo(M!2Mc5y>l^@)J_Jiouxz*6i-t0UQ%Ek(=)eSJsFF% zjh$B;AVw{2ImIwL;HZ!~=`KpL;gBetl6(Q` zo9^T3Pr=;w^rc;}s@v7=KRepU)R`7i0Bs!T>cu%D-W>6{<%2 z_>EJx?&!PzJo~}meQmMdwF80Y9^1wPjoqT9S^XUN?U-1A-Y^fIrihGvj^RtKxhj;<)&V~E%Gr_ARzCWF--BPu_s%nEWsl(Ci z`Zw+RRo~On_~N(F1qS#i+d88kK2RJnaU zblGC%Yt4DZXOFq& z873V}bpZ|WybaQrd)ZfGeN)O2J6nkpGC28&|8w5^h%yoU}K?ySH# zC+$!}a=@ZpTteA~@|2Us+r&qe>lO`+I6MhlMGo5LiOVQR#cw8Yt(e^saU2dj}CQ2ALmOV z7u}rtXX7kZ^&FE2?cplci>N~t=Ib>R+TXyBEnK}nI+udyD2%$gkCt#^v=;U`skAl- zjf{J4(s3!aoT9ayhjLy_$2L=0thB9t&;%YZwbf=8M>e-%`5N%E^TQ-hKYgu^MQ}+6 zXl&#J={uTrsopYY@{pUjNLu zs~XJYF(?MxB z9P(I0wrFp)6;#c%_(`&G@ zl%}wD_QY0ayNI(0QIY@_x~`~;KqebT&lGQsfy~$D?zv)>PZeao0LYrZOtV!gP^@?z z&eq$ib!)2;dQ`H36wHN++w;0c6_%3UAgVGG-n_8hR{m=^SI${N&8&^|*0U7SA_W*S zNY0s$ttH!#-B*^ssMV;5*lEB|yBfu>EK8me$nc_zFMS^u-^hov`yssUiF?j`A3QT! z_wH;(?{i4P>40bpK#Fepzjo!pH!RZ8Q2MjhzDUR&Pk#_6eRKlL&S&R#Tji%j;Do! zjOaTQQkZ$vprC~8z8R*|Cs-rs7n!Dr4IVUZ& zntct@lI+l%1eHqM0YVl=dF=Q+IN_;qbVn$e%hy}NOSY`KaitAExHS*{5jl8OEz$n#z15en+(4qNx80a=_S1+_wB>LgV zC!aNLyABKkX0Sw=4GY0Wy`?NAH&C9U#3()We5NulNW+8VND4o}PykL1n-&_vEE80o*jO^U}Y)|`_!o3LSUFC2ujo7!%E!?Nro3_I(Q7c55dQ@ zBW4X^ru1PlhwmPXebf2D+oBJqGmPh!h0$oogdk|7Nd^J>p1HoaU41kE^yL{*Rjeb= zK`P<1@@MDQb!J;+!vr!bXZWoJ6!w=nENuf*YVpzrT z=+F?H-mklqY}as3kDhaaoDW`bi$hVxx#wOB&FwqKIM@hDn^#uA=>983r85vcHv(V{ z_JEo;Fg9dsdFJQE`GG6hR)dN+f7ht!;UckGnm^T~$$U6Tr=tS>BY_G9owi+?L(@^@ z=y2XIs>xT{HSuD}n>og`i{Tb8#aW76>>O;a7{ZT^5; z?nRnW+fZ3_f48OHHEAOcUtMApz-1@+sadvH*hb*5kn4{errtB>RSr=xmsztBq zZ1>*7W1)MD_`EsuU{`Vp*hjbw*S6?WG5jl;DvgWEIZQC`zzq(GwRf<%@EWZTAD-Jd zGVcw#^zf#_6tfd??HpE#U+yAVunaU=l1)J?`g@4XYBQ*^VvpL&ioxQFu1qRs5zB)h zG2yi`2`P`jJCcs@4$lb<<%X zQLaKUay(=Y!eT?TA4kaTkY!5ohR|>EqdUu#Ge-%wO^6UOzoL>$k(*Sp z(o{`qEyh^LrGKodZldHJK`B{d(;V%j zhk*LH$Ah=^^h#C>8>gBLxKK4kW8X@%$?ULbO z0ATz?=HRwmYSpxvo%zhBD^!s}z0R#tNf`lRWV8(TW=9*`1Kz6rsglg+1AjL&1$$@v zeq@$zlo+KM1?;4-(Xz-?t5+#niMjDPg*AVecsU7!3d=Shf-~=q2`37if&rnY}@mT(OguUm;pZ+bK6Lj#4g+R{q(F=!Cta zkDZ$Qu!eM0FIh|ud|gX!9O3VZQXW_KA-Z@RI25oSfUaXQk-gL^8dmL4Agde4T$qHU zH=6etSR47PH%Or1AWpixr#nk0Ev#9R{i&ur(C;HJi0Jf5R(f(-dzyvF*>CJL9Hn}W zB$dbeF5ZBUHlHOS5KGhxL(f$@)*-hNWq|3 z*wHu|nL+_j-MNp?#*#B($k|xjE@9&c#0rSAyMujT&5$5Li_4}603u6HkJ z@sr@^dO&pyx!4j}MK`TJVOXQCBk)%z;Rv-vj~rBTmyWyJ(-c!C>KcG!0#h1^+O;ix ziEl^{pzLRX{&nkn}EcBwJE+o4k}b;id}+a^*1bn%WmPb43S}gagtYXcDM&! zglrhIN`b$B6z(~;a7Jc>+(JI3%Wx8HdM^l|eI}QWJ8AIk-LOk0!hiVsaTaC8eU1D2 z^u4qxSi0@A`pXYqX4v^!$;9GQ@J>lz3!6c0mGUs9s#u9jwtfK&b=Q5Ay$TfCdZ6x!ag zRuZ##EAGw3gv+f#x|4K0E7$DfsqMkOr|*Z?_5S3m24Q>naL5;IFjy*lj~~H=@EWk< zp=f?P<=g395(4Nkst7sPPKaI9qcE`LMFV`fR@z|&tO0m%|QS*_oRdA)A3WfFe z=!@+jiD6P}V}-Bbs2YrM#P7?3{Rg$p2X;F;C%gqND$$_1y0BDf;Soe2kzQUQ3d*Sm z&J-avpB#^#n9m(o_tnH00W+xPu7eQ`M*(<_V;31WsXw^IVb&JB0%TU0k@g1j>12u; zk)I}Q%b+1*e@GLp%g3UN58v_C+X~Z;}CP@Tadw$2oP33CP{-piih}lmajT~?*OVD$KS;fCc&X=n}Dq` z%1Uz#K8YB3kTc+PZaA%XfntHnGKr$us}oQ$vj)RT1oVP-(MA8?_-B;vx~WrZ&pfI= zcY@a9Vhf4$t=x>n8VkU4fMyg??ca-Q5+6x;{Bg9vW2K%h{pI3$Dv&xpI_pV+L=JlSB3fsh#@9_mi; zO^?#z1A*Y)c(fI+!h!Bzn98A3l?FC+YXfiq8wPOX@gbS_NFMLhDvU)d1iLJsaa5O& ztBP%ar#0V@*b&OL6I={yx{j8c=9e2cr3=W+d?rbo3O7E3d56W3ndDfGEPjBqv3@Fw z5)L7?*z6qU)ZGYL&-)mSg%aVPgdZK!G_(2K`khqKX(QA0j|Mksk)~6B#ecrMvc=AE zF){9+hHeaj@eCBUTF$Qc58Ic6ti>G8UVAwfT#KFN>iy+1>(It6U2I17%mdQ;?k$F= z&&=0);Q{R_YvG(N!AqcQ>ee#aElv;N=lW#L{Xoah&(iU1+gCjuM5W*JZsPL9JjJ$c zPn@YuKSi7PZI_Oo2Wci@WswG&?C=rQUS`O35V?#~cNlQx!i8 z@2^m#_5>CYK$>T6luZiNhcA27@#25Qw{HGO8JmYkeCu%DXH{0RY1E>c>f`RH-=8^) zGo!!wtz1hLUYy+_Dt5P*(mGMEPb{ui^()^t+oTjz7^wh9Fd+xX4Kp)qPpFZtV(q8f z)d%P3=zqjB=gU#AQd?66y`dsFm+<;B0Lpixx_GfImu7D}NC&IFipel{)_@vN@9 zMrmmCUR$oaqK?7FVC&)>vR<2oE|n6ZI`3Inoy)1q&9W}7l>*d^D7tbE=tBYZx20}? zerH6ZyX=!vRdjS%f>?OJf~qrz>fo{znE3>4ceoLD^jkBRK!_~QU63r2zUkVsZ1IA% zS4~f2K9ZJw({ih9oEdnP-`=PiL6-9^tg@V`P)<5miRY?p&!1a5l=7o4hNML*j-D#A z?_jR}M%H+djIamsQ_KsWr*5NUiqD-Ut|FW9JpB4xO>i?`>r&Hh>LYMmPrExI=75j= zpvZhMD{B`PL2fF;N8T_}h>uzB-d1gXsnnw#_xsn(^|yv_{(-HO09e*C8QP=m(Sq9u zF~Oa93z$dgj3meU{Je)>+D>9?a}M$*JiV+=+ype)DhZ!@*NA%3?_*0;>NNj*l8txN0a$`fwFlkhJEIrr8xh#va`?#)~0e29v=*Vt`n67+3U zFuV5Rf1ew8!^L5gd@>fz5d0}pp&8HRbg(?dl?IGnMUwCxE&4XIy?YWo8kK^@nDcpA zi-x*iTgXy;tJ+{_S;5y^3Q7qDGK{o+mWa&`RxUC>R+SusauV@I`S6UuQjHRubV|%p zVZMNbsq&=l6H+u#MZ(6a;JrACM%GYc)@cjaIrQDh6I7gyq(?*78R}7(f~c6`g%WD# zEmOuYOV%LrYpBd309w4e-NYqy6x+DIymdJpE57KE{YAh@KATFL*cf7aSv7ct^KOVo zUh{#Gcuzy(i8h{hoWa2!&L|rM z57rRJgAH_`eeEzbgS&5jrF+&ysViVp4bj^Rf^8v5AHxR#x47zqF6&nut+h~IRw~O;R$>9h9y)qG7X*?Z%GLe z^ry_s-mcy|OY~W@ga`RTSwOJDti8|9R%T8!XR!t&4u31z2w>RXRIi>5N8zpG9d1o}(D-s|!%KeHNa_iJ# zGB1|@5UJwc)FiG(UueuR3>b7jx8%r4AUMIgCY!a+Pu^)a}faH zq&2Hb%)|R~vm&Y|A79%H-}&19orPCwyk5*SDZzyhvk)j_5i0x18-nB+{=|YXw)Y`e zP`#6Dw*#lZ?sFxTfHkG<#B|cgNiO!{CetzMu8v3~xN|rQTA!ag{O4r#SSy3u`A~Cy ziPJ^^+@fJflOeH1yFn3iCjYdu_`H5c$=L1OAB}w<$)tx>ZH2ds%tR!|IFBC`o3kPN z>?ZSgzY_?ez43e*IYy+p)un+!M@s6XRAUtbi-;9mmSV;kg-h0WgF|t$DaFX9s(#imK+EJF~9@nN6y;W*GX?eZ4tZZEvGIe#c{dCphiUMbAM4W@7vX#nXE)mp358J zX$>};XJrOJe0{7a=X6BEsW}7rR$r-t6hO>Hu&m1JN}z&feniURVhTl1B2uf<#jONv z%Hd+XMwiY&p=@wq!fW+=mPY1~I6tc!J$lb!LPJ}rJyoR64C$0@?xP}{iq;{o->UK% ziz+tF7XuMb3r;C<7Ug~%Ue{gy*o0!x#2a5B7s^R2mWeL{q&)r5b9l;~P2O^}baP1! zd=fOGL2r&uGzaiJIN@D_+xt{S6T=J>P!Gr8D-vffT|@&z(ES5}R68mBgF`F03}V`E zm?l~9-Nq4p8asFTy3yK&rw&mj^WZyTXwjw5p%FI+5&SipDXyL&BALm~fVv{AhF8it z_&rP!xjPaMi6qka9ssrc9*o$CUq?*t)OY?){MZGNO}7ETc{{wbFA~Bm^9%FMqSEKq zcqw(ux_)tG{ul6OPz8O>~-qlP^^#k+E1wJ2gM# zVt+{`MILc0<oPtLXZz+HW}hk zNItn#xDe8{{p#WHi#zZ|;)KEUSxUef@gOhrNVhQ__+Noi>~Rv0T*2Yw`y_SKvG3J_ zGj@LxB~uy4%Lgg=dt{37W>puJ2~U0=*N9KgNtnGYE8iKdh}ugb+FIg^0XS<$S6Rp( zvf|_xioNefXP3CRDR^UNFf8RSLOJ0}ya9Pc92sR{Mr?uMr4NScc-`YT;-R!vn#U40 ztY=YSs$6R1%_7DuY#tk05iiT#p|IUlw>*joy<*Y*IGG021Cr)*gK4xN#ReBYd~5)K z1BuOv9E0P>dTf2eW7Q}BarG?t3BK}0roXD5$$>UPlYAI~A+BxoZgKCuMg=lJ#upG(%vM7}QF#vN^n+_+zlrr~7t`S%+iPn7Q=k)wP17YnJ{JfQ1L zvk-JiRz$tLdFVwr&OMCZ$ld$OqHD2ikh%odHyZTWsO4ge?hWLsbyKE3ayC6@ zDp}>!(oEQQnzUMwgszwj^M~6U7pWZCwyiXko;7qQy!U6)d{&Fgl# zXIc(@Mhif-s&>|=p)Mp}QmvkMk*a#$iQ?REZ)ttLVhd{JtmFyE0WEW~h=h4Qfh-qTolN81y zoMFWJoM5%KW~laiX@I{AD>jKYteE0AqJYDkb9n(7vD#KdCA?{Poc-f#igwZPJ&gF< zRUCZHc@!&BlNIfJ*cuq9Wt0Be*+LTvS-U`CnDLbE*Ul4I@41J_PM)_BoK)oi)F-Lo ziSQB#HP6f+#fYKm<=~zkx0hL(})o4&t(c|I4L-ErU4AtlFqo+2SnnHe!K>38C!ZoJ@>iURu3jJSyJ#v)d>tXEHBvblHtFO+nkzgbdc zkrE(}w>-?Gq-4|3?us3YziHQXVSKfXPcpzs8Uby&74)<7ly9zN6=4W=Q*-BpjJ&;3 zy>k_@IRRt2we?d49aLxje6@H_dfHXA{-Z|SF27=mR@9s18sYJEGY5keco0g?7@xgE z#<0n1(CUsh@S; z&Y;cL`n~P?5XZRum~fR&=LuEVivUWNc_=-RwM{#<@1y1jRi$frg-|$q4Ogf*s-x}6 zw|j(rLpoG7{N3mk&Rc^rI)Q*v_Pbz+wU%vZYY$^h54NTASnJxpj-ql}y9zPe(1p&o z=Pix;Aog)>vm`*W%7B13NH}V8ZtrcC3d}ibo^xg=1q2w>CNllksjz_iC?29zM7E68 z3*8dKl!lnkNW9B{yydvKVj}^6*R81yK?$EqbGD-VKzInyuv)*3F#tx)i-WI{ z+t^Sh^%wJ{$V)As?97GEck*SbCRV7W9d8ZrYcqtxv(5eWyy{O^WM$*@ToHySUlAZG zynL%COLCDYNJ~M9fL2gsC|)e|9B&N|vzDmYfI^FO3StT0NQ+4XPGGY?Vk&SBf*pS& zkztPunak^#R$|4B3=W5G(U>7y1T|A&=NBjb+GZly<40kci8mKEfT#A^! zoDN5Q*_$MlmL-iEB`a$WP4yHXkd=L3y&8rNb1HXEE+G>g{+fDih$O7Be59o$(9^2lMw3qovx{B)3s9++O00q~;QD$^SRZ4KsuB-o z&(d1X61>?duavjiT952>Qq`n8+n43nL&(s-RoADA_SR?`hkGI>ay+0%i2c9=3qHg& z@OvlZ5%>3tiZ6Iu9cw3GmabNH^0)Zr;7GgMV;msoVYFTIEai4}jUuPf{He7)5qI2} zAD=SoH3;lu%mAxVwTQMNA-=ZM#r&TG+n^Psv{nuqdm`p#7jOIY#HG@u#sE%R6QlG& zh8U)#N^xY`AXOAd@OcxH(4WLG;s&zZRl!~{*#-`el#Z!^0!(u{Io1Sbkv#=6&d;+k zp?}>X3bZ9+c&63{nrJRvH&cPb84Qs|m89GM*q!rsU4fYma{iKQ+q{j@us1}9T0RXZ zI$v_hLLz(5q8U`{F+9#TeuBO3o;Akr_m{*?S-G(JLrw(cif=H{@K`3}203k@S*C&O zOW3ztrz`6JV%fc&%U0jopm;62O`|u4t#9Ebx z(--U71h8R0opKbr`ZYzOmymlzpoh2p@@J*Gk&ptPixRG`M{pG=xF0|OPToQ z#lmUuY;*Hi?M$M%R-j=Nk;sgfSNP&oank$M_jA}ceV&ER#k|_gz8yRf%3}@reJJeH znVuhqX)X-eP~e|9pSiFqGdHQWmq;$f%$gRm>@-6sL|>Ucwfg9yD&^R{wu@rUt7#E+ zH4Z*0wjel(Z%A~%%-|E*ds_;>V{2A5iowfb|HT;!RS-VdWKtSRcLpOU*t1W}RB@3B z8d?LaQRpdOwSu9aqnW{OQ^g_Y?t@)cr)7tQ)>2PWoeGxT(8--?u6w!W%;6O(zl*3< z(5V*PVH$|2!HumNWYZ@?%Nx!Z;LbxejI*4p`DDkIEAFgEG921$gT2^b96$Yb5ekX0 zAMZPdX8gt&3N_4Ptjzq(XGJOcK-yS%ZmQQME)aFA-oC7IXKkY;w`wwR4ff#z#x7~Y z9c-U&o)dmd zE4Hh5&Xm;2c-k>{Lu<=-;^1kV`xcKLe&cB5$f_uY-I#__a@j+9>Id01jK&Ex55`-S zo%5@Ts)$gMUNwf+`j_In`lo35?147mrn11Q;JfTAe36V`p2;FdJ0z!d>>Dtvy-mz5 z8WhZJSlQ9(9h{v(k0;vv$%%qMblTO%XoSExynJ<*b{E)WaDzmT6Y1 zSnrog<`vv@80KzcF!+ipi9LhNYD+L8`8M%lQ|$V zlE1<=ZLU=)ZX9rdK2{~W)-Yr*I$v?EO~R9K6$kjR1`y$4o0EfRZVRjhV&}W?a;FAd ze9w8R@v2pMv#<})gdMRp0Z1$QZb5N4g$6myD8+F%@#A2P;A9hF8dHxNBw-I;M$n!h zyN{MWR6#-}UWx;rr9#ZN(i^vWF%d;Wx<#4VUu)y-(<1nMl=<5i1Wga0$egc1&qc}r zqaQk?_&OjBHFq=0u@$4THZ`2A>pGCiMhq1FdNmJ2we6mtyg|UPUFp|`CDJHM4+N%5 zUFh;@CSoGPe1k6C8Btpsb`3>R6XVejNUaBn(sO3QKALGbib;#8N8Ff_))2fD6O*5? zcqR94`I+iPl#x7I6wq5y>Br0<26Fo|oYWyd0vLKlJl7=`0 zv6YC;XhoRLbO_q&U0gUPrISbrVH0Q;*$NUB zy>{27&@OmvuQL?!kmyV4pAdC^r|}I7jf>Hh=pCNZxW0xuoQa{l#z~{;a+g zV|tT|r|oUF_*M9N@z`jUhGL-NW{Uq^T?IM+h_f1K`SHR}eqNIKBrv5cjj+$va|}5= zq#C81kQHmBtv5&=pRdWM-7-8vm^ucayr;r`2-&NaYD@c>+o}sPhJy%KkGBx<=pM8) zTeQUJg8a53Q5J`gDHEX}Wruc&38lygUGbNT-xrOGJ?qeb*=To^bJZ(57=?YZAuP`> zigkc=32nQV5_!crOOFy|N~=d+6Udn4p2Ru5BP8G_G7YQSNs>%rbf9r`50(Q{T})nB zhl*~eczE?l{^QX8@v_Sr`&a3)Nl}~F2p#S+<7);NhF)O;e;|3=4olQac8>>dDL;^` z%T9PRqEVrz(&lYivx~ep)AZV%(KDHnS>gQKdm$NxWE$}*r6n3!rWT+rdzg ziMhn~=p4xzZ^65`Dy>BGEp(?1{VXiswjr6#^R$V!WLJDzfXvVhRZ7^P1rI-46(ha| z9!co{;aYfzW0vhMY6jXW8C(NkuGH3qhr*smju%`=36TjAPuGPLVss;MRV3f%#Db?s zO-Xw{!H`SCKym4Kkw`hKG%4SK{M6}vxJr}fpadNo-Rlzb@ysGmUKfc34%&jfLKDz4 z|I8rrcQP4iVGF4rBp>6RinvhLTqMwdp)i6Pu>^ZouX>I6N!^~P{9#&`fsxRwhv`pt z@V=tZ*d5DfjpIQ%UOEk4;N@Cq7@kNzOs<~Nmxeg+$qCosHn1~YY@-bk?4xyV7puuR&!>6~f7^Bn#pM=vG8I~IM> zX+f|STkP7@+Tss-6y%)zCDLV!@sEThCGN z=rz&9?Qo;7w8i6z=p%ueNyKpzW}kHw>T#k_ z(47*?S&}!LlUl~K8{*=TvhvT`(hO7WSm@tAOeGwOZ3(~oH0gIK3SIOeoSr}Tez3+; zVgiPnq=HBA!y0>wmOHVz>!1ync^U3TcMQ?@uuB}eHgix3K%|LumP6+A<|3bpt5b(!iki|<`8oKb z2V74HDBk40ZjT?BgpE~;>D~&CT}OWSwAaTMG_7M7fxdl=QueFAlm6;Nl^l=|6SGqo zU0X%EZuBDBfrDM=v-#1KgaISn`mj?iyF%e1w1i;Q-b(Q0bEuE}v*&8vR8-2CMp`>0 zwuBA?&PI#hM;CpDeA45k)8|Ut6n|#vo0)hqx+E z@>h`w16=<48{#2ecXqb&vX;%rTdIa9k|0GJ4frf)kDPjFmaFO<(VPC3Dm|L{${MN# zzRM7~IG_SmA)44gM>ax>qt~p@16n1^z`kFU+J5`y5K|k-7Mqt$9DUo-Y}?DZI<+bE zMfjOuS(rW9aqa)m7S>}l=Mf>wBQ$N&+?|}0C@R4<=s@CTE2XZx0*^8B0;BCLOt8X% zN33LU={cOP2qF^G?^+71Y6t-EVdJvjQ4~C#@-B*b5-^WpA}!rG@r2ToSMv{uR2kw- z2!+Q3+~U!V>e^{f{|d&EuoaY>eGFLwBA2O--*iv0kE zoqmykY?5}QK54w-4CP$LvnM3vJr!wa?To{tMwVOLDb_MTjuHyxDddyAjN?}?WxA1^ z#z$-c;RHU2N-ga3*P&3Jke){+T5NB-V0M+62aj6X!sbFBW#eAcJ!~~3+_kzCwbA2N05!x;`5^fSCUZ_&i^ET?}~qBbbegI(1qXMzHEF%$?$>0!LEER%l4HAdln)-mNe@4DNOcnX#$4=ik z>eQcH%~<#qs;m(}{A2vrQoky8WrH)3y62C_8UoBF0xWFkMeddP+)c?Z5J{%CdWd1f zcd5koAff;qZY831#dO zW+&NW!{vsvieY|}=6fC_iA=L=W4ysByOGYmAD_I-8Hn6}{Y>NYV!&4nXp2o!B9;Xo zqmyWFhN5X5Bc2TE0O^g+qx#7O?=|GsG|ax?sAnpuH`jQ7C%pt z9W=vAKIC2}jKz+D&;(qO3wiFkeIq2nGv~vJE>(H%9;s-P2~^<1^Wz%?7ke>w)}xjr zih|sM3j)%qlWl?VyaMYMhbWAx$6<7ljH6tcK``m8#qdctB(_UE4o@_s6d8%S(mgOj zV+oQ^i3F~a1QJN2OjAL-^4hBD@K)vn{4-3zoP$4PWQ^c_;Y`MHlZG5c-B6w6hYy%WImTC8+E*ZS~V(JfD3YQ6=jkXx7&aaCH!liN5Ll^7KjT$u1gwW9EzL^lL25PZo-%0U_~Am=zaK+oiL zWnt#eff%TTKvSkTs6a&M5vqzu7X;^9%o__mcL?NW=w1h*#??zzQ9LF}Lweb~?c5-d z2$TWSj^{5D8q0W6(wt;=s^SUyL?+?-;bxsT7`8j@m z72<$+?LL2*bv(O*zhx*WK&+B^+v3^Pd;A`!U|XzEhvV}O^~*+;f1{^dI)wmDEBBu93B{A2H)Zgt9oirCRsETB-kRSh$jR`(CQFsoit&eZG(I&0a$A?Xn9! zg-6C{kzN6bChPPp`q@&7nApw&th$O7kSt9f3Dhj%JWXe$xXQ7mq#&lAi>nIqI1!g? zG-O=}0pY=cVXlVvrGT)D7I3z7b}b5`OYB^64{kldN*i4^A$GpHES=UNWIS5p7zevU zg{M={A$(9lPAwWv3CX+?m0XPy@MAZtB*&Iw>PiKoRB^ZR}|DT~)yIm!Hev-!-}=sVRZ(AhCt zy4XypG{Li@6bMVBpQKd}8ePT>h=X`+8?HYwS8Rk!EGBGtG^X)P84nXeALUa3 z{QkNu>WEq5cmW6&2$Ct{j4!}jx)m67Pd+D{YbUIfdr!Dy6Z!>F25EP=@5Codcv=}r z5LYZj7P_mSt%+JewW6hJc)db9KdLeKJxe@(!ixr=Xhcae9hW(eCSH+9%3E5PbQ@GH1=8|fT0~4NU?!qEpXFVid6Rv0ap*@EGieVgd^ttP={4pQ zN@Ou$zF8y&Btg}0S|X6MtYyZNPZEcoWR&>si&dx-%PANkD-g@=!(iH7bx{Eci{)%!FnmZm)h#GUv!10{!_EitMQx^r~}W!mxOG zwjBPv##Tbm{aU99?`=-Kg&Q383w?19LsE4(2ojA(gjO9fcF>N6@!GB)u6+lQy(TLGA1k9#4YGMiNe&8x`j>(f+od-VBkKG5th-32+2_G!0`Eizk&v zP{It4*^i?iPVhE3_6&mj4$)%uSxol=NDgnn^|Z{xtu?;Zu3;kivg+qhXB#2@0n z5`Lo3ZDd#}`N*cGSnO{K3>PO-TwpAUdd6@>HB@JDu>E!jIw6dr+%1s;3qBow= zbrlbwGD&;8`Xxc~k;R#ZlVIc2^nf~$wb~g%)cq{~3c@R$Q06EjKgJ9=$f=}32J!b- z-$#G<^du&*(>^-pr!aSQBl_1q^a&b4tfa^+#EE#mM3f11BgDb%S83wc=4Q*n^4Udp zH3_veSOON$f3hV&K;&?7f|u@(9+QEE0z*8z$v2hGrTB!A za8FF&iGaE_dqvj5_)a0!0MF%P1OefV=L|u8UIiHw>o2;dB4K#f?k&qA)djWj`kfCQ!v z7%!!~+K>;Kz~cwODZj&i6&hc7wkeBsYNQh@VQZY6<~fb&Az0l`kO1VR^VS`*-9jXB zd%z|T+kxV42#Z$x<#3Cf+f1heyZ;3k%w2^~^FB{jkwbVB z%(D^%0YcRjbE?1 zWn&9+4;uy)A@1BgxQxOGmpxvk((v}96p()c%x_=)DE(k8W(eawh{u(-yH6)^yLtfn zJtKi2HYf4vt8i@xDTR`a$`%@x9cIkgqRcCO$8CNv@_4194JwQMIQn#aL#Odo8zm_N z3Qor#?*VJp0E695aZp5VHsY_rOK-;@EO~(f+ya~BJ)yLdkiFb7k$|-_g*8lBX;t%6 zMisyrIeAgflI&|Kh#s&jyOA6xLU%mvJoHj9TIskU5Hh*O`B#p5CC2=>w)lrp|2OXj zO~DaaN2rtr`9aRtX7wXPrJQJr^^l3SDrIvzU|e!a^Q6YD(T|NFR~y`{9V)&~J{IYx z7*_vS_!Za&KY*jY$+=$8-nCu*J^mX6xOKX8tA9ZM-DYwO33RF7?EZd=TMvLh~3<4t4fWSwB4zE;%Y)ASro*SW{3nK4ldtj7E|Ju0yxv`)IhCm(KFrHN9^HIK`PSb0}R73$9} zO%Md&W2wl}3zZEkt*;qYjQbll;GTe75#0`H~UvGAXdMoRC)A$keP(Otu8dX8l`IEPNa!|?kZpbjIY zp)^thDjYIYuchB9cHd|jU0xm3AfzO`OVJx5HgG8+afi#`MvAV_Y6~ABzam_;1>({QoXnA zRuCy8wjlFx3noFeg1`pnr=WQJ4Urg_PyXMtkzmG3@~jy&+D1W}oa!|@Q&Ky9T(_5L z;c_joYx zVM#(xB_Lg#)}Qwj8ikaQ_j;h`gE=LEv6lI>q!GqZ$U1%fX5s6`3=vp!gOn;;J;&LV z9%;k9bI=2&Tl!qCiHJTDm_xW{wNn^Ocq^1RBMM%;~H^NW9b1dS=-Nn?XVsO!HYDONz(2~Itk zPHYV02w|;=UfN@00%#`$)Es-%Bk>#&hxTp`l6~cUv+ya6@8~t?1ES+qq`uZl^~I20 zWR&FZF5@>A`X;#dAu@gWdNX;$G3{S_NLi2`2gWHv*NhWkaN|_ChuDfV$S<34BR;PmY)^ODJtDV zi_PD3e6df$yh&bC55c(;s9v06B8H%FJ&AvtSMokcc+X*gDF2?>#EsN1zm1r~L@ND2 z^|K(eK~e|D6=HUnzEm6bWk9YTP2v5-uah!%9<8xqH;X((2ieDxT2=4OKTWJ)zHNp# znmB7k?gVIjPbkwnk+0f38!!f>og$DRFikEwd69Rd-w1KX0pJ@r_@0azPiqODl9=F0 za0Za|gfg)+( zK}ka*AMU|fTCp*agqF#}<~{BQ3`cf6(kB6aMHE10MLDn;m@qG%4sM9~0VU4Ffc<}Z zKP7%=1YVf-h1+|+P*!6E&m;W#r}3Yc9W4HqJA(m(JzCw$)t#wWguG27Ob~hQ20X`Y zj6?*t<{v>-jSxPwUZly{n!<*Jd?&xM%kwO<*RW;I|2R#uIOz``R?Qzcu&Af_((F;B zA+*euKAVysoYyItH12DV+71LDbf@+Ihvc){EyA>+Itgs{4Bo&`(7)zom;+6PqQo-< zg@vDd0Q^ZI7k&E*p8?7(O9q$W;0N8UDsp-%H-(IMMGX4us=~ z!Ho3%;q&SIl-%NstH26FDM| zmM~C1BY&0?*1kHa5o&I{<=$v0A9&`~>_}kqHj% zaF=~8G;DNt@}uIJXwP)w^Uz1r!||dC?(q-vk8P-vkt9P69Wi@)6yDNtVnvLci+_}=uP$(n?v8#2CSY6|I6(^@ypyFEVrU7P@X!kJ(C z%rrpdkapeY(y9I&apt}s{ptbt1nr{9+JF@G7@?o17vh2F?^CKRbxH5y!_Ruj1$qx- zFvS6wh71w7GyS^4Nr1WrxaX4?6g%(|?&HDxY2hP~l!$~PDGnhK$cP=N@6EqDObly? zZ}wCJIiYz|L3fXXB6tPFF7GiSMFS91#6puSYB&^Q{vg@WL+0d5b}Vu5z_ytLA|@9# zJ;$g1nPCs!^E|Hrp2{(sj0E>Zy|4g{8v~&P9R?YQ?3zm%FT__zUIzebTBF}R{pb<= z8QHBuP=;#b5iSazkW6#5k4G<{Dk#JhhV1*CDw-A``dGsW`1`ZM-{5$e^c2aJC*o%A zQY;yNce30tWuMlQBl&Q11%dn@&GHZBpNFu}_?Ty~bI0(Ws264RPo^JA$-M!%+=*v? zBW2GZT4wcMOuutFu={?spZ+&Aiz$~5QVs|ap0`l^Gv#mo9{QU@bbpCS=~w?l{&!*S zQxC4fE(EKqzZ?EhuvOCm7z2QR^^fxZw~tu79>l_l)*!;S@-3KbS4fK|938w*Nr*r( z@b{;0fwq)f@&H$Fh(A(Z& z5n&_hZErGBT0?9)k>M_-zdl>(a>b~51YB`=nmA5gR`jo$73G+m=3883Nmp{=D(K%- zI$Y-uwkh7@WE@823w!Gy7$hB zm;AWXU8!`=8(o+p|6LJE#GRKN#dvR5Z`YKw-vHemoe-wIWDfTZ)&n-8PT(3KG=!h5 z)xj_jqIDpN^P*i?&LU9%N}G*oG?NskF^Y_uwE#ALnRdCY3tXmeK!xf;-KESN>7MYJ zIhC|gZ=JXfsp>eCvNA>!h`n1J4yMg`%-i!^By&O=@%`X_ASBc>;L9Ce=nk9Zz2wfJ zXXM#gLd6{rnDb$8yUyG>`J%-W&$^s|c<)Ezk?ZPAYUp>>74j8Zfb2&C)j6*d)Zsma zVzjPNaT>r`LQ$8{-Q)m^fq9?q-OH)W;^K#u9~FT|5Xfls`^2FymWxP49TJ6~%EC5e z4cd)huY_RY8`hZqc_q-T_#lTnz|{Z@eZuMYFp$~#t84_reCMOQ^=VlCHnpX!sxGwq zHUod}^X)o1vylEAhv@(L9Sr%N~+On{iZL=YA_*BizC?|d<)v*4(;?LxH5`>CY9CL}pU zPmDpWY4=2mg;VkzL7ifL8Z*iYi`}tP0-qy;fpA9=ey>CF**#ONVG6m`#Xc{)fsWkB z;)%Z55?td1X>i}#d^g|YAGY9ztVx4sBQt**{9&45BvwUad=XsF&$^^POC{KN&4tVxP#4&6L8l`*{mJ*IVs=6?S ztT8{GQ!||TGOe-r`eoAE?dlF#;0|{Vkf|C&c7gKFk9n&z9{CX24W591AG(T08$CQ| z;`JE;=KwiS#3rMov|Zf-;Vk2TC>-B|qPPGuxz-Pj^tWK`>ZxCrXsY|5T6$mXnY1A~YaWed&Y4-HR?G(x! zZxB2OU1ZnTX4e!@sqEk8j%MoBrx~cEFOQ%2V z{SbM1Nf-R?^wmEOztz$n=1geWDE6Y?%z;v38nq19|Ef#Vw#;Nz#?I4~P}@0^`|-cj zu4b`>&ndfY9z73apXfNSbcK*5({)_@#4ghL#d~PAZgJgkP}s zndYvxb9JQ}2FC}pCNPV$DCozOXqQnOS6m4{2=2nS%X-e)MZaM++HITRGdnSI_*k>b zm$T`#j0}2JwO+;QuSnBxx1R6}8GQWEFof4y0>cYdq=2+D@M6WyuC?*uuUTy7b)C=U zD%y8{wsHnON$blB%oVcd!8aulZS~;F!m)@EJ^)LrV7r`_}=GBi`w0Z28le!Ea}> zUmg!Z#KskGzkS$X;a99ltm)+jCBrCo5rAS$|CxUyQKAflMg6;mzz4yVNORzLK{ zD_}P^1hezOD5`b@=3^~p&G#t=Y8@dzzYSDq%UXK+Tw@SU>VSN?<8{mUiPi6a>bTbFSdqFFcAkJ2s`BWRui4Crd&v%+s^|yJQl^mvKd*Q?RwKFU2sXMRb z{q?#BitB@K@C}Nd4Ly8S`~db$F3llT5CIpS;o*dvcIrdJMRtgPGr^2o5*@Qz_Zpgn zS{nG?(5_w`4AJT96`|7E-TOqN=*#3|w9JzY`YF{cHqh5r5*%%Ke69`miZt+gV#>(p z=8cMo4R`!t_DAcsNky~_hI1jeSSf&IZSi=MYv(}XkV57AL z6l4P9bFC+2u~pnGsW-onS!?fzm&Z$A+XABrb8>7=oGFkLl+>ot!4Q;eJoFsZCgL+C z=}G!|@6Nfw(G^MDbp8#$vM1Ei@W5Qp1clRBYzQfgTty0|eIajFAh77g%x17JspjNFC)o-)-CoX3aA$|HpwE%lh$7?3@pHkhi5=$qoB+OQm932Pf~FZ-ZLAtZ7VNr=5|>>qR$shoncg)Rw$=2UvdYxYmqDT=yqn>38@6NRYp^ zy2IPX5PRxlqfSK|0YB{HrHPFSUb zW>#0@&%yvk^u9dZY{AiT^hKcwCJM{b)YN@9Amk_cN6vPM??#Ml738nkF6l2xOg%+3LpllhyeajjpQL-&K27CA4KcnIE;qUx>lH zA`3C2h6yg*&5Nkj){W#(Opy6A&`8Jp>+0Q$YvMUsnnP*V`wKHLmr=zeg{j~sv6GU8 z0P6ZVszg01GT$T~w{u)7bwi>ct(SXwB6OI#uSNdljd+cyP|w_$l&7o8nHEow#wTex zyxZ7~APJ2!HMYa(39Ue9f{ZyBawAAw(m&wRIiE9yf!9SB=?Pvtp=CBo{Y*n@b`Xd^ z3wsHtx_D~2BkTf2NcDlA(Whvl5xK}MBc1iB`J`95q7vDXAP%))?<7LaHv{K@QW9e< z=<#A*kCrT!rUB$Mg*hQDA;gIco@fZlFFlWJO{@{ge4=)*9ZT5u{5f_eGmGPTY<^q& z1o)9WwCs6RQ5Di*sIalAhgQUe5C^-b@hlMV{)&Lp5{GRk;olZWlmf4gT^b@w?6A!V ziU&#GmLa-fpc%=CV$1=GKH1Zq+pH4U>LvX1MSLVT&l~+viT#dzZM33P-lV6ClG+(h zY3`!{0!+4p^D97{tehLW3zQ2Esf}qR6c9&y1<8zs<>&~!d%JoV`;2;P2Bt4QrUH}! zV!jUY>vTLVkB36+)#RUG!V|kc>`GnZ*E`j*29S!f(vq)D;z)p(#sYWS6KUhDaXs*T zTx@@sHNQHqq0aoAx#)?1vaSuJh7eN0TV~9*ZhsTJ=H!T=tZy~TiMFb>+{#9iW+8-4 z3>63AOv~>j8K(?7q7lCjFL>BRC<$PaQy=dnQaabTp()nxPILB&s&%M0D|%SSB_E2u zj&zfkI69V=m1upRo8(VNMT`TB54X`oMpA%cM-n{B7<_SCAR&?}jRh8S>5$k0Vr@3y zqE9%d`E9S_%qjykUJRJ#GWvhi)@%+hz6Z%!OE>PVB)-+7mRl#8i??Vs#O?8F@FuQ- zk5*M>L)MO&nBrI?1`Ai$c%~PMVJ;V*l%5oUr}a)n7)~w%3HR~l_8fh;)7twxKKvb&zD!`2HFM=+d) z;Cv{?(~}rRmzjtn2DV2yfITqXiPUVA^7|vOhZ#WhN<%I}FUhJ_yP@QT67CgfxtTZZ zn`HKGBJX8)znoAZfp+hnNfrF8Ck^uMi^(L-8!h}jJVQ|T{2 zk@SQ(fr5sDLBdB;31K{J6r02*1??E@ftit^OzT)fmZ{visDcr z#*o_BNG_8Rn~J+QJysD9I(-=SuQcJLP$``>ZH*|_&z{^C-nUx|@@#Mwzt1TLGFRis z%6mlX#{5wFmEhY@H#k|BgQA|byy!uh})9EQs0^+WC)cJMDq;;?q(?2IUqL~7%s zO5ZR4*lG8s2MXj-kFvte*{&X%|9&^I^Q$ai+zyD5JbQBU!s01U$9pe$u*nrGWL(mH`oZagCrdJ&-sGw8BawU;3B*%Xv_CG>@fe4&{~wW` zA-_@nfmh`pFbX#*6qm@f>)_Nzwc3?pd%hsBk>997h*ULwD4Bxe=02?~BXJc7I*31N zBt^;KS=oH1=#gbD9*)F<+*_nqQLHn7RiY6Rw-oRy;{htGAAnNOc;WPVA!Jm##HYnR z{?eG9fo-nzz!(#j&!>lG52PZ6^D+NepjF?4TxRO84x67c9N`7|yZKL}GkxigF73m( zPEI$^48eCHrK#bhl7x(dK*1fL_}bzeK~m+;^qU}epUpqdl;U85<|X>mM-oi)lJ2LE zV0+^-HorN^#~r6Va3c1gx-#m1-H2(=NTcHjJ-wmfe_-XOF9X~Nf&3oX0>>;;8 zj?#EtB>7zj;bDj7FUz}+3mXIU7{|irbC2WYQ&67yZw^!SW~zfxQi0?v2O#7yEn@Ix zrX_=xHW`c6?a&XV$0-Q3i=uR(zOy|&L2(1@=sR$a`@TuZ~p!C zo54JGr>a)A2w{i<=(C*6$z+&d7gd7x>?7KB%s2RWv%V+%=_P5Sl?i;n{oE-G%TP>d zECI_*Vffg5O=k^afFMQ>M@5N0d(!KQzum5vuV?TzN!n4aj-{@*hZ_&D*B~HeTk9Qcu$-J z^!C_NQD2QYM6l3rck1YEga}*d!7gdIa?K>CLOY~mI_dBiE*+X4(?XwjapF&rveC`v zLGI$`=j(jNi6afz&)}OnxfuS~tC#v*fFbsoeIwYp5R2(RC1L zN5}m?o3Ca8)#ucdG@)!v@^C-Jv^dg8J?DS2eGH6svhiPJQ1 z&R}=&obA;o&!M2zI69NLjHC~&gQ{mt9AQU=QSwi$Y@qkoF$qA^_g83YbD%5|LOM+@ zi!iFxIg5{4tC50d5T=T@stpcrDuap;p(kEGe@;{Pu-J@n~|9+M~QQA@>Rx#laW*s|4&@O&06@=rdl-RXWJ92 z`TD(jQc*ElKPPS6hf=5nH)CK;3!zqxIA?DVL~>4!Xo$kADh`T+02lPivh+}N5viL* zKe#!g6RsVe0{HF+SkH&3be>FNdLC=3KZ?mjGW>;?JRA+PJn6kefTV^EoMzpV3Kp*_ zFYLG+Q08hkuuC>`mN(?OJu$GX>AUJQy?}Az2A_(Bo?=e62OMm_?`O2pDSzO;RYn_j~vX#VaLP+5n=pYDKL$dC$IXCnb`52kDBf$b1Q zRIr#W@IRek9A;I4N@JhrPh{t?*^z{O6Yy ztrjd=)Iz9ia|iEAnHoGO`Pn8VFD6x?c>^UQ00y_dZ6WpA&_RS1(ID|ssPvC2yth>a zaeLtDYa1GAxA~{xSn_fESV@`ly*zvvkdv{}(I{B973T(p*tN`M9@USxD(PfttU?za z9NvOA__?88vEC7R+lfrOj$pIQpx5^m1?jy3wWsdLjau>6#1@(;?oFn+q|UaNR$7bG zobb#BEUM7w_C%%z=-HELx?s1vNH))hWr)NUsjm+mgU?`r8hn)nXOxQuHl1>3(jIc@ zKd+#jMc3_*lsWGJ;p92Q#!(^paI-0*vHBj=QgcB|=?XSq={M<`@cbM}B74FQ(Wb*I zN+{-ybYoH=os@?w!b|8lAqkP%$M6zcAx5B%hP;J+XwafkU_O_LD}?hIh(?U?LnXp5 z(%OD6_FZBEwh}*3BE3urFPNk|#NM9x-5jnS1E$q;@HfS$hjXPza!ZQJwo`?e3PkP; zrpNh(Kt4V%1hx_yIVp0GwRT+5z=^DjRLTzkDcyb*;c%G9UyHo+90=zJHk8@MgFY`1 z^g-*ba9$Gysz)<%H*n7i6UlFX786o@P)KG-ivv0PfKg?D!xACkX?{>rTE*Wa(AKTZ zi(cAsFhU4mm`x(wKUK79c2yKMAr}O6W)@OILPAdakCyapo=L1J+c|P8m5B(BGI*}3 zmdHpaQpIZo9^w={!|p?l$7PM3RE|~J&3tY_8@D+&^XMq7ky8;_sqr}|ERO@e zeb~88l)X8+Wbz2uokVKqhYjz6L&+D5v0i{=xSxBwWW~yDUe10Dsqk08U&?)XFO-xN z-zBagQA}qTrZ$Z@Sr!>wkn$Q!%0i)@@REsZkG(|BP$DOL*x11d%JT|`v`v^KdHm&0 zNw&iWV?g;6d<3p#;__Rkoo$Jiil1k1TM;x3QV}Og{2m~2(UTIp+&X5%oUKu{y_UpX z;=a<0bzK}JG-l+L!^{O!?%rVB3$Jav8G~2K-%%v>I>N)x?U36=$)x*2okeJJx-R05Jf)g zjCw^sjpgp>6vCsd@G$IR6dZg@Fn%KQ5RTa|r$H^b=!>8PGz!bkf%nS`@j+4K3+~IP zYE~!=*!zP9g~)?v%z92y(jb>L1l~GAqc8x6qDxZ0wN~nLKujc@+4P!k~0N8X)M4yk#ZLqj|pKZv_F)$zfR4oxj#cKifzfXCXyt zas1Z#m!S=@U&SF(Y7mR(`BMvMdqxhps#21IKc2_q=d6)6w7vVoD;dH6wYln*A+K{f zEqH36k+tvUCOzwMz2zj?pjS3D_Ya^ixGjJMFT$PNTv5w}KxmPFMzCK$wu^d-~F3;~&D>bH&m;TS26m=SwwoUXm;S_tM zB@Dnv&!F*$CQ;UrOO6WgrxawW5#@2S^w&Q2~%??!6zx0H0T^Zp(etw^hEWJUNhAvtRJ zu3cMDN$%SbT{JP(D_*N4dXcH1!Y!HIR$9P6`U#W$bO1D(d*2M*#D=8#GZiW?3w*LZ z(xlCt{DQxI$r+Uj=kE)%v^sC6if6ORq@!&&jA*#D*WbdnA>@MIHCwlH)R{bK64Ej2 zxLoI*XQ1URiw4jFW1UH>=DpDpkVe&1ICLK`X?2e7W({P$cbq%#d!=O`FRX2QW>8tc z9ew({Mm;BOug%VZ1IkZata7zxP$RxGPh`;S{WCOErrH$tteDpEY#UeWa8gH$I%?I? zd&F8!p`Fkuu%>*jUZq6{`#lbC1JMIJf!}P`ZyDu`np$%?QL!UhBICkzU1SD9d%|YH zl#~;{IDgQBrRPoO*K-c{Y$;M(NDV&%q?VD*O^S0XfY+{8L(K(IvsZ;VpN1)h^qphO`tJ z2}31*iz%_YwR~=*Zxg(%X&B6jwrdn99-Bq-Fd|MPrEal@v3jbmMan^Mm`5?tdObWT zg_>@ZbIPZrh0d9Vjb--dTTO`$ys_&-Hkq%ek-o~`EVcus9`tkqbh_*)?&~CRMTmpu zt8ojz1ym1O>#o++X!tiG$p#i&bM1RyDbKm!JvM+ojFfU*-p17MQ*q9x@7^ezV)zQY zZ--Y)E-X$jqJ3MZc1srif;+%^vqGYA;S;RLb4ps^g9Y2$1@120hbi!es?B`YsPffO zwKlZz08&o6ni}$kN8{C>N7RqYl5!$%UY9XB#k^Dz4TsA~%G2W4nN-Ml!|7CqAl7aPSYDg=c8 z%6{RsNe}$+8|XEU=xgojK0=Y60}PFVUOfDidj)cthARpP&ZiX(2l#4T3?u)*S}#hcT_pGYmBRcM_rBX60}+As7hM?8Gb z#Nxt~uNHZC;NEN|o-la?##*X{drQfye}+VxZt{5g>>#~H!|5O;iVzUM(>h!Y(E2Pe z65D@f4JU+pu3m@Y7(DyBdT42+UYRKOS4_E^24$-Ae{0<@0}Sa-6K+__zkwLsKzCLJ zGK6MHeKg-YL);RqWD?qwru9dY)@V5Uc8^|7yp>yMe(lzY3jDgMLxD!o?+O!uOj`{R zd-TAUF)Wl3R{7gTwL*-O@LX-dzaNu(5Ax!{h~i0A0yEYYdo^p!{L6c1f+4UR+8KWJ?IAQR9$XxU{FlFo*MI>U={Hrt*TH~`Y z#;3SAEFO=g4*?3{ekVkn8l|FG9wIFCnq-q$t4~I8E|gHi)45t@g`}p751mi7dU{&x zZLk~H(dqf((mGYA7qy_Hp-Dl$Ah$HASbrR?#pQ+{9WD1*;t{|__ z8*8;Y4;fKYchBq2EV~u-7}VHhPRMtkN$^^%zZ2i$>W*ye#`6r2vLAP&o!9QK0(FQ? zG~`la<_-6dsoLedLK?5)e2Jap7fI$)P{p>s=Y0vCgp`$>chLI2vPru_j1~%u#e9Hx zOE`8#=Ht4cCZ*zFZ)ZQBY`b1ouZ_?~>}2BQdW6Fyy154eSJ}qF!bMp-44&Sb9aXSU zD)tnJ<8)~IMw&t+38$WkMUq?G=jK-5WZ%feXR+r*J_AH18eNQ)XBvM*beR|(Wjmp*FnhgBLB%Xc1t zu9NT4&ECJsZGcpX(E@%!E@E##JA44`cw=1MTa=1*q|wB78UzC5f!6={QNuD_t9(_> zHf>72n}TtbVY@Zc$fl;0pAsbwiv{Zt*Z^ys&KE<`XvDw;cIr23N|cH)UOn(Jrhz8&^`#kUirN|pGKqQrTfMXla2hgvV!vE&0iMu#yy9+*X5XqXQd42~)|#5bAQ zrsId7!9T1Re}NeW!mW+XH^wIrSS$#gR*xi-k@~&X7AbBpT%j?pP`vd*UJISKXNiK0 z!iARsZYh7Yaqzo&o)@@E_vFIy{R>awz+myIk!O!h@jy>7_~dqVck)RFso>*7j!RFx zeaUy3UZq_|hOHh=J~sL?STJHWk&!Z$9=WXtULe$7Mvt3koBv{pySDHocOO4S)CQhv zc;z9HLb0MxZhE;1-j#e(8aViYIxnM*;90Te&5h$l#_YW#_Xh7rV&MG2gij{c07vL>auyg;0C0Y?ZIiq z_V9QD=sx~KUouqB*dXKZgv3y587d|Mj`#GE>e0lEF$wB zSaF+zmsdwOI5C`Dy=QWP_#uM~E8-O%>C=W_=br8qa7p9!ypo6pJJyoddoXbjq?!@V zk;oG*BK>)?D&ZpaLFOZa_&8k{SjL zY;QQRzeVKhnO)z@b)tl_~BIzr4fK8M*IJY%Y&(7QGp0JEHA)5cxKL z7kI>+HUqxO*jUJxf27U>NEU!VLl zO`|jw;))IMzJaWhln_3U@^bq5ppp70$+V54^dL!CHNxj2i%*v0^U8Yh5t3Jwod_-x z2N7n;5{!>yz@5nBT5pr&0IQn9^u*EzJYi1QVJ(F{#0eOnPnj;`IaSg*A;a*oH4Z?G z+O1;y%MJOO=^{jDPE6E6e=fX{)){@ZD6HN6*48&>XWgNjq4Z=&kzZ?zY?KA!zHOad?@rjCeav}`@g$~poTsNBm7IGm_b(8mhz8NqnIb=nzs%%H{=UE? zqrj~%2?D7y(D_e*f#<+46|Z8+sVQTRYsRr*JRx`;gdN(*X4BO;*t9$@&TA(4c|CSP}@w?Lt<_2 zZ4-@#)l1k{=-G2Oa(EpSkzk%5Ldu7J6_m7cDnbDxU4-gGrZ(0b5e2+m642bOwtf0x z_~RpZOhy#KOiYL;HxQL_vX~Rzuxb+gMIuEsMu5_M=hUS-bF%YNG(4?!mIylZi~%h6 zSsA?e9`b7g)oOtb-(hM{0WNmVV&G*|4Ib^|m)Jlg)rHM!tL0`elP7U2Zajw)RX4mi z-O2*szQQ9uq&2HWr;8jpMv!Vn2iw*23~>+CKQ9AG;NzN1jyOhX4YKNd%pznpei0YZ zC`t2-v)*zj_Z#|}kqJG@cJ)%Hn4%%)8MLYqVMb#fVR5+?V8pjY^^sY@01=iDgub>d zkal3?Ga6JhyiujsO7t*v zKg2u#Voe&tlcWsNa3)cOw)ZW&Qs6!z`xFFy01>o{aDF$9ZP4 z0n(x+>N}8LhBWl)CCr$_#B?i89GK&yw>jvJ!~ss;7v=VF1!(C#joYqcaeN`A_jDqx z#w2Ek3&{}f*!#jc4AT3ePoCVyR%s@e0BGC_n4fHsHB>ULbmT~!6y@=Y_wz(5j`0bL zMD}ujN?9jZZco#}r{8`c{B1EOVY^KUbg{wB*gZ&q4ZtGw5de5R5)r0Kz8*epd{p|P z@GbD6pJgA)I`$Dg63%?`02t^^7_Na1vKTXJj%PZ;gX7o?mgr6uY$7WCgkFl@j|0DeT0BG~}v8bl344?@Zqy_$IqhuQf(F=T3U&v5hz$;*I0z zv^~D42e=&q*w#jph#ejq=B?y3)8mLZ8hHoDxg2zH$m6qT$2NJ*De4JE`yo)8PGZ9w zl#B-Ka_(c}3F&2JQ@CLYBQD5opa}3R51_Wc1D1*T-zoo!i($Y9kh(7)A;FP3p!Xw< zjX+gq8j}TWehz;#As|uYx&<4UzH^wEUoLHw6m$JA|0!D76a1bIxxqm`hsz{CCwon3` zubEyzSo(ygio``@jya|n{0`}-_vokd``QDyB6+?^m4q)&8Vsnh;eU+3zwP6Qt#z!0 z4H1VsuHGE}+1w%(2UhX+HmxHsg=z<-*VpQld5tB1aYhqieH2l4wKQY60!8YA;jMqY zA+(inCFi2ZEG9Nv+l2zDN&uGom6qfNl*pORc2h>>2i)XGiJ2}zUY3E+!ooL-Am(>%*A1xdM4I?_@v;ZqoYV8NSiAt5Hmt+88 zExAU>$pd7(2>Kk3!5D$Elu+})%618A++i;Q?z|XDi;RfCW*!gXokc08h{=53rWk67 z$*VoMcYBn&jt+VLNb)>(5sOPQa66o^kcwm>;QI;Tr&BDs#x{i4VNOsDqSKM@JUQNZH2v70T_tdk)P2BvZ5wooZ_7B;195ANrIeq9PGCQ9OLJ$AzwwBX~*8-$b8T7N%ff z6z)a8+hfB9gAW7s3HcN@vR#eu=O)gLoxaI$7H69wr)Z4l2Qb-17}b_M&+z9{`g#W_ zBD6f-4p)^9F-aKg?bY-nVw~ZLllCkLllsJX7^y)BRlMVqkeu3!P?V5lia0ih%f>iJ zqDVi;MM@3U69FTvGL2L1JKxP7Vg}OBOy+P8mVAg;QH7CK;>)-P;s+0^8&u}mQx${l6d4lLu+$%%!dFyrLIkqtb-)M7WA482P1 zP9dMe=@rCMKZkxzM|<@z#E&71MmP-^#Xs~*bGo%>$>A<7;jhRa#i=Xw8XBnDWamaH z;`tf=sVUq^oDE&BOC;{DutUe+?g989hmv=tKbsstlBd*;<2DB+Lq|QR@VTS-59HsO z_NLT@E@Ni3;W4<-8nygU^7TZ^lbjWlL>x}0pS(MPQ85_47op$lq(qmN`-RCd=AAv+!LHa-%9u%oFqpvkTH)$0d2JD4Kdi30L8s9Znp5s^ooAJ#VX=6)$*e zBNa?wI51P{ak;~NJZD9oWubFEu&x#3xu zTqG0@5?EezS|?fw&{3cA@>#xL&OZZrb0Mu;kBg_t_?R#{-Z}k9^-HN<%b6BACrpp` z0F$bzy_hgbc~@DG-RYk85w3G!Wv+GpW@aH*I`z`c zxE1`)_GDnE-9Pc%T{_^v8|o&Y)THqcEi%F9Y(au$n;Y6W$Mo?GfuB#&qTN`G5etd` zWJ>N4=de`u*XW6#pF?qt|IbLtpLIz$oH+zrT@)V667(`U} zk7_~4l*LM3<;la5y82F=MjxOcwF2L;IB0KlMF>2_m@dUo$*SyuiZSTG5yL7erkwm5 z(9Pi-^{hxEV@fqNO3%2`|6(jo0u`)yfmAdA_Fx#C8AIkIiS^XZ=pbE_qm1;?8}(K& zj_RMm$8m6bQFvP|fLBRNu%ElNL`p?k&ofS6oaJ&u?W43UHE!^6N|gCcUhuX?#eG=Hmn+9E+!ckz;|8n%23`3;i@L zA$dtK9JkwO@< zvPZ!+tdoT2bE{F9BjK_*~DJ54xP}Tl_k%a3>LWyk&meB|Zdux$w%r9`NSspjy!I za**r})YfBuQeTi|IckWPxO_q0SfPkImOkPs!=)B86%vWu_<<$HXH8?3IT_Zy;NhHe z`scH8r~Yz1Si}~(BfJWL$YcfG5SAg0U*K{(G5|tAy}$QdU22;alLRw4Gxh^u%vQPr z77=Z$ch6Hz!HkB#2E7bH4%tmv7&7_8*2$$ivH}91tAg7W{8}AZ*pWxsY|cYQ`bO(1 z%>MoNiE*GphuWO7h*pC?hJR8-?Dh;0sGk3$G)49*C$qaB|7c4~d~)4(pIiQ|(a6Mt zO=8Q2Jj`8OZtm51`pv`-l;EhTdFq)hYpL05>^q38L_(g9-aS|}s5l_~PHHb!Qzo13 zFU1w5K{Iy(sYa2S#`dOCBq}o8%ZGsz9f)*$vwJrjKiaBF9(9jd2U2{4vYEGG!ECk6 zTIBt~p|`c(sP@wz2Sg$>Zes8b-iK{q$$?a+IY&STTp>v!8UQU!Q<{M+KT z_L?5~HdgVQ1>l`Rh^nsLUTCM;IBmJyn}D{wuF4^lbKh??yptpU8J= zDQX~ywBbkeXj5&cS0!$1k_~0kb0V=+;FeqpW9slCe8rB)?lQF)s4ahzK4uNxvYaSi z9v(t2dSnSKSi&DYK`FwS!8w5WJizU008PpT!)_jg`6y8yoC{fI7Eed*v0~&gBt;Z5#|WP4j-v+I zJi_D}TK$>;p= z{mY-QzfV8DAN^R6pPax_yJs!`=H(*!qsy?qIn+u!!k_(lI~eZpybjOTV@=HSIb_SS zz?e4&Eaaogp>He#{&Y2>s3K?KCjd0%@ex+nA-X8%OLKP~$W{*rQ5!$Qh3~OJGN6e1 zcXDACH3jiQop7@H^WNR^&Dihxi_Kfhm=nN|z~tP_C$(kR+GEOkbUCGU+D{%v$v5Y) z`zHEQMlZ~E!8sFhZn{kdd(VQJDriTbO2TY%6gBVgA>NMs=JzIt(;0WKNw()8!wvL; zJYe~le1+z=PkJMbNn{HKw=%QSFBJ5Vhp9*mp|JRGAS35Vjf#Gw2--6(lsW&ih;QzI0 zhHH1PI753r_aWccN(DJT^uM!yt{uyuT&Vg3&H*CHar&pF&GIaji> z|G)wLcQ-X>p-hh}AMsTtY1KUc{iXAafDuK$gpxj8aU;F!I2E<(RV>f?c~)AU4hK`t z=(qNw-slV~rx$ootDX+LhkyR}V1`8~Pemh~G@rlu`#PVR%O;!1@h9(JTr{m~&Z!SA z>pI&rZPr&d%_`oh5PJnHe|f=7F7dbqUo}*^SorK! zm~ShMg7S1~VxjecP<@Yzc8)WjjY?sIL+BZ9QB-%sE``@e?9$pT+Ti}_UHX?-o=;Vz zX;lQi@+z(NXfK~w{47B=zP~ufaFH^nO~UNf%?G0i6RH)SJ1?2s((E|hkYxHewdvArH?`BBk+uGI$~B6xvg|f zTpQRL@%N6|c(sty$NdS!Rqr)Ib6E)y6PUHqUE-nf*C8g8dhTN#3C8w|C;D7r<}QtUkMDR+ZQEf(r`j1~^yo zABWQ3SD=JgPkM8S&(l@1zN-$?UV;uc-jd(iG^-JGi?|e*6re^Q&f7MHZJLQt9%Tpd~Rl@_5Y$jL`8unD!|=bQXm;cvL`{_?<2EAo=cecyy~1r-UchNl!rFY{AIU0c5-WoTvnpQpUc zTkpDLBv^bo-~(v2mAvn}zc9iVu^l&e%PSFW&J~}H!7uw0s_BtpnTBTI<>s_|k^WGT znZ4JMKOh^20Gk7f#1`=YPG%xq_g_H5RR;4nXir=Awm0e_a=_kQCobi{RV$6eqrN3s z$BAqQacTjs$`)5kv*09Kn<90PRK6xk8bd!2j%{wHCFJZ`8=6V(YlE;|#)-=O5R4BI zh2Ru-Pca$pS$%`Ck~~JWQZ7|zhp&}iyxg~2<^QzMJoblh>ib)iO`h(Pak22$u`NQ)i9pgNs-H@^IGwGLz z{audx-HKWgoGxA!E{-C9F`9sWK1at_T3bXN#fre_fjqt5n-h)eYee6^IaW9)+sqUbQ> zR02K9TVWS^`;9BU0yn31gxS!?&-M8 zVB1Qn#~TbxtzrQIaH_wEr?r{4VOtUNzV2Cye3)NfJ0ZugTiaYpp>b+MXn7}ouSW1- z8eD}mp6M;u#DjHDF8|qF|}uq1-a{-g0MYEeM zffa%bc|&bB9YzN)fRF;uHe#L@u9Kp9a*@wB<(P@^PG-U~GWj39YA`BHng{6RN9Qko zP<_!pi`Gsi$Y>11Tty1YZ391O)}XK-7tI2-gMcyAr8TIsy+<(cNiM9XOi>i8>dbl^ zNe2eGA5wzH>2I}ArhNbk>b$aUcH4`%m@DS`K%H!E-KVB)PYdKDua-yqTBCC~=)Pl5 zAVAQZ1_>iMxT;ur^fbO#q9L*k%vG%ch17U+jdRqGGFanGHw40&BHc2-QAq zW|rkGo-Bbo?m31qh(L|_crP!zhh4I%e-;WfpiXtLAA(X&oouXIQ&rVF*8XEW$?(_zeGUWfh@!A=WZLP2$>WM-Z5O zui(Pc@jHOKicyTl*UsY)LIf|{_}yH9J~bj5*jUJ^v3GuIcAuh8UE+t^1bsldf2>yD zV%2}zk<^|Kms(>qI*3uefOBwQ`;Z?IR=ou8l~9VR^lfb%6PAO9pi-u;lW_WdR=BZA zTFF6Og9=VUQG{ju3?)l19=0W%KIWAHYtqOa;-{CDX=aT7GLpk<1k6LbAH9EYxdltz z!6cton)_?GM90v6W$n_I+vKHNy{CZtejM5RQWC=6ZR?wkrbUn4kMkR;323<4I4JA5 zOPkTNV>b%7EMLY>wtZtH0m^u~jbRV3#}i-napE}X!MU+-q9@~g+Jf_r+UAIcsq@zUWw(wm2 znwmjf#m=QP6wKhNWpz|9?#BYTS2c=@mmPW~exOC;1m2>g^vZ@irVN87tOtfw^3QPQ zRGWTFlk7*g&^bmiQ4_RGtaS_Y-2CkMuQO-x|Cjm>Cg7`Dk zy4F9Z@G7S_5cb6@t&C6;4Q4_6s%Uc#*jbzFv{HxN4?_tI+%bDY2NCe4iR%o@aEd)W z*M3|@Mx1m{kOCIbkTF$`^{3(Vv8^y7wgWipiBpV!1TYvG5c%8p`6M>XAdCMiT>N4I z%ynO;n73CVn=Dm?5g8Zktc8mQH`9Yyg!l^iK-I*~BqBt62jSDHId;sWd0M}JrUZ(M zLsekWdMP|zqVy;kNmL*DL^!s(72H2HBSl~T3Hf!MrW&PL!k1LdW8U&T!>Q1f8YxS* z-#uK7M+%sYM8oJ$5BaR0zV#ITt&VL8CyeS%@Q2oifo)EEFl9$sCJE;OxCc7OD8wMr zNy7W4glEH%8IzN$SXGT4-%DF`TSRVo;0!Vx|Hw*TL1n7FBiLI47U0IUWr2zAm8oVQ z=`Lp~c=4wc_JFZ5OJ532q(<0B>_PcqCCm9lEWvMn`&t=+w5~CTO!|&#Zc%nOiRm$J-nn`^Ks!#EN^8;L%os zF=ct^kc>K%v?P_2w;;6JQ~4JaGGa{8Pf6H4Pvvw4QUK(1!usUq9)uZoV16#lp_0E1 zO|PSP*+oXTO6DLAGLocDhoT568Isn`gDj`m>+TOfxg34s~ zU$Ajcb2~5LX%6G*bS~D-wEIufpXL94Ym@p^E_Fsu zC+mapTq67^1=qb06E{gc;Gz^Y6RVFYNcc;xfZNL1EylGbS?9sAOr2f>PshDe3b%oX zs6a0L&Z@b<7an$O7^H7$5Awlep;U*CGegy zW1PNthyEh3hKE=ySY2unqzvG^n904}3VB^B>(>J*bGG2JgWcoQ2+QZ^ZQyuy(mGavB7tGq% z`9*s@f{-Jxa_8J1dvjNHP$bH+#A(<%l35T@T%<_30w4i*LHR>Sk00;b)v=k*Z`&zv zzI(9x`pn0=-0A6TDx4V%vbW0a%HsU|Q}GRcUBY!KEQeZ)e)lpp%xMW=qGpVqGJT7@ zs-~W6!EY5q4{3ec#oiex@Hg$gf&b|&;&IBST6~GhlV zKX+tGy3ge>3xq{5q&NCIP0F9joIahPvFED1W4qHC7gHsxl9jU<$jy0`M)nGI;=}B+ zzW2Lt7C-CGGoQp?pYK1{z+F0}{EtR{l+iywH2*UJ!RL$$MEgxFP%DoFTlE2y z>}59S;ba5Opos^G-;l49V5D;fZ+VYoYMoxY`_U)(J?zf9=Ih13o&Vu1#_rqmKgcv^ z&Th_nW!^(JMmk5Q<8#`B-PiGdYtLutoAQ5}$DH!iPxC%M2ut|45bJ=xl2>MFjc#Q_ zBE*~w)HS;=cydL-q=Vy17NZ`1$Ch#jAfepe55*P>S*oB}!P6YXx-gde;X=Gl-nC;+ zt7(PLK5CpASLPU;bIzLiJ#u~X%cTJK(3cnX+7XnAri($Y*q zi=4m32l*!FAI={;o-Olk_Z|6J>93aTCE`-Bp0JemTAi=GYEbvxRltD;dKud(JhM6Y$BYK;^k!T z?jO>S?b$OrF91atWlmr*P|{vPHG+|)DzM9NIJdDXMU3Qt8TVEORoCwRL1rFw@mk_g zsNrE1d8bNxX(ZVaim{k!^^foPIvGuoCk_as;T5ZU=I|?LC66x_uq#OXC_Epr9aDEIOn3XVu z&sX$z{%JsKGo>3q0iQ$C$uZlG3jXi}-mIlxtw-i=EqkA4Cb0O{FF{3*3fpi!Xy1N* z?VCiVHR>CFYoQ*H|8x?L-MrkqP>wXgJS2}QwhRqMYz=#<1A0x;3bK%rxAruZhvX5u zG@G8eoP$)8EyFZ&9u@YPo&_k{RIkZZFpJ(Sx`U9G56hoXp+xfOR0F*sO^P;aR@C>W zFD++eOmCJFWylIB-KX6H^N*9q#;y5o&kV*kxyL-DnoNlfYbjMsLsrWoRnLwRS+~7J zj4AThiGn0#ns(Mk8X3kHZWca$-Zol=}B|_Kk{`b?*S!41G@wa{r zf}5W5$OsRmw9ATq5PyBsvy9(T)sm#17RC19%yasio14>0h-+;lWLR;o!6^UB1=HHd z#KtSS*7nEoIM2~JJY0Mhz2Q5;K2k$qZv;Xt5*#*Vhut;I!$%DGWbkGPj#(%hcq5=J?g~SB3 z0^USx_^%)dD{6&0Z*TeGzM*zo+olX(@G_ag-`(6SFCo<}QgfELl53vtZCv6PUdgq+ zdi92FnO3-4SlPgvSY(L`%DW0Q7+>8wtu0$s&r;%%qvO5#t+kUVUZa|mb_i?j?9=9v zqWxh>`qgY>l>`OWL8;_(9vPgO$4&oDEwzUPg`emuXe zIQn(@Y_@5{%HAA>vv*TFR57P2-_)B53N9=iUT%IirIS{sn$t%MTXNUVV^jsiYxKA0 zdIlY>Z(wqlC^s*I5%(yOitZA}T&gbB5ohaND_2-On^M)q-t4?W*$|KOB}ZTa~kkjN>1b z=YJoTkQegbTqLtaw0?5SGiJGzfV`NBv%_= zH#(t87puQ0#Ny9j5r0)F!Dj3wrtsMO-e6L~RZdFW;Gk@}Y}a51BYQwzT8a3Lv%X%| z04V0wmOc02*Sf?t?Y8VQ8eH`Ye5^PUQIn3pGO+MZHqBs*L3zn*Uv;#WRwnBvbKNJg z*3HeY-`DOnkptJtd-UXE0dq8m4G+dz_qGNxT(m`k2jjBHNeyG+29QRaKres?zqD!w z0Rw+rC>OlpafnwEL#pzK&s;9NjP2I4MS4A7d2C%L3)a14l|j&YZ@e;82%!pM9=}{U zkIITR*d5aMBdQ{u&C>5~2~E|W@%sF$XV%5OLgkwG;*1yY1tk2c2iH^h+v4SshO7z; zZpb1j6+^W8MFR-VrttLs&gMyYGqB=A*=rz_yfFgKhBvz}*G~YoTUrfx_lh0iIpQbi zh!uTV=UfuWENPw`Q1*?@tS|dYSF*xXE`tr?G#6a!a@E?$>SgDoUmNsI0FelFj9)4g z*9qNMAv@b@f~QX6xYk9P_HBUl`fMULDq|!6`q{+3FekTI#S4G0$oJkG)C&rXxi-wT zF6?;Wgg}L(cg*;Munz4P+tTZ15bQ_LsVDYYY72<{*Hxa@v98o_M5hCk_r(VO77MeoI=;y3P|SGtbBkJE_@e5s(JiXQK;WRvhoLq8 z)RKrfgvz55z%pN%l}37dFazU-gQhyg=C3Ex0)2^==wBe1iI0A?*8B3R~OvZ*F>EDLj?ZMFAcr9j?=;Ok+a<>uc%l zTUOR^_#NJssP+mV#&9@GR28-Fmo5n`PWOfyv$OXhjRVewu&Vc@ie>3Au zR!{^M-%rnYZXKU+bA3z+ym4W@f)_$rTQluLe*+`nM&Z|MiLZisc72dQtUSgDTs{anq;7>ZvcxAOfM6wpY zmejdTKl1=D1f6pj>_8|FAR`RStmPKS#{ihyRtv9s2}y9<$B^i_Vk^*h2HK6Sz=5J= zM>R7CaqFT_Dwfu+qel$q8?Ro3Q;Bu+D9&Wn0kT7{1q~Y!x@494xsEYY2f{q8Ly`Bd zXo2!ZDDajQEroX$WmQqcIJPu8;Y5|lQa6n9=G2)$S0z_u6c%c=O4lkz*+Dhtv54%e za#!hayb;a}0`16V=uFHpc!s@qOfk|7bHg4W$+GD+fg%-hsSFW~Ma}vYB-$+3B8VjX z6B{|o<|oHA<6KwW?0(M<5QiPq;j%Ac=Nv0&C#h@&=aWXJ(jvVypMRz}1#53qmL_ub z*gGwj_ELAh-jODY0ue1SYbGt6?Tf|L+eoRjX7^zwhYe&j=&=iMO|f=BfO^lWS!((N z5v^xdo3XC3Z9_+r;GT$yrig9!L=1f~?KyJEaPoX^bT0)9PCQvx9kZp5l4^NOfmK1& zrFg6=TOZV*<}T;4ibDdmpy{v1^SgR&t>q^kfki9qt(C=RSEagMS5w3D2 zPZ$I=RDQ@rxsY>kJz{kWh z1zwe!In|_}>M00U_A`Tw_Nz!`$Z&*Q_C3?|93Zy$^W7drKZ}P6eaep3?yoMHMsTu@ z7r0q)N_C~#j!D0YOu|TIA>+fky~=rEf^&(z*jf_+U!*aD~PP>%~{Jn^v1b@TWZ?7QW?l znK}#jg?a%4RNKwXV_ufh= zd(<3Cg%P}RC=W@=q2ohJWAK{xj}(PdQDz1B4G!x8g&I9J+vtkDqf*8pXAKM`*ZAtF-*u>WYR%* zzbX;WD5jq;u944$N5?S4>MFZ>CeMNiuo_2sEmpW91Ao@??^`3jFyUj5-NtrMg)i0J z)b#TSr0c5f+Snf4v+zQkktzcIz*+|eZh=tg5?ZJr%G1h#Cg`^M@k)^`gN)NJHdkix zkkks==1Qifyj_f$Ue-_y%|$v zk|=~~*lalHz}3TRefXFl%i~q7se+99H@dD^Tm`w3QbIGiAIv-Ly1I821x%POzVms{ zRW}B8G-Km+RH#`u;xU z;?%0z?@Y<^_jkmClZj~pmDwF*M_8kz6p4?_eovFD@Ld#yjRJ3dtk&ju(t^Fo6WN~3 z;%mzN1Y7;-ncRN$vaA=s4&XZ^=ZoMY@Zl_Fm*Q%r3)}>Khicg3;_MPQ8?O)MB+C{A zeet+xtrfk6nzMk8A0r{&Ucqwl$+YXK?s&izp%|lPv9PT)x5OTVze|S zurB$?C2Mvsf|89A4bL^70zgkPI-#P^IN-GVUO4E)-s)-D7H%lavlRs)Gb=}j0+btK z?j;WGvbP=9AMaioNNEsG%V~tMe~Ym0ow4VE-=YTg5D`a~Z-n?(SqUTFJR6sC^Hh6T z@)lH_I{I(3$>w_RT*(2Its|qpJq{WxD!bQX7cduSL5hK+G^ZARx+oMs^fq+RC9s;0 z1Ut#XS~EZs8fL;g_n3bD`LaBjWrlShRzxjkoD_<+{LbwJ=~bNbn&^ zIj`b>sYE<4;c|k81ygwIb5pZ>tNP1;q)#pRR7$d2)Tym#8?6B#V3UNb8$mogp96aR z;muX`UR@lMP~l52_XDXwOfQQ?&v_wuliJp$P#{|JhN5&_gB+RqP{}Fv@^&nxlFpc> zb{B%Y6AD5;PcLCJU7eF`YYZLZQtTlwL3n{D7FE-!HCBEv$df>GK@4cVL69rs0h7IGN*``7FqD&<&SzFw-qK`57Hf@89?kLM5l z2>+0R#-9yHF#|%x+bBr`a#ZuS2}4;0m0|h&Adal7mquCNNAaTbQk~}ZU3}nPyrrkY z)bkkF{2h3(XZJ+@ohj`yEeZ-G3(J8S4C-8;u5*rg5)0FX6<3ttc5ogw zyeLk@+wHLvW1b;hxI;&G+K9IX6YvdCY&(B!~R}g>-y`07>_0@aUEKp zc{YDjGaERSZJA&1q!i1>$cYRq66-hVx=iS6d!wvtT>6o4HaInG*$j(P2QK_9Zv<`l zqd>-OTw~XTXsl@K86BP*#VC8k$(1B<_=bP=zM4%X6&y1W^2X>%d}iAuf*DLkFBQ9t z5Ya@Bnv3ML*B9%B_0lF+sqbEOU}lHyWA&ofoRmOU^5Y)hm5Gmm$01gn1~0rBkQm3v zZ%?hLqnowKFH{Oku0qY7^I|#ixebuWW6D>-4TKFcQgLphe7(sv%zFoNGRBV63+IXKRFQpqe@r@A|v;#Pxvlu3NvHrJU|Ay(;gN$c>$P=+> z5L})bX=K2jC*d*ytgneY*4L6l711~rtMpdXqkmwn;Pz=MuU0uG}3q^F+e$j61t zhmz7eJhI1BPq01~$;1YFPnD5F;!@>`NI;T2P_pINruCS8dJjEK{I> zA*5F2dkc-T{*Fsm6D3_sI25p@dyn%4U@N8rKd5FFOe^5Bg7HUXVek`SA?`$Z`kNaodNxNzsPSM`nm-HiJOu7BjK~$4 zLS4d^djjbw5t}fBnzhhcL$DY!i19nzdoS^%IxwjkA8ubm6@4^T@3eab9M^R41k_Wi z5RV_LKB;r|*yQlVp3j}7D-YOm!61&f1{4CEl({b%v0075!5B17a}<2nY{r~)L#IPI zPQAmADp~qOYTOH(T@ZlTqK2axaDwQSfF%>c%e)32#I0{0BT(Q9b)ggE_w!pT_?@i^ zWH)yau-Fu(<%#wTtF9(Ttc?v>_PZi?W&F~|)@WY$+biePOZ);M7gPXfzJC1irX6oZ zRDd@nfXsYe{IZgRsz)IVRXU|!JX?$+PUyQld2KZSDeoZt-AIR{OXg1yyu_^jpHp&G z*q?58yRymUs)!|k46|%moX#sOcp?9;M>j0hHwUNB_9ne63oKr}A3DPFGipo(7|HJcQ;2fGuKdnG_%Q&AhGBry;>72;o%&P+x=uLQ@~_#N&cu3+R16Fp`c|@ zM!m=283TbUi&`JE*p3yncT8{8`~_6}G!9$I`QE-sjXUUfeO+%Pwv9O&H!&nQuRmwX zF@n=AX0(%xDmsX!71Q)%QkH#0@z!toTO@5ncxclDokF zj`_!bFXm{Al8WSjjg9(!>Asl@+N`*%G3q_Bej_f#)!zWn`)22|73p0dHiLKMk_)nO zF6)|NK%7X4NdLZ{OC^|~g793y*0;~4h*z!$RjFOD6c(Q<3wv1!2gd1`;~xV+Ps{on z>m+rwXZgBXBxtw(Sct>@XR+jgVZXxau+)S_9{C^%5Z%>ZT0NbB5VGceDpSLP29NU8 zXn}t*64+9;z%zc-vA=?@_gcKE!w&guUK_}(7_E8bW5MTBA?u?IkM<&%bXv7HS4qK( zFJlC7K$eM&5%b)=-<1ckJ*+mJl!V@yBZWF<|B55Ww0MJq^ zWabsH0G4gwC*${SbQZOo^swJq;O&ShAbV-^6k^8SwGatQ=P0~oWMFub``4j-5xh%X zS+SZ0{=y1@*E~(@955(0Ut~>={fSz!9e#)cl@4+0sQ?5d^ggoG(UCOdoB;iIk(}YP zRj{8|0e=Fz&mwodUx3LIy??uTo?CGBL^N@UD_jK@`tR?9d3m>`@}8Gjd++N>dEIkX z?U$a^zr1KthS9mK)QWplQ`zBGH0G=I@2@a1uPU>W!=(no1|NBAb2&{K=Ba-EKA0-a z(9-k|eqe!Tx&MdjN}Uz_wg~g)o+Ln1gtp|p%aS6R=sKL>wGph!$mOI|ULJ65!zo~iDm^U6V(k9ZgO%^t^*h==z>V5I5T1p$V-NL>~ezqnyw#sf(8wQaYSDn;F zBvvuKLS5AL-eKaZ*^{c|`O4SkMrnfTy8}h0*-As;>e2Acj<%l2m#;jL;G%4pMcE>| zw)`7}w@z5m%+KrptJ~!df|ZpwdcB1*zlNXNAoNCW3ss2dYShiS^h;!}HxBE2{R}J> zSD4PP-0XBNc^D97N-?jnS>&1+y$y3&giE9(uYGn_0&{9@qL5FA=}d$(s+`US#7<}A zuL)KWwb+^5%o$@*#O|k_Fc3V)TS0|7fkGU5S&R9{pkY z32l{05k75&TxFwQgD6im2x>dUIa2%HWjGV!ajF*P`oB3+=zVQGOS`EiK6 z!7@L`0PGX5enX=|11Hv@!Kq107NQ?8>(!LZ7mrgIVx|MYi&USfKUC#B*0BjI8cxWA zpef0k-FvDef-eygO0XaWuRjb@r^t(90*z&hm4I?R0rAGsn56|}6-BRvPjsQCl4=T< z@k*=7q$qH4hc9fQjap5B+#_b@)=-Z1#0X@~a#iOW*CLA6cOfg(^g!cL+yHTNA|N_oYur}{Dr>q;_$*%jrFv6Y;369$Ur7bzROjarL{)52VzG)({d$XN&NUK`Eh@kRUUJ_jltQJqA+4n z%ynsVYxI}$%r(&mAS9%TX`ICJk=>D)+yk~g19!Pj+RZAxsDHdjm}vojmiE(SY2hWS zvEPFVsruI^iyFE~heB0RttJ>8RC^$^wcp82`b}5l8oJv`#^@p#ay^>sWURlVEV~t4 z1#%Uxb`{RC)3N!JP`*uU8Q}JeBd@q{jnt!7gO1ucV^`kyYeo=K#+exIlLgVY9u;1v zWJdCIqc~wDS`uEG3lj(MHFC3v{-Szq85_2!oJKN!j%;ziQlDsB;!?X)TfM4+sq%? zo9qu?C#Q!hbF$tR$=o2N8^d!vuPT0p#VPwaED}$Ms%PxTZh&eC;!&MIPYN=fb4%9o z`3C0#tbzyC09zq%k44qw?RCQM9!Ka+@NvZzdM2&UuCe1GqCyW%13ftz0n60}6*9$k zURNbT&lc>QwTr^xPI({j_3}zM26WJiJ-}c(PSlD(gTqa88{-WJqS9K;rz{}w^x+x0)Q5NI^)@0U93YgOSF9FZ?O`j> zg@9HF1k42V4^j!&hBE`bvA3=yvMp<}DFF|b@*p|4X-z`SJ#*_`18-kz{K6cbER2_A^X%l&8L-%yBP=M6Q&_r=&+9#z}`EwWpljq$s^=P(};)Z&(&G5DZ zz_DwKX^R@ejY(NI>1Y7#dBp2d5U;!_T8&w0TfCeEWLL~k$1X@Wr@jnuAm+`7UF zU0BCa<52Rp05-TNZjK2qlAJv=PLZ4D7Op9jjJmpW=;@hoSe%wL?=o)wd8XvKwE%gv zKA53Kt1Am!VbvOQ43wK90kAN-+&PS$H5NF;$~7hiv)4v#_6%It*rbQL=y8nY6i1Z% z3y>(u@rZAONp>sMs?49wr`3e^3RFR%knoNNu}GQp0~cx|e=I(SAkr2PnRs=p8{(vH zs`{xw&a{%bki;=^X91R^l%)|FutTog9JLsYe-|6JOLLc(7{27x`1ochz*of$oMMiG z7+E*3&dZ^6QTd+pq=VxjRi+5&40!WZ60T!8avl(&{Xgd3qx9&B={>=Yu%up$QajCO zIBzevMtekMK4;h^k(1W~;aU*S8V2C7WVxzNrjED&(yk{#@!=L~kavJ7tVK!(AhIEO zrd%^0P=uV52>g;3DyGX_OP3k0CFnHWnwlwXG=J3Mc3K%*#x=yp0sP9em0OpmngY&u?Io&c+szLH-U{oB# zjnf+QDYl(1EHJL;^M`K^1~$7#66nerZts9USw8k2Nxs@{<#2lfuI-Z$6ELmrknrg$ zA$x>t33k4Scl4M#495>Uv!5@BdaW#!g@@M=x_P;%cUMUrV({VNlgYFD*!YM8>v4g&_Mi_n4emkdV0@NG%WG5QFe) z(P-hAuo4O=$6TN0N;JRuguET{J;I$ZrW|?I>y0#>N`bAS-BE92P^ryt%?h@l&uD>f z2%BRIjeGWpRZ@zWSV0inxP&hd((hFiLpU^XU#b`T(g1T!orKd<15#sxYvTnE#`Ddw z;g?web2r7cd2{6;TNs`?_UbtiHItnCP(hwh&AYKEv_<8lRb}X(Bn%#+m=e|ocmtQq z6cL<+dK3_9M)nZykn8tJXjWClW0P2|EXL{=TXorfbLz66orI=3DrnF+2+$Q;WX_RR zzD^hia3_!|AQe@XI(sLI3P8tY2W(J<@wxm?&g%~Gb@QZoLDuY%e7_!Q9%o=sz9TCI zn$M*yZ)J=W^YY2eWF_*^3+mJm+GgZ?Xus`2Bd~36->(vYSoVdGpm4&S% zCDC=m++t9Kf-zWfPEvn7l52BhGDu9Fv!Im z8K9aEa$f*J{P$sbNEj9xI4#4hKPk-D%ZT3mct1Y)Bq+M#FKsKan2HUd-#t!$dPuuB zrX3@o(Y!JScq-_635jxt_%OsbS=ug(@lv*8n`}jOlb4XAlRvl?{Kdb-wE!o&J1-~; z=uw(Mp|~BbprFe!Rd%UkHm~L{2|Syic#hWLHCU*i?zX1(!G_O0_WtuFc%~Hs2ZTv^ z(Ac(gz!nXp0NH82FVsU#@&iZo_2EOW zt6WX-4=i~T`u5kO*{zN4z5$>(~b%QpooOg7dl@K^)OVa*l>ZQao%)H)qt7jM_>0r33Zkqhu9Ab={1@v8SA z;9zZUQdP?Fav;uR9MG7E4)XDH(~oEBdG&%(BdTWh5^nZQXBQWo`oO%fX7f+h&F)(D zr=|KL7YygnSsipV_QJ_{WXUxkIat3C?ZF?f75mCD*_u9wai{t`mrqyCrDdK;{2Hw# z$8Yh=ib%CTS`ZZy7zC?LqVlk1BcC0+ymm=NRP}R#kQ?)Sl}EY{pUM^nTxXeo)0O#N zZb0t!ZF7=Ps?7RckUfT8Tk)eZqpxk0{EAEh{K#13tzSKWyQNn*wk&jjUSFTTj_k9A zitzIrCQ{yu`nH8}ip}eSDL+E{lg;mTRdZdAwIe zdh5hFo}a&f;$Uzvy3S+mF@Eu~H%}a&ipD*Dtn$mv>ky{M%^fzo-!4c8mDVBbNmIP; z^)%?*`hhp*Pb2Y*@r9!^31(NUqoFC1{qB+4BIo==wX^Zaa}Q2vs=i?(KgFz7R=VnU zlqIypsUTlDd-KVgWTt7V@1=k{5-8FZ3;2w@}2$Qs)<~ymsp6vvnE{AR&Tw(78DmoN zyIdKpt5bZeA?)2x?&`DhS}03CD4ns$O6@niB?0~fYW`rQAcu7o`nInyTN%R=P#V~d ziOy;)9Xv>(5mUt3D!y5E#@<*Ke#AI=d(=fKY;3rKnBwaSlJrdXqM894dBcoZ@YO1c zq0A4}LBZ=>7(Agp+a|UkvHqFGpi_ha`$2!3xCT_~pDzO$F0AVh8kcz_CD1f?Dhy-- z9cc@gI_G!O`s>g@M~YpPG9Sv=MJQBQTwB11c$5S4L$^N*B}gY|!5W)^wM1JTyMaV? zPDp|gDJI*Q^C*=1vM7&s2XEN!FsL0xr36SM&&?*-y9ys3mTU5RMf*J(Oz1h}$}aFn z$^tm-``M#)k~pAHBrwZc&ja7X{Fp~y?SlZyd;>98OMzVNo=8X-Abl*%gO^L z818H2Ijzw1B0;!S*%ty~`MI5pLDsV^c`6ui6uNd%u{~ldG@0;R-$Wz48H`|IqWp;& zL|Q@yvD2KE%A*9FR>YMM|jqHuM&FXe@no)`^&K4qt&;&Ch>c!{^da5a5> zWd7M2V=Zs*i2V0hJE}L^#C;ZFR>o66vUio|8kFHO7=KkL$_953L+rBqFU7KyT5HjE zf#)r)%>pXJC}3#9PtulRX-dF$gq|sG(TTmljGv#?GSnc(eK;~;hfubN$9TPG5p_-_ zEnL9&u9LPV7hqxby!I&UA|pL!`{IXLp^GBxaX?}+yRP)zC#oc!&6Ca2#VNjn@zR)! zmbUwqWjQ?xpDuEIA~%HybYjGF)-NHb1v2Iakw~1uhZ_ z$=+J0JGGR^fLt8_Xhqo#pxhY~X6yU(_`Dix$aP1j(K_KYrdy7rv&}D30%;YHK0_RjmB4 zfVn&bj^tXo0$1)mk*IM1t>*Hm7?je*31@Ett?vg?4PpCa6&V}TJyR-pRijbYvzAyU zui&MK39tdO5L}EIfGpDLE-0N_IBSCtala#*3PH6`i{E;Wm8CK=E2=70+yUl?IvKKI zSWgqLc?6cKNlh+DnM#*k7l_Vj?H7WNS)wfKSU=Ad$L9a1C#FC)y`u(c7PYt%(xX*Yelm10?#t`H~`ToE1~*H#D-#^DY; zawU~)7nQta%i{pxo=pZtlVo}0po&Lx--jm^vr0JdxRYNI0o4O;)I=QsiZzW2sZ&tO zKUa{`Go^~piK1yxCVjxpL)-beD$$%SCac(3b>i5&4P_JLNd=jY*+5^c^AS+eWYcHl zPn%Ye(1RXX79oaF(Y50U36zgk?YTLviIu`;QR8~~Cco&*6MK;N=^Su=4;-=zyksd`6V4Ry{mQfhN*xMM-?lH!`u)xt*@RS3BwLIHg_(?}@s9HN z@IZ1!V|3q&w1_b%PK)vqE0pHAVvP`@z9QCwQGDnfSG=!^#x?L%QL;xQHTG~AmT&B~ z%oT)hbwyB7kl-CeY4tMKmSA{eHI4rSNR-aTEh&~gAme9XYn`*F+qDO-!6LM>oq{<)-r=u{OZkZ1+b_ej7mmsT-f<90VvtzberbHDCEgtH! zh6t4l5(46@s(uvhk0e^WO|dT*agddO+*X=0PFZ&m)0`yy30K0lPB6BaBH%LD6f5F@ ze)kwK9*bMKK2f?0pvb4+Jp_ICco%0CezXMAj0A3m$a<_`vZz zXi#i!z#O9m<~Jr6fWffehh<1HqT@_pOoR+{J;r<)h>?0xL=VKD98!V7`AZq}$7pSA zJdQq)3<8mgH#pmj0UC^h)*pkjc z?WSVR;cLncK~%-siTI&GMjmz(81VdRs-!fJL@o~BxAC9Of*vW`(Xsvjr|sQ!;;&PQ zEagm=wLYivM(Qch?jEXtW;B7gcU?Zo87+P`-t_p(C!Cb{tO>`FV>jA_*WmA;eP#(7 z&kG4>o${aXj~&lQztfFkkPc3IT9G*9+9n&-Ly{n<0AORVsYpO zsnl;(V>V}yA}^CoROq{h>p$f|T@K(F5{7~F7BBcc14^GFzBRK5auYQMW>V?wF)PN* ze{t4XFV_Pgz5sU@mBps6u_D%Hz?@}K&Fm)R1i=KU#Jq?Xnyeq;HA8@nOr`TuJ#Fg1 z5*2I;-if5JW2>6OI((y`OL_{ zy@4ZU^E*xKA@F26yAo{9u{*ToXDMKNM8_tk>X7$c> z>Zh3w+>z&`=bT`qm4`AlWhK>iYrTG4e1(Du+-p+qOK((Gul;P11DX%}uJn+5HMXodLN}zK)Y;g31pmP@U7~2<&mIM}1{tsAUg6`!#}2{=TW$0{Y~VhgIVjOTsu-jTVy zATQ{k6n*v-lb+SqU7rxbHstu7;xnCyHVD^AC3BW%jGd~}ol*=6ha9CDmVSuT?EVn8 ze^|u}4GC}t`L+bHbZQh-(FEeWW`CfkK=O~sY=msTM{_viB2makSL!jYO`w*in{y6- zs*}K-#&LQhS7tX?$2n3gNJ#A55r3lT+7C?N;g6RdM(}!oj zyo@3#)?{TQ;7qV_$q~XWJxJb0{bN_;|34N3k(-q{Zy7I0IT?41)wn-ovCu8QMR#He71K+4 zc|@ZLiLLPbptu^7!nk~V`w*hC8r`vlQGQ1qCOG7Nu*6iELeNSS+@oVH87~IZ9zt}a zRn_y_JswIbqTrT=S^}Q>maWeD_RP`sH@crb%1_6KRn0oKnhwcB6CE)>p(QCrcsMm- z!430l4oH;+UElmr{1%oIA|Q)3B^yEygps%Jyq|$5FUvf0&~)acOMWR;RN4kNeh<#N z;98h-dQXdFY(ywplu+By6Q?v{V+O}9V9B#(rK>FQgGiu7(a$3yI+b#|4}N^yd>%P) zIeca|Lr`_zw!5vQZn<5KOl zlcDrQjiFpgv*duq-y60fpK<6 zWkkbf|6nLeVMX>~CXFn4LNyu8n|vWO_NT?6ZS zw#Fald;!Xa{3$gcO*^t`4GdEwokQAA782lbb`LqQDqUR}aIa~vS4zu(+y*0nxn{?D z=#s5^tHpVLo)B0;1h}*WQQ}E3!}X-ANO_od(0)qgfKx^y)eiE{yg>l&)w@Ff|mspB%Zlg=YYcb6iPd! zWMA(@@%ck70e4!ramDrtJUEQwt*ueB!5c4FW%G5x>*EBfam)(#;($b*kT-|)8fTPz zKbFNSSG73qi(CQE;XG1{ko>iI zUv05VE*k*pMtgSn9fK5F{Oov7vEKqczf-w9yP^J3N{aby;@vK|lHu%EJ-41un%=07 zDY99kHgK?J%8&Y*z?N1Y!5dg~T?ZLpT8ob`bjaFE_2Rj`0c9IX0$mMsFa<#t@BagM z8x{(ODwfW-^vpe^#S*sRp@294P2yt8`NBt?uBhDWN~EG*47@^#KHd zl?|&R!CWGRx#0ZOozcPrQic<{5_0h?K^|1sfRr(yg=>MXIt~84dhj-#A(cXHO!$I| zQO?VlRLev82Q%Z=kR7NK`aZ=5_@$NzexAW>rQxOeBB@0rN{3FUC5Cs}y~@kJ+*nT@Z~q;g&k;KTLjEmhaJ6f)DL&j^Ap+4AT5@Rz7>iNnka zeSql>SIb(0hE)GHUcPqFLD#B?tM%*p6t$-J=D?iGeOkJQ>S1~DRi9`xn^eNJmv70D zx~_4kODE$2<3g*@s@fg}gli*{kG=P(tNuT-xV%kh?lXHaZx2eDO(s&SC{IN`~E4hT7*)-JG5 zL=igcc@2IWd4S8)_|(s0nPH~D4=Z8Nn%8&$LPIQuy|FFoUJ*&#F13A&RK)_X$q6En z7y~!%W&xfp1hDZ~Rq3okvYh>NSo{*fxG%IHm8n$MsFW%FU^I(|ZeRgl5CrUvos-Yj z*S5%iq3|#V0^=B7`(r(eFRh!!wlX1Wvc&EELXKY0wc~;^AyF|AB%JG`p?>qk+c-gd zMSVws@4LpBH-M)A0Z3UfE84co2pH~O3&D?0 zfHsI8@Nl3LwFolt@tfWAqw#xLN}Y7pVnM_Fh^^@wmC=D7fJ@%swPnW>vhTdoC|xgy zwoA1H>0}sYNa}uYa<>hO-|uq>|Ky8IqCSE%X2bCnDGd*=_IhFRs;DJVMC!H$^`j#Z zh@W-S%_=1T^hvqL?qk19HUnC<+t=(@-x}_bA=%PL>aNy<0WgF?iSU_}r`3}9IUges&sBq-44#|_*# zP*=wja>P?_j)jINqmjYYT6zg95OkAcy+$d7?b}WN6 zCTRAP;jIbaR9@i?Z!x}Cy2H8(L+GIg^oyerh!d<6{DWD%1g4|GRWq5CYY2)W$szz5 znEA9lQw_pP=$6S0;#6q>DD0g_LBTwq%*xJ(QbZ825Nt>)|Fln(P7Nx}iVQ29T#$>}$}ky_68Sy~mp=)xx*EBS zB3Rme^}NH$i3Con8CtV@u8@M&8bt)N19O5DJ!x{eL|egZMm-b^cU(*-Km<2{i#TV2 ze_DOWIsxlqCLRf$_2@bkouIncSrjrI%;5pxa8-P4^L9m&HesYnMZsQXvg5@yk!jRq z15(=e{FTh$O_Yx$I=pXPx@qTh&janw`%NX35JTf=P77y{*15cjIES);8IqNi-N0Ka-w`maqQhJ-z>Dda}czX|COb%6Y z;-ydIBH2KU9-3DrLEYaZhwywH?#N%a;lm>%7ads8pb|Nu3?(qPXXw#QG7Yn%dX|xD zdC^f+kQ)a@ho0dmwa<2x;WQRY%a7>m#ZdN5x9KClm(c9ogMD$2s7z>cJh@`+)MRw-uJut7mMui z0Pf9wA18{O-#~7_v^Glfd{>yD^iN#|{z6h{Fr6L~S$~!okqmP$Y1_NcXT~5-^89C8 zwHITx3;K#Eua`asjY*w6GXGA#aReaBn?B!2swT3~s$us%{Bybjkv^x|-cK1upHNaJ zux2@2_^wI3ab*3H2iG&btYR>`31>X`+5DpRekXEk@J(lO}g{1cHdm{r?>ttakmqyV$5jIWitoq zOUj<2B7Qx~I}sfLFCZMlU|A*6U|>=lf#q*7^UunHDRy23Q|_JDw?PO)9`nipxPOYr zVn}Qi1r{b0(`+saReM_NkAq>nVi0RtD6kPv&ea>JFdvnwo#vDjL0U>YeO@AMU3y>T z7dY)|4Hb230Z4aX`FT5ngX_J5suasDNGT@<>qw(N6^u@COYZNfgbVN1$zJN&(ib88 zr{NJ)rg@ODvH-U}>bLPUjW_E-Mq>hdu>cs2MaF(~I2mQiS)O0i^3;$@Z^E3^V3T6{ z+0!Py7|Yve+ZqeS83_k=Bh>i4XhU)u_J_c*=QYCZt&}D^k2ZhUMD%_Ve7P}>2pv2{ z>}$i#urP$<3eRTnr`4!6&<}h76$~xl?rKbI%IAP$3-m}JYGX15+{7AFG)xi|%rk!! z{G3R8v?#DgSRY2QeG>0s`g^T-XHG#Z?juindva{^0pd&NH;fFAlhrcUukR)1XrJV` zQ~cVw#TnGEC`|)c@Wfyas$j5T9`9rI_!FaRF_fTG2&d9}LQx%gE5MfdNGkCUndMY6 znLpedUXyKI8laWOpIh+2e@UypJddN0<=jG5CdlAu_)#kML8E(RYD!E}G0~wK0p$X7=TyXob8o}+^gdgS z!+j`BQWjX>RPY4~vrfnML1M6pg=_3log)`rKAz{#QN%~3TaL@I*M%*-G@o(vaE#FM zm_37k*gCLO_7j&344iOT!g6U9o}fo!G!5i+D=;%oIdX?}(h8@~{!6B}JAl|XH~T&%52l9pn!rsv%4SvKyF@lQeEUe@z$!Ou9$B~!KwKH zImviT5yh58Qb3*Wp2GGX{G6GD3j3?$ZMw|r{P`z?&-aOQmBk808XdC0jWGQBaP|G1 zuHt+Sgeqy4=;p~p;JbhB{Whv^-CAQ^@Ym!(HDmImfS1iG&2t^nIZtn1e%KEz!!7&@ z${|57(vY;~oK4Sp^N}mS&VLl+%oo%LWU-UCg ziSpJ{>Uk&}z-Q=>2T(d02+(vIs`-FQolay*Oa5~Z>x&`UTr-W_^w~9ffS$$dhZK!I zM@&;4GWk!l&KTrO$p(=C$ z`T0_=uwTc&sMxa+@IXCSmzJP4v9g|B3$mjp@qv^h<3~P&_4=eo=Jebi|CCnA{^AMr z3rlRJGe*VGi#tdyuku}o zl-cRYn&X^IsZd}EODoC^jtWZvqpzp0kWqQ-I^D8(zGeQ0<=fLDOqUM&tqClr;vX%4 zNPwa<4CwSP-%S6Kzr9bd{*dAULwf9&r5ofGQ)g3f2qd+FP0;hY@#ytp$ERCD{RdCd zIt@W>06Xp+SM2&>S?>m!zXE{U57mRCB&mlSSL$qlSB;{&DDw zm+9x@Y2pcbd|@5SLLO!G7EXlVJSt91hieq?Sa?AyZ%1WzdO-JL)r+hy$k(>XekuQX zW!+pYH2*i&%|f!&t|LMZsO2ixUKkU$HVeEG7Yy9)+%ceR^c|vh6Ng z1XIr1$Fh@#m?IKF@`v8TK9xT9PJ2os0{MJl{L76Hi>iYSm0+X>H)&W3dn={xWecFV zC=Mp@_Ne>Co&`SlLJNiG@jmE)u|oGZyZ4r5w|V)Hjkv&O%bAH4p`UC&Fb&~l5mdWS zvI7W8s)#mLI)|EL2dI9p@|@c^rrJQ-x@SbvwW$G2D+8x-j?DNsGs)*&?ntBA2d^xX zmrWl{ySqsO`e8xn@r+depesvYrFgXt#iR#E>v#H~;2ZUXvVhdpkrC78a2zj6W*AOl z3k$y8AQQ7UZ=Uzykw)o}K{6rL=Ek9xAWHDJ&Yw_3cW z7gmWwD;=so(?VWOVp& zqOexI?sHimTT64DD>Do|JGl&~3hCZ-b1nr0dgB%mdgj`jKF%358TN5B1y#l>Rg&z%hG4kwrZ{t&0Q@Ef$)$Fqpp;`-n7&}wpOus4=V z6KX6KE~ixn7JRUm1~kVAG;Cb{0KCZ?6Bh`^tSUB)RwAV0J#|k@@SZAhI{)x^Asz%9 zf?yjP4@=wg<5;$d9qfStHYAdO9udK_Z*+=(T&wchy&PGsfekP3OMzt@#~*1up61Hg zq>BAP-eb$5a$pKY6)eui(mV7ZHXDK>e~~HaP!9vf2IS*Hm9Mg}JQ@mjWs>GMr>{Ad zf+PY)@LVm47iFX?%UzEF+y#%f>oy{?rr}male}&(P_c4~(^05;K&GY?iFQfeR3$U2 z%q=7XEp?Q!_?KmDS;X+okvNu{GQbo#nIkvS#)$OU^1RrU$1Aqyr?@pi{DTHx;K1qc z>0!gP)OKqgGI?(!cGm~%m2e6<+Tpc~EGCy>T7=Qa5P{b7umqNdP3a+-5}sKmICX+J zIf=4_y719}m6u=TgA~6-C-rc^R&V_)eU|Sjizh2Jl|xm<1)K!F5$FP@;svK@mwgS(T4?8I=tv*r3w{A~^z zAjYIY=tjke_e1(alYT(SW6N#n29eYdA^L`<{{r!4~iM9w%kuL?g`k5(gd_Omu2$OShTf3!5>{S@7oPZOh9bVJCUEQ*3qqZY>) zvJdhrd02!ob!gr|S9 zX3fj|KJjH$3gqRNJLD^S*$oJQ_QLA&v7U)Mlys9UTqM#_-q5L8xV{)PYR};wUN-%R zf>H+ni-UQAxeE?1ufub|SOJRakOQCjcqzt`Nyb#?Y0jJfa(A@WMBr73 zJFto&NZ&?4jN(;26Zq?OG^r78s!^eFXZ#3NV=+KgBcL5zmPQ(nvg@lVSO|b!w*NCR z6v;931s>3g+T{rg+;^8#c^Rf)wAAS0X_kAXV2m(}c|h?xdbtM~seOYM!Qz~(jn+uM zA6RQaBM{!cG+q~l(AS&FSHhu1tI-99c(-*msv{0baL7mct zYctgCG3t?>% z$he(x)<-K3Re!nv~X|T ztp^yg6&TTC@~9Vl6l~6mCqJca3exvfZ(`GPE#v9iGfTZ={8U^k&!*v|zP<2_rJ4(h z$@hukZ#JP%V*Pjer-{ai2%dF$RG(su6wjUMp!i365nl!reG<`{wc9Wgz|yyRtsQKT zMDv#OUVw>V@z%9^x&E&0BH<+o;^>}@E)yj@A+(-`2Up3cAt(0T&P0izZwa>XK^_kV zL68_2TswWfXZLC1umo;H(5LNp5siE%Y)=pe|cocb!FH|CA2YjDY-QL6mRN#lA zfwskfq#9Yw)2E6t$-uA{kmLdEh6`3UR55MpiYlEFzCoHrg(pzdP#h@^XisA>+;-{9IXZek0Y5n$YV=5pSN1 zx1e2?jw;kTH+;;+;Y;U85L>1)1o?`afUD}tVVkrqWx?EDUCdN|c2evUBx+iAaC-KY zb~!uWiNB(_h1u(vU&K+lay-$}vBntEi4d(II=RlXEB9^ulSHzcC7F1VjlUd&F($0S zp~)1_{Q2eh`uz3t)$C`RaiQuw{{u`F(tCUB($8Odu=qjIhD*yWa-#PW-$=t9&x!PJ zSO2CcPJ3pOoj&!C`JdnVcbT-zmG_EQk4GnZhi9fpeyJP@4)^oe=6EBP4+7Ebn{Hnm z&PZQVc`-;ra0rm=ZC*83KYMIzm8?=WM{q=MqeUPpYHVCCe5WfUuc{0XCz9i0VY%SYw6`RV>KhTZ!-pz0DIx@uzb^GNph$ z<5nWsOCuY3hT%Y0K|qmwh!T(bg5|NCBXPlujwRgXN)?f@EN zVCcar?wlfzoLV*xLwGF|6TtZuxQ9-aB$U!bACx^(xs5qhnMzow=7-T`0NhhWJHAC0 zkI2U8?|>PCsmHw%uStCvmm~w{51MUxsr7A*ysE4{q#`EI9oi!%Vh-A7(*gx~cv|nd zqL53sgKgpg+1?6e(2CpR!=vR4+<+y4-Nw>QS0SJ(B`I_9`IB zC?5k@#_!br;3zIc^itmUg<1sOq{U=rff0#Y2@eIk+~KZp#xY;XRBvzxm+ zY)pL`a>Jv{z2NonP1v4U*j~y3|^GbqFdM2>? z*&{Sb77b@eWy!#|S@A5o8j`I%iW0(C7LSn z31Cd6uSXrF6KFu1++;Ek_o#1I^4VO0%*KQf*gN$kE!6?ha>Cu6koG<1hKQ$I`b_b8 zQ|P6&p(P~cppGslRfkj%GYlM2>p`gA8OT>uZzWEp-*%K!`BZScr{QlXz$aPnZSo3Z+ZImHDY z0S1&;^aAsSFPf2Uxe`6~$0IiS`c4E5GAm)E%>x8_p>502#luIRhmw{-iylo(1skzj zUr!}Y9dls}CZ1aEL8+Up&~Vh09M~=uBJ?T7ew2X&@*cl}M}rlHD!LM+C}blNubw!+ zmH`=oWz08Kshj9H{b0EJqD%(ctKkK?=v#$ULY|az#~MD{l;I(XV|% zG!X~nd=(#8`T44E^AC6U!vo{Kn#5T?zm5d;CbDru;l5gYb3W?E3}3u^jdQ z+qDOmeQrI?2PCM6%0o}dSZ+*kl4@tCWlJB0KgwdyI?^yn%dyGIiicHIDKa;{ZQ|Ts zjzb<~iRRgI*il%7>Tr5$+9JB4f(}(Pe(orm{Xi`UDTFpv9H(&zp)0QcgZT$IC?f9( z=}_8`^H$6V9$re-q^Jl71*x?kn15xDi~@YmB0d^?e$1FZ`u6Fo3E(fR2hQwrMu9Th zm=~B8^kwgwF8m1CxJ9D1iZba};W97z(9L)kRIJvTL>S=no9t#RIt=au@%s zp+PFFZ};_t&GBOXNT}IS&n0c~M)^yoe98Q@umAkm1kxT^tbha6J??2C!_!XfXZ3ks0ZP}zpi4(=IeEIfFTU>oV3(k#2WUR5aESwa#$N=ZU@Cc{BFPxDce3oKnM_PSh=zQ@+_w21R{x76}O zKA8X&Jwr6^FTOn{YRB~E5rDlvUpVo^PwGyMCYGxzQdL(4Zqs5*fE@rqXsv3cA@W8t>tvA2fczUy4j?U^ zTwas*P1|ogU7ozCQ;y-m{PP*(&RyO zxnU(8eYOm2Vxw=xyCR|IjYu5m3VUu}NWMHBC|&GP>L=EiY$CN0v+xPn;BCx<>C1bL zbl*lJara`;gwyFS5(k~31>M-A&_e)1y>D9pPRz>aQE1KMpi||%mVmCwyCx#LM<=-3 zi)V45#*Z)uqwsilXQ9-J#=#*6lBfOQ5w%U^oF^j8@n$Uy>dJ#5im>ie6=XWx<03RA zcI>%W9+ISCxgFSvW0Ebs^P#EOy$r&s0D-ujM|YNcz_h=d@_)XsFxGm`);AX#2$RNw1xUW`-{2kLB z#7Ivt<;6ftm7IzyLX{m+xTR&qoXlR!%6by-CXZXvThL0+m8@-u;-6#?Y6-AVaTrI3 zF$+r=rhFHUc_lO@&cnnf6J~|{wiE0yU5+JAJ(`{_vy=18{3X>sV30OSFRb6FxWt3b zK2Q%uA?W=Qyj`A^RNzB_{iROyQTzisP)JI`yiT)UvZ!Zn8GT#+-k2>j?foV*e$0QJ zWT$(WYf=+k*#d_;9{~AFN*9jlmt)E#464eOloVqtQVNlZqB$MJIII7Teoe1VJEBHW zM5=ajTqswR@&tKxZE&n#PU`X~#SqcF4kC2VlMd73^eu7MC3;74qLAJV_y8m&J=EpPqm>*&AEKe_dv{$u{1hK~ISjm7@ctPJ_D=0Ew5 zmj8V^LFv3uyR-$|J1)qb%uuud1CweY?dKNh_reL7A8=0dy1cpHK;PpT%=ygRI?w5! zovmNy*7S0PPFLf!*=er*=_RB8asJDHF#nJ9|99)tr*pXbi^KW0vUY2Q~XD??w|+&Q#F5ekE17W`MOw2a3Xf#t0U8+!m$JJ?^HWxt>M5 z#87TQ-M0I!mBQ8pTuOC&7&1}QB}`{_ekYPX>aM`^52)WmMDZG=rj*>}M#X=)W&$yk zEUuY^P1?NWk9)RYmS1}vA(vZy?>&2R;*v3RRH!7y70ePAD2G#(Gk5v`YsH|GfYBDm z9Y7!o{_@`1t8}k$mVfz%XA%_n_P+C}cz;BO=ohv~jDc40T*6Yu8byZTwt+gU(ZsMe z_2{1#57D7{;(q!vA!`;| z#qnSY&bx;^(|pfmqIyrWcLHpcieacHUWqEHDDu-X2tnnQ;(i9w1_CSnu?msu?Xcpu zTINcN>1Zs(_*X+ISLvvx;vs|D$zUb`W=dFE@zTZw849=sHIjO*V%*Lk{e~>%_g6?s zCe*BFC`6G+vWPx*IaL0$eNF2F?wI#x+ow<*u&-20yr#UlvT0hCac>`TZP~wK#T>Fb z!hyfOUOBySUXcp%55K)mfDJCPI`9+@Q?0Zz$u%v?7wTk+LHWgv^^|bYEbyrAUcEx> z;CU5TA%%A0+z+N<31QqK83JA(>yz6Xz<1HB?wkYgpA03bQKMb~8wq23b3*LT!EBtk zg0HC-R9YMO`Q)hJCbWu$(-d4ob!6DnsA4~bN;)sqZ`LNs^z)8Pr9fcTQ=D5vmTdA3`C1@P{!D(Y0|ZmWYksY|xi zLp9j5xsBKiRtXAXH@p;^Ho3+=DbQjyZrF59DeqDgNKfqO8&nj_sR`joenC_t=o#>J zUHC*Au=w;AOELG67G*+v?i%XSN5$>p5mxE?-gj`1DT^9W;O=)HD2b$wKtOM10<{H} zD9>yWag5LU@&)$aS|i$X!@XDyTJnHk7R`U{OJq zEM7ov>e#UIp1+{4kIb`y#!};J0#ks`N{gbU3jE19D0M@S?>%%HpD@M^n(+ zNFn!1-+~2mz5B{if0b_QOooe-*9f=5DsaWw=LMo6w%IEYY|)Z=kyW}mP&TKZbM0b< z0VH6g86KSlFkn?UVNnfP9mff0B|_JTqd)l}{%_F`j5obiE6d|-E#-1NG zvMH?X(GPcdlr0rqHgSwq!hq72em53TDEisFW?*8WA0*&ce`;cNC~WC7hw9l@(97or zE=sT(NF5Vhl}dh~Fe;E_{je+RH3RNYd8^08jRQTmBqFEEhJkF}I);kuIz9Y?GJlCb z+`+w>Q7ME{&K#)8`xO1TGj3(9%R&H51wJ6uG5yZ*A=;Oa44qZH@7X#Zo=0C5>$g#L zltc&UkXSa`D6__!w=fpO2@VP~!43GsYH?R4hjrws_zv$KzBJEU({a+TG*_ERvt}k9 z)vWb7yp&L$!zZt>8~SXIKHF7&tXD7guU=o!btc;up+9?p(1?iqnCb+g@Z>6W$Jw3k zSto6|{TnN_56BVXQ@VRywNy~)DvfLE{sBjGD;4c5#z*VKP+)V*M+J{yjAEZhH^wj@MdS?H zB~@!@)k^(~AMY_sCI((Bk;RrC$qjG)BmCD4Wo@t`T1B#a5ePokjn( zzfYpCkUKt(0l^<+;rAGK2rWF@Dz?}p`}glG2~;#q$j&y*SurVP7i6>1=@=7hDRAv+De`12rk4W{-2lAjqk*Yx`5z91ab!ubt0Zo z?lj7qpp*ChI)UhhcE&IFMEsltreL zqE%6nuy4tuSwlN;N)9sA;$_gdZxm#XZ2*~Dfgi(SM9$@*;vhgs2}HfA%R_+h8vR&y zfxXaQT;l3c-$zAYmB8$^Wj!z=St?r-uW?pBj&}|uj`4Ugb|YXfG}-(hFp3ic{337~ zs`@xgWlCUHKX0m#4LyKGKqy!%nD^<^cAhDp9hVKJ-&Yrt1>pmzvZDyClQhtRvVJb& zrrNG~XUP^_DmXz>I&6+VJ*hBm+vZYM0X|V=`ieLxJq|wwz^DV<(wde_Z%q!Ts@{NJZs*?MK6?zaO@-CEyTy0hw2c6Q}K~>s#mx` z_Oijmv}ceLx-#@!-DhTPFtr%3j)T<@oXXN%?3wwgH4+yg^bCUI;sC`f_xkGLNmaL4 z8Lp!_$Uwn(85*-+6f{k$5BPC(URNQX#8t%Go!5^66MDO91*C#~d@@nT-9O1+C&)FZsF z(9y3+vxk8?7&`|ps==X1O9BRLYAEgG1hTzXBh{F-ES14|D5-F1?A z(A>QVC3Q}Ci?hjknK!5dp)eCO?`@j(z=D5_X{2;`pfypX*yR!oPT(=X;88aM0M&wz z`Kn|Ud?UAk-R!=#Hh%xglElZlP*p4AR8DLZg=}A1EkSU-n#9F5u_zF`Pb*K4y5Pmz z-DVa?9gSL{3xCEJs5KiA=syU$mH|y*lxk_9owZh)^`aO#pi?$63!O@i24-H_uvwp2 zO3CzwQ70SzuJK1Kdf@24I_TjpJ=XOy@mm>Svw~ik?%VUmO~QF913u6(=9!|aufA6# z@$7_t{qc$O>hoz;u|O$?Cb+{7(3>k{a)2E`pVlxBg%(TIJ}G&;O|rlPn<3__Lw5Te zn`D3jY#7}$k>Kc!G*GzdXs{M~{n@z8koC+(ID8OTuqDNP?On-*kMAxC!|iDU@;!Ob zHrc57*QrgRf^+a#tGPND7S4HSiqF8oyadqPcWApRZnpOvd-#~Z=r`>CAai^Kv8uBi zKj6s0>GEOqA#Zce4a3Qce3xnKg4BhrG^Vo~cb(<-P-_#@@2C*8#*L;^-1)XqZ*I5A zI3HXmdV6}WM+RFlu?MnxPcDm9yK39SgvB*5E`LEZ2rO_yHdnA1t!_ zfeZNENJOI!)b=htXVL&m*{QwD>ShgTlF(k2;psdXixrqp%?~=maqNqPy5Aa6L5>Ay zllT79XX#n8-W&4-bgrvMdoYh>VQO%!%LlUVDe}i6yGCXe0Rb$B|ILm~z6XzUhIbGV z%fJ)UB$PNE7r5)$bHba&IYk?XZr75qL$nhkeB8BYtl1gbvm<>TWmZVH1bhnm5jD$U z<_&o;78lQNv2oN)+%&)I+>N5AldI1;`+}px#@+Ct>a~ys>&XulG=ExQy~q)Zv&C34 zjsWCJd_l%V%s$AYoIx9ArCa-e=ey|ip1!<$Hu#>)@N$sXP!=>T95agFM>uFN_6MU1 zb5iuAk!@9t0g{Oz5VPmspQgr44x-HC$Ut8*rC;5oeI{a8kpuwrw;^qFG zX$jl%={LKF6h_G`Qna14m+27RQXF?WpK0Z$S%&tSI=Ca6$DTRg{jPV$PnuPn$3!7I z9kjyZzf*4vR}({ujI*qsCAL5cuX+Id@^jjZr=u@JFfFWhp4dU5msyc9%rD8q&_MDY zh{Hi&WB9*wyb4_Haj~59_m27r%#sc)-P|F@CKcsf!ekmZ5rQVlhzT2Xt^jffiondz z@QhG0ZWhREo|OyNt)%F{!}~aAq=qTeN%+gkA~rF}G5=R8P18YW^6%&J$k zkDWM=uF{_Sv_9P#TA{IrbWwxIcWWN5yjRU`a0i-~v77aMZvuv|)<0B7wLmZ8#FIen z^CY*17k53`k)ikB)?vv2o(5ts>B2BS%AA1r{UV0}tK-hvyfZic3F!NT7gY5A%>U3k zJ1e%HoA+AV4?0r01c7A0Mkx_%4KCXLnUbn~(A9kTjgl z)wa9sQJs6B7x`ILv?WxSe8)|S;mI(i=kK*>^nm@2b0_!(dY~XCAf4z%6diU5Azji- z6*9>iI_2f(98}9(pW=+dO=1R%%CP(~g>%N-IB;G_nGAR-7+{$L+C)+92(LE--isat zxvxpMM0|x>X}{VxuFRBZSPI} z0zdErgF4Xtv%%Bnhr=;aGf;S?k~p?|00)UuH8#?VmO{0FDD(;k$&%nf4w`@0f1*OVF@H%xZOuau$0wZ;GLEEX0f?A)qWh13&1GEB#brDH7Lt zK4POV5IyDKepV5n!4HOV#%P8){;Mm`=FfV|&JF)TXmWu#ux?L-Vt+l;Ei)_b)BSN( zSknu!bnI{`R5CC5yxRpCF<&m>HAAY0$!+A-L=a%JjB_gk&KFat4%pmx2fLd}N z^`0q!!lR5lgG8OtUNVbxMi40lHiJxlOn%P<5Ou7)F&f0n%%lUUGm13Ik%?>-Q!f&i zv?{l@6_zw0L^%7FFA6{3F(SZ&Q=HEW!&?+s(QT(25p9cEwfAfr2j<7X4W!}tzP+(} ztNsOa0DdeCgqkuSL6ZJx{P6ui0=Y%qF zci?Dh++jA-_IPEOj;H&hAuKvBZlR}$qS91+GNfs}9}EPQsGA3|;ljb$@PJgnqcnf* z|4-bz{_1la=Yi+b0?N{$LE|S-pg@WO32G^j`@VDOnGr~nAwz|dXwsrZQz9?~E$GdjoIBRVTXKf_AK>`>El242MupbutukD%XuBzv$s-APGc#&`C%-d7l z)0gVHK6Q`bxuO#~ygRcW)Gv|YTJQH_Q!vuiFgbr=@nFrQLh06ricFN+lrkC=kaMrM zlRY;UyE~{2WN4U8Y-@d~YUcJas6|Z+OVgv2VDV@_1cZb!_FTx~cGlymUxOwR?3syy z%}L}K0ONMy;$!^DruBC|295c2upbKv?hdOCZ|)`2m^ewvibyfYu19M>N3^J>9#fMQia|3B{&zCsCs<`E z%tEYMrkFxHnO=*$`K_#HO%=o5q6b?)5dohfYEcpy_Da_4(vY2SlXzfuxpG}ZfkWDv zf}GKJRM54mynK|E`Fz%k+R;>Q%MPtlCftN2vWVP)e(vW0vy*P+yeLg8ts4d5=2b(J zWY4yaUOjhB*A3>-G}RUSdgxU1sZ`Zp*itxyil?8lkyTouRVF}kp0j&f_YOFlF+Ptn zzW_3W6u-<`gDQb%P7Jv$3h4K;o?=XR$>iceEFcK+c4_L!IdqO+0t~xd=&nueeJTOo zp17|BN^FfYOKFhlQ}486MNVjPy05Nt7PaSt6V5mg=Yr1O#cU$-6%=a$XR=708lZh) zKK@Qd8IwLRPdb=38o|li2fU!f=>(dYMxnAZz?zP%D3zN}C-n9#K|T0rQs3y9lNWPI z=uDilpXGK8o)xnwBY6cGNBCj0+K+-cQ3xDH zgOygkFfXuC7mhufVCTOdNKHX`JHND?9u2l{;t8J$9RWw4boxXPp;OP&j3uE&-y-Z< z@*1z6#+2Fk3TQq~kehrCYqU#GL86;E`&?PHGEn@;e;kPS5-?|$yPRz>fC#hziC7ed zQj)*Z?_P`>4HvY~C6ueXx@C0`Bj|INokxDF)8PP70?3?}pwpz;rk$vxU+(mFmv;{3 z9TaAhxcPGPV%7;_WET;4R=bgwRk9(!=U*oiZA|-vEFlkAza`Runem;I>mOwO&JrRc zn+ykx^PAb%(+K?-I*ZQU6}U=V-pgqyLS!U@NpkJxU%f7SL1{l3-a7(3DUe3&aX& z{Grfr`HsPy(+nFpU7I;g8<$b0eL#GCu0s#SEHr#ptp?Fm3_{5-XSC;F3a#V6I%j>4 z!M>bv(gr(}75-(vCde1-`RJApsyW*M@~H8%*E_FcTsoHyLl+1bQAyCMl(Ku64*W*0 zgf+!iC~UFpx&B7JfM!sU)=V6a^6^)*PGh*IOHpT0!mjX{?XmMQ*}oUM7(nIj`FUgB zgxX23#w&gLw@2mvO6XfB6mgfLK@`2*A>&EorQgWNFChI#e?pzH)p&^AvabbdQ#Lb# zscB#(BPb^eW#ANm<8&*DcHkn+7eRp+FenW@l-)v?cyEjPdueU%f=FqEREpHhHUg1S#?NXnIJ@(wwW6xxl*H4(KNz3PWv8&mt5dJc7b+((xKxd zvJ=!~#}h8#tVnU-(P1}%X8WydBn-%ZM~cbpt+URL0gggiL&Stxyk0m9e2Pi!ZW(L% z?yG^|aYrQR%931FG;(#7)%bNH;t-6y_&o;O>jviDo+jtxdA{4}GQ)&3BM{z!;%N%8bHm; zCI9Y2c))KRugq7x*LD{)7?S4<*Jh^#3UvJvHP6fvb-j|Qr3sTIh`~c!vBt5%88564 z`#Nl8lNc{R0=s#_TB*`gcT&^MG~9I%)R;7P{Uk9lUTB@fif+1b7Grb_?mwOmE)6G5 zultU{I!9`E@leqa;F3EnB8Erlk}Hx7;QP!RW_)2v<9GyLUV_~#9Rnm<^m@#LYHKgW zYE&Y5XPrjRdTBmqS0&sT_1aX=po=7do^>ny=X?ZrAe*8U$j7mM zN(??<{Itt1`RmU3IuN*|FxPpXJ_z>DDhwl)S2w;T|NTA2=Ga)8B=mtw?2K%>an7H~ zP2ZPJhp4{r1r+{lQugivWwaVn{;xjm`yAk7jV!|hGozJ}A=*(|r?;24S~3P-{n>wd z-(h?EOU$1e4wyYIJ)P(rE1_)w3;c__h7z&KIw{5;fhaDYGtT$IUf${tX*6-c%pPbU zhr_M#FII()3Eqp%cMOXzg)l!V?f|>s`#CPg*X}V;S9%n^=qh5XAX3C2d%gj4FDIC>mD|qAUg( zfn<7j>4gvB7{;Gs(4CYqoGG)YH-xo)&m96CiWQ6kL?xn1pVOv!=69h%nE*U9r~zI8 z_er_<%;}J3Nvu-*#EsGGi#h6ZA+DoR`AbAfaV4olh{RcV!aHuNRMfv3Zi*Y9hA8$X zog+E#5RNc1rjsvNnb=p7;oJe2vkD9ZLYKJIueB8uc{w3J&T>hNTonjS(Q4cJgFs=) zIA5A1j%Fqn3NSOZA(c5vN%v-Cy?v4UZ2e9E_x1y zKmLEdM;G@-S#ih8FdgDOJTnO5l1QpqDqND0<+M%bj+g?Yx-zf2M6>+=oebpz!vLr5 z;d2Px6aaW(4Ke`8@@4(4{?IW-Y!366*>GG@BHF6mH9MQ7bm!cO(Sgx%8-KnDwAmp( zOXzcIS?bAm^RQ(1eyGbGPjoMYzK+i^OuA!rK z>teXH+a1;Cbl{TwqYgbtDsTBM__fFwN^YoW$?LvwP}J(QzakmE?q*-58&@@G@S>MF zi@)uAAqLZdGa(F@OBRRP6CHms>kf~#q!K1FJ16J2#1BdHIj|u2t^B#rLvX?;-yz4u zqNFYaB_qUIK;b5C=cZ{|7V^*mp`1eM)j2?iLsvj{wFbqvc>%ojUq^8QbQDd!j!i{8 zggLv!)Y|*KYzzT0C$HDgM*vIx;UM@82F3;b-i-m;`|xOG?V>}cQy6Cev>(_Jf8y&(BlXZr2zJU8+GSNOqnQgc;mhX#w@`Mudo%6NH zSNR>R{)AUL^m(0{onkg!zDhFHNb&hV1Eud7kiI1@gBEwQD^TO>Ud>2yrZD=(mGw7Y zbUhqbPo!a7!t7KQV_`Vo;a6CGPYj(A;;XmNgI&{-sjz?Ozx5sVr1adfcv1>+ z)C4LLcyoO@8y;9aUGN|QNMs#B(CWo1SSaz-rgiR}J6B190fhL42X}fU8<6u>xmrxC zoZ=djyIFlcq)`v)%7*7-z#I+X-$q=bkiIeM+cnB}{nQ-?mP2^$mJ zvuEMK6!>Bmu20`VI3*eA0dytO>7-R9@$8zQ0M}4%(8iq71aN6FCRAZjD(Q8#Xf+`- za+=E0Rv2nC)t2DUv4s_hv~3oN%5Z+8o!7j02Q^Q}VVgf6USDhg?Ko~Nhk`=wYJ0q} zs$@4vma*J;Bfn8#OMz@u;{x>1{SaQ#*qoE7km$)BLrCVG-dm`rnuRwnG^Tc6X!o)K z=R<+Qn5vuq057_@hC7jswoWWmubRgS?)f z;IkzIiU}zTsSDUG)LyhpU}k9+b7vTpt?45FdqTXcE!`P}(eoCZyE0TJbZ&C4$agZp zIJ)yxyd_A)F+f&sN~^Zw~z^ps32 z)?NfrIV#r5G8|9+O1~q`h#erwKaDfoAf=JafE426$g70j!2#Bip zkOIhjChHfIW+0oRofj?b?6&Kl22!aEe(pWqV6itjHKQQ@;30K4D<#4HZf7WIKtps0 zbH*_p+7-Zo(%h}MkO*+uDbeJwQD=ff0B1pi;Y~E${Fl)0k5<1ob=;@Q#W@t^Y32pM z<=k_)@eFRA6)Jq?uBmSG@9)=rmacX-Pe0Nmb!O;0_ZXrA>0`nbN@6A8at#95aA8?w zNf_dt@apO2jVO{q98EJrwK&Vie0I}mUegEO%(0&0dR8LJ-5VdH`h{+A5)SLLl_p5K zjc9Lgb*M>(8If`tQP}D`C;qF9U|hx@;rw5M)$`o4;DXM-mJMvY-zqLG)!3JZ!%egV zqbOju>Yi;9nM=DzoQ5^O8`~0tP-MO&43F8oA(R{hN~$Iw)D0sd4F$QVe16DlZwDGK z@IbDxZg>Vq!BO_O(v*M{AI#>=+~SWS_(df$5^ExuKtb>zWl%TE;mdds= zo8XC=Y^VjE5KF1@<08zs8oqyti91#}2VF{o=u>2x3eyFtW7!8FuuS!{ap9Rn3_++& zCtU zUD20A7Y?9WfH}P3S@*;bh(eyvaZ&@q<@h^EF50*X3wGb^_nz951|LyqB{f`@`o)e` zGd;Z7=_{iAUd-)8SRlwb7iVBKdKC&2gLqk%@QSyf!)XGH50M_Tjxg46mA(w z6dGb)0iIsP@N4E`9DrA)qD_qhU>(Mt8e^@;cN^$KG|HhBp=1){9KfBNCnu!;okADh zx5E-T#I^h&9e(?+4%2Kn#bz2g0&NcBOr22OGr#A%yAv5APZS!!T#G_)%uBU9^6Qe$kAnm2B~knce*X76ofe+V-b^}h+O)6Q(F;jO6rcy}uz^ci zt#Hyb)Q#ax7^yZ0xQ5Pb;p2YP6#-@%tP^!ew-mV_vp^jL;uU0?8PaI44d?bt88N4Y z=w{xCn5H!+0WimI`az(54YXa*#>&vxz4#(dNpjHG?Y#ce|CYT6-Bd=PF7umKHUOfGDF<_Yrem9alS%flju9>l z;bbo)`s_2|)XQ1Hr#aXz4cdmdZK`-N+}FfIYvr=DR+h;^(TjaAY6y33 z=vVr$Vivz>7gj+6ajny!8QQJyce)9{K)87+>>#Kb{?2yraYJJG&@Uk~q%yBrj2+b# z#$1_+*|kxEO>+|C3FCw&puYovU!bcR>_2l1c4?CBP3e$PArszS02J>B{N8<1qpoc3 zL^nB>bK5c*$4SRu=H6Avz)&2Q3nLxnE`hD%34p>872}h#SG1b9o#e9U%noC zLGQi`RFCT71;V^m$ix5#R+T}2j{Cv9PO+YO=u)tSSa!`Aqhdc7NTYYY@CCAjjQfH| z&yWX)rZrcH#d*LXQRe8;sv=UW`(I1E9D*?=4Nh_V-Y6nP;pLN5T0EMF}Bhsbzu-W z7aKZg`dP9K%gvKXbIVKKlRrGg@C}Hr$X?3Y{3x>H9@m*%)|*G@@lLATJPyx90Bn4A z-`liB1}I#1@u1HH_EDXg%}RIkEYOH)-SS=Qaf^Kf+8#G#Wu5yHKSn=|!kd=SFNJh~ zrk#2TwWGP+JUn3YX`}ZSFf^mbM^63iH3AtqCM(pEA}sSR#k_gu1cQ|rWzjS_W2AJL z`$Cl7nWAx@M8lEq5a-78(LrD8k9ZV?c7oe=Xqj6Yib8NO%9D?M@J}+@PJCi1eV1>p z;Z{uXe^4eY84~MaA#~FJnThQr<>Z4RuYNu27o)7u{1n&L7471vTQdwm5g>tgZNh!D zm-7jz?mD{z4xEj@Vq&3!!3Pd&ANVeGhU*zNXD9ulowH|YV3li(fFrSvs=QmO5hK(3 zJj6Ksc+RpEw6jse!LkIOQvliz7HyUSt=>0o%6!+o5$RE^=kPo^L9t~)dCpGYaT@;c zwCg*w)o?N#VCj06;Y4sNzu6gsGkaj~Tj)Kc$K(fe6G8nONvF93ZD#f(hIWb$aFG!d z?|9Z#$C+SGe6|#(rI4D}>)1(e_q&?Ol;Iq(q(mvbx;+0WquE0c`Jh*22bYkd+TA4? z5KZC2{8y)A4Po~8#pp_dU{a*FtIJON`ssk&XnLW>gVzl`wkTAkj{RiLF;}?6vSakh z)FPlq=GM3SpsYTq)b% z%yv6=z*LWQs@J89-hS)YBx_wq*TbKNI?}*H9~k9ca_!nn!sWc)Dp$^Ki4^{ ztPoEMLX!Pjzq|AJP`sgpo#$cR#=zdoI*W$U^!iYiUJ}jHJKU5$B6ti8Ub{8}PqnMQ zn7ul~Rj>i>%)y0P(UlrB`2xR=;pzosBGK{;xa~j#`eArGc;fCznQ$qZsS@H~6 zxK=Zbpi=?D!StNL)vG>|Dnn_+^lxQjsQh3HGI<(?4?v;>ueCzySdS#|$G+FIlX*1c79kd?v55JrBo%${J3P5wYy8w$KV={=sBGc_Q=fOfBKn4s2nI3u-|@ zWNnl8b|HqXd3Ao-6hMHBS97_$18hq+ds&F$Re@%cey%J4Nw{9y#)V;$SRU|3E){f~ zv@ydpMoTk#VSlzu-v_qzQQulJ0QtaP3v?$qZ&>F5GD%EuXq98!&WVaGU8q}&7peZJ z=lE6RO&MeQL})%&XNbu%O^|tsTaIAM#aQea?h-ABb69tO00cT_!~|jY(z(K&J6!eR zOvm#I7WO_iwT`^|nB$`$3c;vzJAHqcQH>W*$0C|b=_sO4nHmep8vB=pdG%>ICkDi< zcDJ{*O_mOn0OS3z(|ZbAd>{0pB{AOn+P=FzFrGKR5WB>pXH2@K1wfgU^= zNJ9z9+l@O~;1q*3clGNE*y^mBuLmM{&g*x^i~}$sx45O5glV8;cCJyZ&j&l&&qDE& zy@umGo;ia}CIGd=O?E6WQ<@;?B5?>%gY#Z*`NMO8YLyW$;(V{-=+fLk->2qxAfLzd zR41U!K?b^ljfbo+W7aXI{~srUTrLxds8~-4BP!7kRzJ6ph*azfuHR?bXBQ57TY(`K zisVr;60j!CEwDzLfNO4raLq9@Z#h$chG5w@$iLAgeQu)D2rW8qU(Tq-m_ZCmxRPCr zgrqB0n;ZN(22r?$j#ax9Kuv!!yf+4cLxFaKs6keM4UKgd%j+DyB`{}G&a;zdifQ^* z{pe5TU09G;sp9mtN*^6MpW39|7h}`PUF%g z=md7Z-CjsuG$qEp>ue+??Y7PUxh~dru~@fT_M+Y-A~KZ=-yw&Y^wsbxhwb?*0H%M{ zWq!UxL}TP?yowsgpY6BTK*6EJ7?F7W`q`oRc#lRa;uRvB_PxSEPKF8j>R z9aoX1P>O;#bdR9NZG3f(QH^4Qhv*TtrjG~p!Y?S~tZV3=05fWd#Lor#l^IkC^6+BR zeN}JQFL3i3(mb#pv+*c4vmg_w*u|<0y&b6bi(;tcVd4Xtx<=u0Zw8v@Sc$-fED77f zacHM65Jn$~vH8&_ryXPTs)2L<_Y@G9HtW4+bd<5=m`u~U62m!~?D+pR<6c(Dp)6^` z&6|<5K34=XYeskyA~f{i&{QUjB~;*gF{Hjn@41ACZb3K>j%bSNXz&nL2kwoGz6zVD zj85GY{+G)R?>!0T)F)%B$4v`UlCb60|;+JyjJ=L|0 z=4Xm~nhEGO(*fKzzx11{bPnfcBg2Hfv4DePvGdl8IB`2sxOI|AHS=_pL<^z2YU700 zhPpTyIwiD6Kasm1Ebhk}E{F{}Qe+#A_Q2=z7bl$S@!;uWvXV1x-M#s0V~ksubHRcp zqzvR%<$2XVK9eY_+*QKIeJT(ciIFx2oTSAKbnvglfe*6>S{CZ>I$upW-iZ+t1l86O z?hlb=-K=08Hk8q-oU@>9WXEp$n$xe(8ql%RGT+ue8Bi` zfB8870t~*cfxlL+!Xnz4r;RbtQO7!^R23?EzDh!bRLuEs>nvcoJW_2R5APkIy~yL|flAfSZRVdxJa|p6LcX zWtm$A&?$e(osDKdQ5E;a&Rdz~ADMf?gyi*R2irXJ)Zgcur^Dm0Zu{UK46fOp=sH_= zXFFSTyUvm|r~qj$EN>wvD1r$-638s^*|f!HGqZ&DO!B<1#BJ)2$ECHd390qw!~WT^ zs|NSko4oY^>%FUnX6*unb&?`P1pB=OGWV z)cf>`W^`D9>j1&N0#Vu|2Ce_3$vZ2%h7FDHYBJ8mNb`q@q`GA+mE6$J3^#RZR#bxn z(8{5kl$xueuB4f4myc0q`$TAM38Em$VEP}11NFNtOQBpLY+)IuAyHXF;TI$-|LS8Qyw9? zgDN0kmA-22ta_Qo(*B{RpGUEsXP-xy{Q;cDGaUXq2xryAfQ6=>(LJT!4A!a~~27_xG6f2z3jvy1*hv z?AOCfx=R8$2Dv8-?EC{B>=&34uqt%cC8_mOjd19Y=LF)9n1}?)I11)`la!f zf1d`1g&l^q8IH;Y6yic)b4S--%t$z>q8L;)hj1?qtWyEy+krAx7C><2E4UBwJP3S` z&mB*38Qu!r1w3^ha?U|(S_Y5CAu_#a}LgTBam7eRti(koKZm zpa{A%W>E0~*WDC%jnRB5P@aM~;SR_G3%yzx)e(=OKpVh^k zxh&3bYiW2Yz=%V^7|B3%iEDY>eF%8;*T=}lCknx>$L%|vj??gHhz8Cj9W9}@G<+*` z&{omz_0S>M_e``Iz;}VZWANC1ktsQ}6#&4r(k~(YmO}U&-YmeG#EeelL?6#R0_0yqK@CteW(@|~(7QJ;CqB6!1U86Hh5Z#ZNIey9D6VfG+i$im(?g~>KkuhOVqJ#~vz z1$!|d*U#}An$54K9V}7KS@mtgq)rdIyOdafGt_Ld+ve|w<|pa)h%E15W#tU`TJ3s8 zzsDV^2#xadNaCh*pR1yl!bsDNcF=d9a7PBvB=ZRHA~tyD&OO#in-7!5aPSaYwNw5) zP+pfGF10&t{~Ya>Ec0h!#TG>taAWKIE%`E+;1`qaZCU;D=in%{6%8KJB|`;RJ{` zwvzR)fsDAorYAj}nZv=>`Q{&S6TP)CcU#X4>bEX??aKNsgV8|w;w|(yia1`v>A$oc zUDNg5tW;TdB4Y@h3bcWsr_a&RlThqJcG#nO@hadZ**JyHSY-34bT?RKa`L-l{xcV% zumq~PCFr-sd@8(qyfQB+lAy-s^H9&xG?1CV9fmk>0b*!CtzPxch6o;#`!zuFO@3(r zux!kLceg6|h8bS-sG3dx_R90h*?<-}biQ zyS`!1rsXe8RR=ZJfbd()Yky>K*Vdp=C-_a`XLLB7gn3^rbK_{+lf=8iE^_?I0>+Q*bw;M3=T3yPO zNgr>+@NR|jR*z9dw+32;!Ci9M1y$<_D)O?sF-Y!<1pLKA{Rsf?X(1~GNfZ$7ig|g+Yj5u_m2Jv zb#&j1d*{wUuc3yrv%H{1>quBAc9|5?ztA*m8c|J3SPfBGUqbZ9G%sEi0H?Gez@0jV zA_8Z<`QFI-UDzmEJE~{oDn^+#dVj8F$5V$ytbRR%#T{^+T%`m|t6oCTw`f&n4LK(9 zO@3SL;#qn(1z%!~h}o=)?sKMGfhH9l5J)gSQmp<*R7~sgIEZGAtxZIPnifAncAl!? z@Ns&v1s!Ut;bgjPv5bfjGbxQs5s(#ybGR9l7_2h6ubt-YJjhq}9lKoTx&%KH zD2p7YRRGLE9E#T_<})HN$_cYX^~o$#~oVrR?kbWAf`xs zREw~Vz7L0)_RCv}Z+voMzv!|4uLMffZ-TG~Go{b@I15M( z7JStv5FlhDpaAH;R(Ami$AU?Odk4e!G`3D86RlkeA#AW0o+CQuDHdIlwgAMk?kV)9 z9+sv;)_g}S5mbLU2D29TSi~qtrv_slql~{aFXm_=rTR;;ILhPMe8meMEjyNTzEBv3 zKTHKGz^o=TxARonKSu2pfTHTyAimlSwSfG-(swLA69ABA_JeiEnXm-Yg0DAY`${b~ zoRm6C@N*$@1yt?oUoIeu#8@MNBsAPAO}%*u=wPMF)cadmvqb#tzN*b`0UO8TJcx6{360~b@p`}ae)BWwNVfp974PY-ep@FFT4#TYtAK(OEnJ-){f>MEu7jc+JZ^kEYpW< zs|Ix_Ol=&;0bv*lhUvYF)C|fi3 zBy1CW0Y}-}7ToBHoKWzBFWEki;V)p4#_*SF=D2ubDT>`ZTK8^_F|0S8-3vs5EaKvX z8l2=(%SvsTz3a--1xvZ^Rktv4&Q-XpeEr1wIjkX!!B=ms=6y zk-`0PD^W5j1ira_;bH!fH<28Dg>cz>px%M$EX{fC*WmSIP-D(#%6u1%HP{M-^@)uWS6lU;B>i{W$zCzbv zpy~|h{7ztcBO^PvxDFR)-Ojhm@xEk%ofreO9LPEsF?K2+htM#zaZ-qe(m@c+i`d4h z`Jj4Y7XM0R4=uig!?Fnh=QI4Gdfzp-z<~v->rd`=(M2JuLP#}n(*>gr009rY)#+WG ztU;?kegxM%NZ!8P-Nip{((5Rx2@oICY(9rj&$HMdvqD*4s~)AZ_&?B#EsC+2tgdyn zuV#+|x5Ox&5l%fSL79FjG+}+9S9v48gv36DxYB*PNCDf z2^xV`@3aLDho@nEpgQ5WwK`ehd` z0CVGbMv)vv3f3Q@YgLSx#4#><*8EZUtbOH#&*~|-9g?tnif7MF)Wv#L8OvJS2+)?Ko@V^Pz_ILyHVvF{M{fi8NV9^ z@#|m`n_23#`bGQTRkvdMMR7|8Q}w~$;OeM&Sdv*XwI2=b8$f_=YW>BbVKmX}OVG?E z7e>e@gg=@f^(3!XL~AlhuB_hu;$w1Ot%9w_RyhiN)-Yziu9$=@&on<73^IqIsb#$qRFQwyugTqR$Qw z>&;J4)8rHYx?@>sC>%?8%U0r#vH`$Qq(2(pYWOT_8a}cLR2bR+Lyw%K88nXrg)ZTy zaZp=@bb$7|o}8I}fx=V8to+sc3>NYI!A3tH%k^=7a4Zzp_8D-6>J|hPi27_@v7g)R z_ha_oPT@ma``6Hj(;H|$B=W^KvH6?;plYgT56l`*_!q5lZ7@=UQDVm1VID1o5XuJG zHF)K4QSi>sV+*J>=l1jWdTUY8?u&14K~f5UGB-K0j_YUmjm-Rw4EzMJ4;;+TBt#w5 zSD}JadBdwYK-_|2Xz!I4D3K+e?7Rq@<*BR*`m;B>jii;wa+{mg!!3ggK}K|}BfDms z{TTHPfr9|8Hf@5k#Z|Ip5ca0T>9%lZ)|cwXKE`dq1OzU%`s4A~KRej+C+L}(<0eb8 zZHx4XZ+Sa}SK*nn9ZQt8$rPa|KsypD8SFBhahxUunlP8e2l>)eRhw>JI9lZpglf0M zku_2Qyq@j6Ay=Su;_|fdqQp(=T1hn zNVI4Fi%xz#Y6^Zl`_b0=V`znSZ4MnR9i1MLdF?GWlqA5%=>{C>Y-BUW=Zv^clY4z{ zRTgHkV5Z~HKK}90fXDKr{~b3AV^+E*VP-VL;L4Bt;G~9Z`E>u4%H2717n{}5tl3b9 z9w$O(T}KmN1|H=`H;XMov!ZH*(<8naAmX)W)ms7LzC1=lOncZO`2Dz68y8PB1^s~~ zLJw=~Lq4CbM3x;|8c!;>I4MKsI`mPu#bfE?rVu)%sR>k@!6qL`NvgpWeUdu zBVh?|)dg7A!319m4b?HckOjAykR1e0ivgh9ID~&voPu!YCzChGlDX1EN)rj$qOWeZ zU-E(qVKcFNy)H8mV+{-=ip8rxF5CoMF3g(H%~^#pURJrJr;>b3u@mu0|6_#UHg9AY z0Op`=B~Im3+y?UZJ4i}lm@Un!c*Y4gdmIoSl9Xm9*1(VT%?CsB<4o6wJSK^D%vZz%>TsJS{sP7jQjtZ38G7a61w$q`Q z*4c(av5^7m+wZc~s>{222_H+EEOQ&igXG7pkopj|*TK2!fqH}<*NX^dmZb+I(xQ*{ zIl%$8v!~+L?0*EUVA&kO2IzWq@6d7D-0)Cqe3*XWeN*`%TC#SVHQFtV0V?-xI|}R^ zk5PMVws~nm8BiVBNBl3gK_20sj_-#vsJ2{kO@Evl*z7=?N2yJdu8zw%{vvGp!~U0L z^@G&Sz|U#|)^L<^ds%S~OMh#sha9E?;*?1WLbIYo%j-OSnieJ2a@Z55 zO?xUz$^Oavy!fo46sl!Bnh1;v}Kj?dp7#e)J>#Nd7D4 zb2K0yNaj#oU9l5FD%yn>Y^hiEzF;r`BZ#KAQ}YD;VlxIv_aCJO{!2b-zamtJ8gCo# zT|B84>4c;npG@k86;K;Xcf^u8M59N~TH;z#N)agKYc~sbUdLhr%Y#T>In+ z0Lu^e;*<7EOG+J0%G-7@o16dsdi!m)(QLQMVY$_h)X2b%n4{uC9Fp-<_-@z;71tZ2 zs?Z8|s{4^mjcWG-O-xml2cgxWjXat@CQ-j{tkYkXw&zg~@Rm9|&t`&)qw4gnYDV?~ zx=P`(S{}1^vd4!8>>lfM@aPZUxJeM=^>&SRBgM^+4Y2+Ty|Z7*W)u-C;3HRl;Fn2m z=~^%GLH0{Rq|C8t&D#o1vu6-b+AjWMRvwSfB&3s4VD$GIQ~&Tnk7rN&P(tFf(BEuW zD7DndgY5T>wue1#@5FwJo9|g*S>i10CLyiGs}Z= zU24n?UO@UIf|=E&A6yeY!YI%35UQ|slunuHxqn|e^zR>!{e+afuQ`Zo`n;G0T%KVS z!upVz&A7A-P&iW4g?uCJLF?gRdR%CyPov-I6TeX071R{`)orcY$G3+J$t?8Wdh=sb zv41z5c4yPZh@u5QTw)wz(;B-Jno#Zx7>81$Dy}s)t{2b z3t8l5JFq|DpSgokMF%_tTU@fEQm=b!S>1!Z1k_ZTq6JrsbIU2L(3` z)R4J(V50}-h6i-6wkTky`vDl>KYI<95+gy~yzTbfJ$ehC%=9}4nKfM-=T$r8M$3fL z!iTR2@-{Gqvf_WYSKdRmi541CSj8%5z}w7xc59l^TB%oF%3C&yzfBg^RyA0?EG7R} z4y)Zx>?=~6Begq8<) zdzK%oioKa>PNVDiYo;rzUTzW~UBT8{d`^$J2gkKBg=gerb?&1%&O7S!daziVd*EN- z;(DgU?HY&i64Bru8TkPz!k~(UwLP#}{IlI2U=qgh%vOu%3|%e7TVJ&X>r>EVrX&jV z;NmDm_-(!}uQ^kK@7ZKH(O( z1c0bmw2>$-!l9BqYV8fScO*`GXlnRY!QU48taYUSzyh&0IFXh$wUUxvjsC4xq*2(7 zaW@}oJ&$I&Cbv3y2RnW|Q?dq(vmPZ%UV-%<8tfNStJMlQZ;%bU(C>_rbfiJ(hwMJN z(OQp`p*629>g_T3T{9wtfANnt>f^_spdSmHxW~~nEVztE61B(Cd@|bAY$?IJ071ua z6roR-#~4{Xc?Vj9eRMIGDB9mXZoju`tuZ0y0klEJ4Ua*td?I}emimw64fdZt%s=V# zkJ@t_;u_vkMEWDp)t*Ce3M!Zn;xkONRpnACEhyMIM0_OOoh>h^C~)+%-6$IMGrH=iDJy&7*hQV>Hc!8 z>3{4Fx{Xz#E_I+-z|_@X!xC6=lw1m(st97O%B#Vl%P9XDj}qq9RmdVqaboBj%tdAZ z7psSWV1J8GlKkt=C|t>m3|}fi8@^DqB~8(VmvfQaA2&+~)c(Kq$9AU3wbCa$h z)}oB-c(qb#wa}Nr=)(%$ic|lxKQx##KVcUt&uCF>W9JC0oy||MVEb_XA|Fn&k?v6| z)1&*kvO9{XxrI%Ii+9f<#q~Qsf%iFnjzef*%J=RXQda7S3hcVf>_v7=R)=oWD$AXd z?h1cUa#CHCA)GGcnz&y?`}7&n#rDX5?2p17^Ed}_k4VUq9VOkev6iiFT&&kL;(=1G z_#Zl>gxopFshC>AYRcrk1=-_J&~ zonEA_9-YHqQ22gDq?Sq*8`Vkr%YMgPZi-N~aX+{d)wu^8xVml84J05N);IgZ!iw0) z;}nt`0dG~pX&34L;C{Vn zd7czyC47DNhV;iEXNooe-Fm2Yp~&O7Lq-1X&B4i~4H)dluzoEYR$PJ-zM6J|daHrgp4o@+h6I|$2LXDDv z11h<6OjJGll)IO%fY_20)cn=XXo|4Hne+nVeeURQnfOPW=e5w&2)i~)oLF~63nLV- z<6uEHG@q%*Nd-yHHl~`+e2e7#x^A)eeDAn&?NcU52t;)F!exDwCvBj?y+HI^u|o`! z7>Hfy^wh}7zlFD_U^Kgr#U&~or)D6}KYB;hYiWOz4>VdHyl!%0MC*-Ghq!d^W4}@V zeKxo?%%X0!s}~t!9a^VLd;PYP0PeZmszZFAhZt9R$qvDV%OxR(^(-6Tgt*%E;doY`TT#O`<|1ax8uO7 zJ#I;r_&auA=_qV*nJ@l6gZ=n7cYOe=^Q(-zkaHusZ-;P9E~Zd60n!aFxj+6>KDe|F zMBI|`{=Kh+>E<%>YaOedn&0h=75BgbN4j*@It*)>JzuelznWVAdDgYtfpf?3ymVBd zC74=!9v{5@x0^q{$5>97Z>pEFYlZ5LjR4Y%*606n*D&t0bCAdOe0Gs(fDI?gY_T$L z5HA02hr4xH+mABJ|9m>i6bmmsi}$hZyQz&fz$Gw{k=%`>0!9y?QzlYLW$vpH%qnOG zSFlf3uh75kjO5Dp(!Pb?b22oXZaiJR%V5mdM-@B&_8!CQ+j8&lrj_hc_z`Ux|1KG* zzh>Pj8AD;?3v<~a+ilJadkrHCZrei`$WHN@7;x7tCK_4vm7>oi4m3H%KfG&{_fWFi zup`I-hEkfmc~rGz&udf$`V zL3_(AzP4xF_KiE_@h)`B7(V?Am8OlR^V>i=t?exfW+K^fCCF@=ia3-Aur zUgI^v+I0mh`Kx45XX@*ny6c#XZeNUR#~ar5$U#oDb&P{lTEWdY0l2 z*X-b-LZYjbbT=fD_nH~5uFTY<`OU>Lp@Ny-h_w``DkI+y!-%_;S-Fc}aPeHeMj(|j zMP~ioe#b66pk%k~K;N9$U(wZ7dH3h<=&=R6Ux4fAx77~=*{pK3_d6tA=nz_6;?8m6 z0hOqe-SV%qjy|YB`gbag`tU$EswvZbB0rhEy68NIKE#7f4%g1LzjY=?D{<@XxrvJE zu8)J3kTuFy0*P+YB4Y&^XoLjbL9N@TYK zi;(A`vm5y3?1ubJ-!Ybt#V>I|LZ&366x7o@SiQUXC){Z!43J$xcW$(S&zXC}=~if> z-R-jtbqV^{cx{V%K9b$OL=Cm9$?mCi9=927KWyKozHPq{9x4Z6xtqFqrs=v*|^$0unII_V_B!-}P zHP-qf(<~g#S74BEdMzCktuv`vdg>T3qo90lX~3v@C;D7ibWXI%zwVFH$<94-tRyi8 zdDMSYtx^}O9_1hUv2~}fUv$??73mx|H$YY97KB-OB;mMwIli#WF1c6MrY z<95jepU*2QKnuh$>*yvgrv^R8#f^$)pjDd84|fU2^|%D0_hX-gpU=7|ro%R*W%bLt zcxZ@1Hhwwl2fQ7q-zWV^!|h@7SsdqkO!LaiCdL|)LRa#!*>cV6Q+GaGXgPfKhFwvfGFH0+OiL1GBrDrO~BFwdS$Ixc8SvQBt2%2TM${aOX z$`#^+`yO25<2^6kQ@CyV zG&B{yvja6OBEZ+ruh3Jq+1Owy+kg8wka9K%BinMk@$s58T@B<>9tV;#TQ?6Cd(4dv z9(ph}lO@v}*XSrsJ$|eio<+T-QnwEr{9-aD3c*Bi;0Teoux(7j!~oryZPQu0)LA?Z zAd!2cIC@yGWb)Xz^l$qflV~73^&tn~2&4}b8M1)bah?M^ zf(-)WKwis+gwi_ht|HrbHZiIO8oqNEnWdB5HJjJjGA9&{`+I?`^Oi{+!$+_l9sSFF8o?x4bU+Uuh7g|7? z#WDNFS?UCAmVeaATIs^8xWF#S+3MvYMKBflx-pEPkP&_o^;C`D=(hQR*^{^AY9|0GHFGg*Id&Rg}1`yB5t22vPj(3jKFl(c=PUGwAG z4wJhd(yaQKFI_&g)z9T7z*VrFgMg{U3MGrdywzU=Qtmz|x!j7mw(in24azb7&r>h1 z3$g(&WS{X-6Hrs*jf|ue1Vy%DJlL@YtJN~x{JK%2wC9zrXff40#F!CGPDDL2!_TL( zE>-ud80Z%hglOAN@a~nlOMyG?@WRwxV+CU1EdXAXMbuJSe?K&yL3gR@=)`i`LCfGa)L=IkRs$@$la7`L|HD!RA10H?M*(veo;}i7a42He+%KDK8 z3{0#ap}7<+ViZH{tf!O3T}?rUbD&NqVw$j&wmq{{R&VE>Y^7SV(E!QR!uJ}o;zUX7 zF7w9O()(C1T~Cw?crASG=mzhzh0 zgY|q6cP6X#Qcu)%utaIa4QQ2GOUMx+G|H^|gY1&;W~5H?K~v|-5X7RZ2^xk-Q4iN2 z`5u##mBx|Wl^?!$n#L$|e&zAmU&#hBiodVtKz65OVo}PvvGmKCHPRn#yI|a)?2=@Q z*#7ud=>8J~FRj5fh;|6Q84JmQ{Va@fTpl-(=#e-=BoOkcMVx!eGQq zBI8fk6e}?nLPzSv5cHy;t490|lLxujgqV{Mg^e%tL4<^NGqM^Kff~G8lO$Qh#ZYW0GvQ_*!fA7i3di$UCGGg-~;ytmE2c;#7rwLGp1gqhjv;XLdM?twaul?Gi#$8@0^ z2B&J2Ae~HJ zceP<5Bt$RX53^Lj;BJGPTDgc91J$ufUOu_g!6ELu;A$F1$32wbf2?B4>`8Mor>xSU z1ishral9sxj}A3k=hug@z1^YD*NOR?F1BXsGr^4Mo#r10nlTvsJlW{Ztid73zat4@ z1lp*>KzEQ!cnaE)SF)AGOf29Bs4kMJP$|rIZnHq?9#}ZCN4LTIOwb{cA-r;`moUyp z`~(~M8=a0EJRJ8@p`x8_d#Cn|K+PGwkk3S0KLZMMIpjcI7Vav6esX3&bUjXz92`@- zJRa%`S%33Emyfv%PpQ7JFJ*7z28njSfmv^KCX3Ykg`9T6Gj+z1VLGa%d9l70s5<-q z5|q9WaE<7WxjB1EdKr;3fRAm}ZT1?!#ql=X8AQL)ab>zw8_%nA%Z-rHFv-EK^HtH< zzT78xVvs>gs{`k3RhzP@>iLS)Us(MXpAK)iObz@x@W*@q-Sa?a^GaSVgIedO_4_$) zuTIIJ!4c@hmK{UznF}!sV7LU8MSXB$Ya%(fQYez4lNQAY;NA6HG`;8RMk>!kAG~?G zTYX~*_??qlG0a^AN_w3;Rj;kPJ9-K93vesaI8jCU~fBoird2FsfTHua3(4K zb+8M`m+Z(_6wT*)flGJJ?u9qoB*gi@$Ys_{zmf<=61#{AIceLzVyuDg;cl&CJ6>`ajP;aV! zeS2kNK^hh(ao`W&Rf(FoT^QJFrbAc7?wF2a05`uVtnse`B3=o* z0MnStLsJBH=Zrr!>^H7nq=t$TnbPa zGwZ%!WV29c2@p%yfP6$$OK)HUTw$ylj-n3#5RwxIea!e($l)$Mrn_p>HpR+b-+@

V-oGz8w^8GD9^*)@SK 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%0D)eJk* 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

>eXa4DGi{TcBlaCxSi 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 z zHc`l`CrXQQW;LYZxQ6+Akm^?F+ck-&{J4D1zx$bfQ{(dEU#>sA6Tnp>GUV4&&DIeq zab-$ZJ+AND!Yh69cgWu+6i6rl!SBfKLF@A(c@PA0BTC5G-Vd21sRQ(8>~7lAAMv<*5k+cII`+*U)93@Wcnv$Y-0}4@i0(IV1~-a_cx3NW z6Td99PwwB>B_^ot>30O=G>U-(b|-S9d-)^~<-U#i4hBx6ktyJRwgY%-$9&N7?;yH3 zsL9>8CP{3BbU$`%V6M?l^pqTT_u01+P4k_3Z1<}N0pG#eJEX}$`<-YVdKliCO8X|l z+v{}q#DQxf)RE9O@V-94+e)U)*#=MG$O)S3aY)mNeKU4hf1A8z7g(I-50Efh3uNBx zL@wE${*nyLX@HDGcY@###fFgOCt?7z=FjR~3|)CIT-I!+Pl}L>ToK%|LoT$>4Lytb zfTp)B)c#DNv`5amqsdS^plymU*7Uo9OH0k7$CX%-wG9EVXg$y7`4$s2?zaaynPkc? z{&by{M@=dR(W_F-)o18Y`?4M7U;eOs8GQrd-N*22sQ#|G0bH}xL$y4g@$W>4oJ3jT zmX5pVC&(-Fhs$AjaYOj)5rV}A^+K0`H%*X708^`G-xC*x*7foYICgPZ%QNUajul@I}2Z8!knmT=w z(=Z4@-cmxE2!NxFq>Z{MjJUym1;$aSJS#s${ndh8RTvm|FpMqA4ku$}Afk5zU#YJ# z@Hifz%bwPlcq|JDMyFwcXRGK8-l_xIJ3-#D63|a>y0gcGoNAaM+%ULBF8i}I)Da6| zm*hT%Fj>O!kFHi}DB8WSk6&dVbde6xZC(OGH39v$94*tKhLLUNHkIP{>qyZq!+B5! zd`oz*gJGJ0>(j9H*5i$+j8_OObdNetOVdNVg>}V>a$wq0;0@bm^qcm&AwuSY^ELrd z@k^ON3IMTbG1J#TZZC@OsT!z-W-#)7#3ebpC*g@w+6tw~F`<`^zqo)x*K9Qk;L>3;98#le-=e@QAm;R=rm^7@?zWDBl zn^BCc>CwP1?aZm>E+M&G#)>*6-ll_*I#T2%XZL$jSe?I_TXq+UE44R4P8nAfGcLDa zIQ10~j!Eft+;2^C)7iarq9?qwGm9sF)D2U6J)LCUiRGsQFUkT+-CFqiLP&o)!qh=1 zsrsbXk-(GKO!14bI~y#kJ2PuuB=eJHD&P>ggQL8z=^dhz>lw!DI2iuIOHf)Pcw1rr zL+O1#vPT-x|M=r{6&0i^p&CI0Tz84(u{VL7Gm1e;+6;@KgKsJZcQJVD4v7TrA4PCK zkf3%~Nv>M9mzoOhnqwzP_mUYHjTHtCh+xJr6ky<4jhHT??DwS*q^C9Y4Rb3NEvbVk zOJYEsIlKIv1MEMldZ9Tp}1xh4j$AdgZ#&F40D|_Kj|J=cH z&?u-D*MFb>J8tk%JIF`Eo-GL>xEnR6Ds|n}g(mTc_DR6~r{H@ctd3mWkD?Wm8Q@bD zn1a-kQnF8YI1aI;sqbeRkhJy;Il}SE)AN1@X-#=ri&1fZwwh@ki0n0BFyDw^4xj|W zWMhuQ6SU);g&DUNJ?YzQ&xU%oCnZUt1J_aI`VtZY7ahC_d9cx@Q4$gEXw1>gZ9$#q z0P8jb_4c327}r=f3Kg-xmqYeQMeD;TX+k?AWtHD`6*`Ica3hyLbWIRIyma~WpS#gx zNRlB#5%E$6-G=AjYJ7OjB+F$`dZPt2#%U5wOCIBE4tRk0pAuSud!AT#ITP2TpGuslj$7Mbp~?x3TqgXoxmHh0`hGhkim-$m=! z-_dUl+Yav0#kEJgMr*{}nl)LSBh=o11@LR8rA~I2B%ey*P30jd(sE$_d1{bdj5j(zs|nuKXT_TN=W^R8@ZgZ6J2Xlr&RyBkgrqVLQOesds! zyD~$O$g>5lVwyGdEA3e|&LZG6e#L`qDH$El>tLly zpt;TwKx36R9f-%j+(F@!9}FrXNu*k}NeiuASg(&ZgJ94k;1Jfnk?G)|lQVv-7=GeV zfcUT#Jpi4kl4g8nQ@@|SuGyJW2?eam!odzVKgtrn#XVH! z>gwF~P3y-*uzH208mw@tmeB4BZ}>Y^@a`kZU%YrXHQU|~cGiK~>Q6o(!1uEn9CWft zMMURJ`vti163svu%)7iahkH1gphtH|^;k?E!V%bF(|3!Q3$>IjDU#2J+us zgM80$q{3cR_3zF!4()=hfL~?NaG< zR8RTa@tX?g2Z))P%5gl%<{i#T+ZOvv2eV|>8!CHU6Yrs0q0?IzL|(!zz}{+r2@I1DI^;NyjNF?l!wIF` z+S8Nz`9-s|_*Ra)hTtwlKB}c$r*2-Tnt%)3%$+BjpY zoDyK@gzYp5F4c)ccI6CyqK8E`ya>-xu*eTV;9O4MV0syMbvM@n=_cTYGst`8L+@{WWjdJtK0be{#4y;kDlyf$^uLwE&k8jv9+zW4o? zcZo?KdAkT~zAFa@u$Qv3JBR3?C;RBw>w6OOY|dUx=X4ca)KkK1$`ntdWuiT)`nev4 z4#YztJb^?fA~yy*mXbM3@$AGLlZ+HJti=+UunVzVESSO+N)CS=3^lH%vpB ztxtn?&2ABB(L%;e9qT+PoMv$a=Fe22=FEODmf8$qk(<>q@TIN`qI7{Sy@1CE=cWN# zCe&5&9Ga&jc7c+b4VAcxeG?6sOG3){Z7k&e1L^qft@W0+u5Z z5Uqh1O2qjeDZQ31JMr?|?(uqS8da<>!|8+84=8y0)c{wKLb(yYnObiM?n=W*h`8g2 z69DUB3%r;5IU@}v??#GZ1D3aOp3db$Scp7nUhY)Kr*Qyv;p&oB5}#ogy=4#4C9m;1 zK$Wdd6=SI>q*PwSD#WQ*zTQJ(eaNCJw(1q@7#lX6AlmT^W*lE*#zYb)6&B3Ad+2(L z*BMf2nYU1+k>8;MB0mw$BD$MU2g{Y%#(FsyKfYi=IhJVNFp>Cu-Jid0J{5&hX4FBU z#3aasQz(fUh4t0Vb>@*3BoSnZdMN-!#pX`He^hDK-IK|#mm^b{M_pg^mm(Ns71?m8 z`0eCho|MlrjWSnP2}$ZP!p1CWSf)vy{nM+pQ#nZ`ZtG$NE+W4v49x@w@=KCFSWzUw zgpJK{G&l}MFvjN{?pUv{Le0J+mwS~=aVd{B^X>>%{3IC=*+CbBROMS}6wGYw+Rd+0 zH~V={ZzNH?@9;Xy6`um}=2(KTw!~l+85$aE1UaI{d-cM-)7P5bqZ9}a^BhJ(%@+!I zJFCYul=7$f5hrHsK{%nthiIe*0wr3U?=YREx?-f~V#Imp0x#Mg7YDl`rzM#U;oZ0E z_?(YIx8LgHf5#D8O;37Yt#RnFlmo>Pb(UtFkhHY((fmG*|2H@@TB#kUd z8x3G39)IEUM)eicxKs_RK461ncbpgy4S5DTl{rMHi6J`L5P%JBTHa^IkKS?412QrN zkS|E$6zzGFMI+KY7QqiWz9J-1KoDt&AS^v9rfWke!L^`HRSK_Km?DAiv`uoT*m|E{)Seku1$kgPc z!ar_P`Dza;M*5HJY8<`h92XRDlp+E>31$#<+0=@PZP>ZczRm9nK*R+_K{)Z zU!$!!sVK>*!~hSy5+?f|jNpRJ38rrPqD zj9`b)X(I}ndj*cVT2FQ~5=DsYx2yu2_lHi(EJS0%Fu8@8@tf77|7=4yb^KYs?SiH> zD>B@r8t#d6 z`t2la&B$!chA1_t=fZj`dT`qkh-%qxN=wT%^+if_dQ9s&MnNkvT>^qh1<-fX0In`) zna8GN84Ddgm+Tf>>8N9D!o-p`&#u9i$V5u-Y3W4q%1RnNGRW2?nb-OE*iYAT;=MDL z4nzY_gDeK;@FU&ZV&Ul-&`arywX`7IQRBKAV78HAfPSGXIBs?mb^xvmrQGkstu6IK zU4B0(O)ld;1V1h#LgRJfo%=nU9vb+!?|j;9^mP8XBWKLvssrD@FGAVt<#le{kgA zmmkk53w!zN+06yW%RGuwrRpwMbNbDK)90D7u`Q3OJY zEJrI9ceI;Id?^K%)8lwkW#^YYLQ2KXh?$X8BwE1*@a;us8^=uZK&1J(tDdmVBYej+ z9j!lSD`NQCUGR`o#9(`!W?)h}N&@B9Yz51RpY2C%g?BldpfSQE5J`Z1j3m8kQRiY@ z^-v46V+quFz1i}e(vi+d}RhebV3=Ep^X5M2Q^!(1GOb_ zt}t+&WqkNKzBp)sUE zIpDqVvo|lq0?NtFX6x6Xvm*kuO1d!f@ZL10RcbUUd+&{gKRbcg2mUN-+a4?f%D}Ul z)ezn;YrCAjIP@xy272+&R@XIhmo2ly=irsL@!MbJyH9X5zP+_asI}T)qd+Ok^L=)t z8qK<6*kRo~uSZ0!qW^CXprGc#Mlnnc|8k$+^bIn`6J_{!+TpFDaX&SVLl23|#T>{G z(I)n0T#A1-teqDE!nlkI_4KLstMF{=qF|QUf#am3zV!{z6><>bGvES9o`Z{ePiCju z=UZCWr$PRcwb_$c6CJy)G=>{m_Y6a9h@ZyidB|g&7ESiLFsUFe!n1v#Cy~c1N!D7& z4Hu__1=`*{(S_cHmr8L+dH-K&22!$9q8V{s*b6Q2skUv)>2J#ODWOUhh*m!*Yqu`k zCtvI8U_XoRr^A?lo$jRyK573-7FqgKG9wfbYHyFV5F5H>7DA*opHH6vtsM4+*bTxb z7ndW6*Ram`j`qNMuacbE<-XGdLUK`NOKc#eVUdUU>KReQn_!e6gHfxf*3;}hqD<)@ zX_(2fNYTqekcw#h=YWrE#3Sm5ARKXZpb?}QqRGjU0aks~&l%~OhDA~B_utB3a!UCo zaEWJ2z{Yf?on8It5R6$g^_lz(1C53oM&A-J8zSvTG+$geFwq;JL%~IWVvQqN%iq;~Xftu^daKP2&Qogip@ij=W(;~8iRmn+VH&psjw;P7rfTdA z>8mEkVp=2gZMhR4Z-)Q_;Z^+Jz$I(I6SIVETHm>1RpEksh_7x{*b{>ZILTcDypfn# zW`U_ZNz(y5tc$#=<66u|q_hJC+$x1{a;4VjKQ)7~x+4yWa0Z2`8Ej5JI<8`^f3%|` z9It;=z953<27}Re@X@OdeI(7#N%I>GFkKnom7)1jU^=l68>(Ntsx@D9SAelA+8x_- z3l&LK<2FpSC8~X)1N6T6HIU)}yI1m+^L}$|`?9^RvEk#UAxCRmYo64a%lA`j*5p;s}LP}}$s$daCvt>0ie zJ`}PowTGXSAQCBrOH!j`-K$~Hg@yA2$QNCl1GM5{Z^GAeAEN=>YY$v>!vVzE&f#X% zmv1D;8sAg&qY#Dpy0E90LkHWuNa|DcrNua^nDM;Aw&YY{C3c#`!d-a|z3qh&8dRo) zzM5dDVDMFW?czOe^ejKaZD-vLk=dzO`vGpY6fanflhr2jDdCUTfjcj{RxA4fS*xd@ z-*Rz_fz0;h#)~O0vao}WUdEO!dN#x%3#Vk-Xjh`ikc|0gA0a)ZZEFeDDowDLmzXAy zFl@6b&~+cX(=GY)QYXL4Y@f>ub6Lkf*#1rvQ`}#;uj2upjtBj!cx$dl?bj^)sX*8{ z@*a-`bR6d0T0Z8u-=jkt7Aqtkr4!|Xhqe6*t;`U z_UmrE3r0yb-&uf;JXui12c{OBPsOKhbhHTw{t%u;b$IGVbqr2GaH4} zN1__Z@<9TRzuWedW_5Gs0kt@8;dXmOlqd_@)5it?W}r#7Q>9XA+rzs4Uk#s+Abjks zWVf7~HlQYyATL&sBL}EsP~YLl@}opdh-A>B^o!oZK(J{Dvd^)@iR1z9zYkVEW+5tj z>s$KW+-=n9;-QT;KEVk;vE<#64z#Gq`#K9mB_J5?pC-IYB|D8zz$#KC9`bu&NU_0j zAp>D259SFm)*&&W5zze%$441B1iOhxp+RKMo9<2U?GhHr1@emdCR(e|0(%xRbpJT* zUysDhHc$=O`=_3M+xK70-`5`F^pd3c!#1WtJu25dEvepp_o*-Kxh~Ig{uC}=)nv@j zKydr1c5IBq0|9sv+XBhkBd(_39lDC7l`~H|7Fw~IJSowTev|>Cb*6jJyPjlvrkmnw zlo%eRv~7*5Z7u5U6GAn-dv7uW8<#pBkJLA~13SwzS=C1e{V$9NL}V>t)p`)UjtG>w zG112ekN8|sV=RFbeC>h$yL!)~MIm3wy^TSrfzjm(B7sOhN(VLYa77AT@=^CN&`jK= z>rI1w$X5$|weWK%Iw$td!2ljBHM4Q4XZ@5yf{u{5s;qsn@>~7f!+8nN%ZeXLR;T}e4$mP$cCRTZ(R&K)p_s9E;BkJpvs|fSdOuB-U=cmr>pZTIv|GdpAwr(kny7*lq5iwMRhkAQ zjV=+4U@K@i}mMw0{}~SY#pM&)MSxy9E|8r-M$CV_otA&&qES(SLIJH zW<=Q)?x{<9rwkEA7DJmd69EJWf*2kdi4nXDSDkWV^gBZnkmr+(IUDYs#w@~9kr|8u zTbI}rm>sXI^czj*y3B}VOJaB%Q&XOQl8jD9%ONq@v}b&0W-DJD_`G23Rw4^a%2x~n z*!ep})n*&sKBB214l#5IGFx@{A8x=-wTAi#f>l$&HwC zZh|KuhVbu&cK}(VgsMR?DSFii9kN&^K?6ltPfJ<;H}3X7gH4}1-e}p_TT-p`{2J4< zs;FA<&$VeJ&?1(4UN1XYw6Ilv*Ro25(}$2R+DK}kwjx;`Il3njrZ%jthbF3V%RD=@ zQg~Z7DtZGAmRg+h_gSwkMoWXRCHEu}xC!!e4)RxdT9;il(E@lC6ZNJ7B@8G0Hw_HY zkA_^7KyH^1elD=qIXEOQehF+`_J+)0TK3|dJpU|;CS+a3&q58-CFtx(mbk4t&H6yd z?p2mZGid+J+6KJ7Nmycx>bYbDIS*-JKQ9-vkc<{GoHOf*f z#MO(H2m~D?E(r7q^hk6dmXw6F9|iqLRQMJGtDkv8n4i~gKcBxHf-D%r!}WAhM7SK( zGBMiKyF=G5<60U^vG?Ku^KixBcP>#i=n9DKMfpV0k4qv$DEP zHb>2g;3AXFoJ*aAq#WO?U&+yu$A(z*+32uULGBog(FBYv1RTTmIoh3xRxGZzG5T^4 z^_U2Oh5d}(TJJNDF$eH5lBGmSvn7iw3+?EJNi4hO7Coz)T7$aRS z4kj<}rEt;&$_stVviNJ&Ev@PY(zakEyBS<-M*ir9rrEGjzBJTbu388oZM9fT)Z2O@ ziGKoll+x`x;m;inFJW+ol4{QN=Q{INACeehDAD36nL`U^BXYGsn_`IV!RuT>ebGaw z)=ERKzQj|P1OCDM6;locTNEY_8+4-Qay>jw4aoD4_xwU9K5Gr5)bxb9wIk0Vg>kL#r#&oS=N_V2#wcbxcz8>=L+(&2sQTalLnY^FG7s3});CqqCiqp`A6$%}M8kZjgWqeL4N_y37=f(2g==w{!2;%pHf_$AhSv}zw! zeBZcv^kgfusca4trF(JLdBk{Y z;=yBWxzV`No$tUyn}Di^?FJuhgSF{*L_~%YQ3eZBRCmfDKX`=?OSd!aAS}?e)!E(1 zcm@*Oa;`#KS=-vzweP0to{+{e+~_ICQafm{ydT$&s2xCEXU{kOq9gr40SO~)ce`KU zCiQ#6;H~Ksz+TnveG!{y1B^GAcIBiU`C?Sz#I+ghZS|Gro|rn&oN&*fuCo{63dOE3 z!U590-s!=H72kN<5aW{{Y0DS<+ELnxPq5Q(O17i_^)!otvQP07fe7S=Q1* zNT7*PO2_13qaj34d~foz%;ZIK!_oGKQeC2+*%my6FW)+!-BM_H-YYTM=mBF}I@p+Mx8_}|KM6auU2#~Ic`#b_d{AY5EL3|BXM$aJ zXg`G~Y3ouw)F+$>9|CH=`bG8CJRa`lRo#&<4mbC`UxBA0pE(#5=VjNMm!0~s=3vXK zy=GWEHq7v^Z)G8@4SEQ=-8aTG^rVv@aBPKeh58Z(#RWc)`VuDPY$Qf6@lD(UJ#Ok@ zF6KB)8UUwu*j{Fu%NjHqZHb*H0(S<0X5_w7NzI)lgOiO`GObrc4^fp>IKx)&LU8y(;6m zFIG9++->wzmF8o5dTIg}GQvsD=3x;{O+HhilJ9g~7w5ceuWjXicv`xmhzMOH{@tCP z28lSd8je!0v{>zff>XMb#o<}q5CxGR(B@RZRzl?Am5s%WEYHt%}ZXq zt6X7MX^ZNfeuvAbeRKr;%83LNY?=={Vw51Bs}5RW{q~z*!%f+np9wQ}njh#|Pw8}h zwGJTQYXaUn)DfG#st(2#w!hkZ7H0B%wei6zE}p&EZ9bpLar4-U%r^Yr&c*~ogNTIF zwklw~CPAm5p4S^5n$>uNStWAzD{U`N_Z0vxeDgE?aIMWc?N_wt@j$zc9P6()ynuFP zzE6ZMbXe1snF%UPF?C>@7nkDo9%Odk{I=wz`9ODC^z16Iq|2ig~INtdX>~ z)qyqGKgGd%se;o|uB6gw#Ag-g7&nWsPaCbkXsWy`~Pu83CwP_z%xs0XV z5&vc9#<08zAg+sSB7%UkC7moE_mX^wYyFok%iymt_EbL};o)iusenh2oV&)o)#$ST zV@5#jb$4`Jhv>oya_{<6{$9m5{h7|Mf4Xep6va0H}rfBsUyI5ePw|*e1jd{@s-Ot zPP~T0q9~BbR(EQ~1V`Dvc3AMID-HMX@G+TkA7pW2A64(pA&L)a#+{aoj?dTHM4m3^ zt@gmm?o?!Ro*H)RuXo{3p{bv1{nu%v$X{e#{C~{7`SWGlRUdY%QhDNu77dLX8Xh$L zR8M}gK;)kJ94wHKkU#?xh$keFz<`7V0vUl2G9V@i$zl?-u?@y%2pEDZ4vtgAMWrfn zh*K#isY)uTRDRAMl6&@E!)Fcq+}jUVDnEU{_Y8Zlvxl|U_*sVns(&OWv9a^*&DP5e zwxBn&*WlE);#3rupFX~yf3sa22lpGF1)B83u=tMTVsk$m6F%SXCwErQVnB*c@6-_r zO%>YX3p(VjJFS@%@i@Cf$C)3d_K86^6QaTHRsW?OVxj`E<7 zHv^}RQsD!CGdqpkE=cbrgC(kR_0epW4DHc_$A8ZHD)moFR}at*JJ=GB{Hf+jR_qXLsl~c z8}@)9WQ(9N@PT=Xpb2;WeY)G@oy&zM=>iZ@8$O6!dd58HtQTSIlYuR)?Iqpu1I{oI zpSqzZs~aZwkGjYf5%w!@tk*=xeq@xDC`!kv^cwm5ikUs+QT53@RK9ch0RMYNK_hwIIR8vl{W z{jeY+0}dad6X5UE*6xMNtG`whJ@<{xWr)n}fxnzhd*LE(<_;&^$ix0lgCrS+dxO6` zx<@k_%dFwR$JKM+Jx!v1dfCwJj^}&+&UQ|&`Gy-r+c{`6mcu>fKJ;F=GvZ=(TjQ>I zdNt#O#N0KPFW-EBvKM0SGN*S3b8Qr57wulI19PFy$sN6L>HjYNaubt%T_xp??h+7T zM<(J9TmZJxFjYO3-*=K&BkJj{y+7-W`oJ9hGL;mPYpZJk<)=G(XYP>h11@U<4AMK< zw>Sm`XWo6imM$zhi~I%Cn7s8QU7H5^n$*IV-3%-|^2j@4pN*kbyPf+yrZQ7<_whyi%aV#eZMY;1j(ci+&+Df0k?y)U;tk9bS*hzY+e0zpE zc2L}SZrn}#Oc9yTLEY*xM~5tqq2^IV7M=O!Wo`IaT6?ozJ_`|XGX+Kfv|HN zenf~CtV+f$r`<3z6yFTU>V<8APZ&%m>7d(uPmR6OE&q_t)lBm7FG zIT{TCD%pf55a#q+YNK?f28pRFCGfJde*0`nXk6~d_bjGL994KE%xbdQO|}XLlqacB zv6tq)lpdr4Z)e~avJZ>JcAv_-^f2qSbXrXNhh092K4vDKD)oejLwq&(!Mg7&`tsj~w`^fy5|amq8Ke$`!lomOctBk! zh}8}SsyE(+T-}TS&ikxhW-Vela|1K5a$clZ9YK!8nq6C$^~Uf?Gn5r^)tTn7&7fe3 zR%4b`*mJS=5l+5(IJ_%qAFHcqRiN%xFmK=u&qC`11FxUC;@4V^!yPf5rr$kSo{~rI z^CKPAmDo%BcG^Yb408wAHJrEm{;8^4J`I=0QZ5jJ$At_S zf_5X9vqY=K6gHM6vXlY@58#oSflVxx#OQ^N%&}L7VkFkh`rJ0sWCS#SKaG`2TOw>N z*!?e~n})ubcf$fA@GK2cDOUZEy=S>ujtxC0b_7=$Klhb)^>Tgg4qw;{ok^3%>h9Nw zH7cB*DCQqlYYVfO=F^w)FDW#`r5!3)+E12FHq4jv)5RI8B_IHsma2!0W&7Tx=Xbup z?-i;xu=24vlTf9VLg3bAf}Z4S+v(20|L$bp?cmpC&grA&0`XF9lrLX)s(tsukYCu* zl}p2SC6I6IiD{F%q#iTgJKS&t>>_sk`BdFn;`E2lY7|tN9_Hlw2650<^1w&%9&Ta z+(@oPY?a4F>9f@xg%MTt|DisPCXA)jpV~QQ@9)FSB1=`3+SP%_61_C|Ta{falc2IE z6N#F&=HG=WJ;OH}6>Tbme85j}wTtOYs_;F!Q(rEx`D=T{k-CEVPWnE5Zn@C!wb^PJ zyM6CJOBYqL#`?8oEQ@SU-_)z7ArjPOzYTg*HEx&-TA3RZIV9btDxQ0`1|L9o=yLhs z%7^w}{pkh$&J+5nimJWnic!~JRhPE4&iZ-+(z_NS#JUjsfDZ>j3v#oq>KcjGimT7` zhxZdIyljA9aTv9yk0fyw^=4|Vzo+-D1;4L)aqz4@LpO&*=%RnN>8 zA8$pnBu^dCl_l8T*Zc5tb$j*|uq=(>?GEoh;&|15(wZQLE2`=jF_P|SxPO%MERP)b z(vzI(BK;ni`#>u(k(RB<$I2ZF1qpL)p4l1G|1(>LdX55C%M z62I$iHbw)NjJ*@w|9Hpxq~uOrT@T{5=F@&TWa}IE2eH`^zcJx%efuW2fB49H)V^Ui zE;1&&6ZV|BGrB>5-56U_U$P~Cme>w^O&8RI%v(e~fJzx2H_ta&}&8_fm6r{Z6$nF|C?EU2adQM+6Lz>^GGbW)aJ;gKm;z6V3F}(v(5dIGA zEfqy#Bf1d$9JWrzH0V0H8Ba!cbM+J!Zu@i}u6dF2!JIy_e?;p}P6{49dAA(p;qD+y z41!qrsy$c9H{uSjOa%!&$d(8_Y^$DJAp1Rt*I2V_-HBfuPv;O<9r_OAgX`gbd^&z^ zD&EK)(}=Kq`^9ki(Pp-^8~~}dX6 z?v3u|zDzxlbo~2vbRES;fUxYf(Xm}*WZ{L3XGYd!2Ot$WBrJY(*Xjq}HP=vtv0yOw z!sXS!%hs%VVK(ckAx}I!e8kSamm$o@+eH)Z1mlL@@hsk~mF%4<`TDYi?#=dsUq5qe zYs*1**F4S9ZuP>_V~8uZz_D$Syhe}*3uRUnIsXV)(+j#*_R|kq_ z_v5v+k+4CctQF`Xog`ddU9aIt)XS`5-8GG@XEWbL(789*3+3bbaLs?5or(L|olEZ{ zUUs84w_XqOg43l*5}5%S+57^YJGUFEWbne7$8Ht|A*<$|yI}f|6L&m)R(D?H>Q2}QzuZeQxp(v$ z9H>=K#9tIl-tU1za--6B7k^0BJ&Ro-}pF6oHhoIb>rO!B$ck~YD z3l)RBG$(!EfeYF(%MfWDpC@+ZZzS$hZdYsQf${jM_I;lAhGF=Aa+8n!Y~80_xfRx6 zGodR`Ey88pE{Q4C^^+;A(N2072v?WXp^-DWX`7!}T^W-XxWdOhe}~m0bB#BKE(iA_ zn5pBMxuch5Z`xo==ux?jxyCxVUNG(2+qjqO1w#jENwB3=fTmIUh>lhla)^8Dhv zjsvrSYMtG4GNHWBgzcHrLP@Y1MS6KnT3Fqqj)jkAXxueBrmBP{HlW^LhEbZ$DFZD1 zNqTGNT=Fk}x4Yn|A%RsNg7!tsF0xLw5b=AYd-U)NH$>J|9Yy&y;HJXrE&Mf`_C{pz zFXm7j#91STDbb0$s0EZ3dTWnUtT$?8+4RfLMg}ds3d^awx zyXG>pws?x;b5+-zi{b|7Obo{TdP8|Dt?t<9g$WB4GVX4=FuisfU-*UXyK;g^keX{=D*WnZU zV&k1`tmY$Lvpg7#8CD24JGIvf@ZPBZ(z>D2Z8WMS*PL3LlvTW-giq}9d;e&}C4j^| zv40mgRJZaI`!H|x8m;A#{}sY2jU^w238ZfKK=ImicbWR>^gmp5-$$3Jd~}ii9(CtO zmyLU&Oc4auEERjUIg6vFqScg#8dz?S1#0@k60(RS6QQPp4}diwsnJ77jUFX+oAXCM zX}%+T1Z72xgn{766!Zh6PDtxBq8vq>_5Sabj(s${Ldyh0*%>?rN-Ks;zMUZ1!t#SUX-7@--u*I!sxPWUmRC zJEb$E$;z-w0{qHT{D+p9euum;LksKEtjt>8*R4rdkd;+lAH0#$8qCDoyx{Kidu=NJ z|3cy?0*PT1DK)iC)7(D}H5nw=t(;B;J?d1|Sj0 zoCb@GF#s+IZlNvg_qbJPzf0cUPXnQ_O%S9*Q6Xf`&l$H|ELoGu?59mUF+PH(+WrYp zfa7!v2bXlG4mNEh=xopilr_rk9Rh3#a_W`y*+0po5}^qAat0~|*rc~fb;waLF%=i2 zB*@_koGeE%bhJjR5V0?*EP1LqYmOhE8FPk*$0RHLlA|MJd()yG^MvnuI`}<0tFMBF zWCZ-41^BFoHh6y}2f4#+Pq2|G!u7lW_(5+Ig-6&zX8)W%B7NDzML=^Dc%y!I7mn?) z0tCOqtja3eb9Vaa`=#UFEI^&(YOLmSE6%H|G8)y6J6n`nFw6Z)?v1h^r3Xavkdu6d z)cOKv{8ROHbD$u?)4+RqAkFym2v6@`b5(af^fGOD_KCoh+A7cX z`s@;(9W25EBWk@|-oY2hoLHtuj>o-=x6$J*31VQVo5G3_IgaLF18}ikj+F1!W-Iqv zVQDRfTkJ!*F+UU$2pK#3+~X43zkp{-kj$dMJzG(5Fz8QGVZMU6=qdeosNn@9gN^q? zIRaIJ67i{rEM);;TiJWxnf>?q+QD30jQ9;k&*10x^_3fo-{iyfIM~TV-6131P zQ-C0Ritx1EKP&|KRl85vz`hEd&kQprW;m6qzrBkh!1L|N+q z!fFIgBRgaAE2uwx%=97?%PYvB!}S(5qT}T=+MSAMi--7zOv67Q8e~T<*A&)?kuC?j z?IKK3JcEN?knFRHclNDBSDAbj$u`iLyM~2i)=41tyV`~O6t%rl0NAh)xSpH@)-Y0o zu|B8XsJ|;m|KIjYtFh1xnU3&0*!3;q`Yq zm!7K!XVK7LycrFAv~S3kqa;ye?q87o?0)!+x^V`OrBt?zaNlj+7n6DQh|FN_Cm4+2Hen} zR+5Gw@I`xoptT;z#DhJbr-r$1boS9o&$|z>$PW&8nk;#7mH z_Vaiw+-~MtEsF}GNx;E6E9DBq{H|QQjwqXs7md z!~c1qQEJ0TV9|oXzE8nNs4;us(0B=~`ND4C0Sr@4p%I3;UN?MPgpD_tj&X;g(@#F6 zY!~tAkpbXLAnaeQZOL$=%U|LXHbGCfg4K3syB*6I2G=pu|h9wf`YqafIc^I8Rt%#cmj84Vg z{xj4{DtH`fuzA$UkQ}{g>I%o3oChru;vt(#hZyxTwWnv~gMMat{Trxr7r->@KG8#G z2IUSX3Eh(9!PtxjGjt8x7#y9%)WQK)xAsoz5AO}r@gl~f)EhVflbc|CTtw4K5vDXb z8>=)kTE|{$dL<5BzN9jZ%E0y~U(HW461ADR06bmO@Cbf-t&W8qC4FLN9f&xld_oV$ z>1R)s)1y@|Qyu_d>?#RBVVBBtpW(J=;@E^YzmZ#R2QpbsKfq5# zp!w89Bv|uycNwvMFdvOdSgp8HJKR_aU1=58S)fy&OX1YxtT?BdfdY$_G#q`K?mn7W zk!wEXn^lDzOY5ZHFUonU_@%aohT&nSS&9cL3&>e%iGELDNDv*!#eH_NN#nG zL6~0E>|;VtoY`_Um8YmvjITp;kKGmC$HU{#5(TOLiHhm!noU7Dn*z^VE0A^g*m*Ak zHW?>U8V9ClnIL(i8Kdm7A}*Iw7G%NupZ(oNA-x& zaVb$S&n9ohS1x?{_4=T?xWU<^x*|rIjO?rKfjzvFn?iT-q6`K>_Yun5gao4wqRM)= zW8F_i#-w$y1=cZu-p@;I>-RDMr2&~>4GTx_!ODRBwE;Fx?B91TEr|W4hcJVYy^0)l zv+w1N7BVV-7~+PQ^X^z3sjiN0owN{Nk(^({ouD0|);2nGRh1sr*I)uRh`WBJZA5f~ z5zf61NE1Ki3?~DWsUvv&3BuSHUOdi9zEv}?DXg|~S*^_+a;n0iZn%-O@G@#f)Ee~t zqPg)hXeCO<97A%Bb?!i+Y9#V_#f+F(ZW;D8lX7!h8cqr7A8igB+n1{J)q!U61@t;e+C^HXTV=%SaQm1b zJ4agqrJPKh3vcp0+odAXclDvFaaS*BT`wyQ@-Ub%neyULUVK5nhq8=oy;h=Q_bj3E z@3NGfw5eR{%U?>LEN~C|+q;FRWE1UwFBhH|`~48xUGkV?GTEdKtMkzLJ6bzi$GQQB z#Zgf3BF9F5`d#QH+C9fiDnGD0U-gbfyK`GYE%bdN(6@x8i&9ARkz?@v*{ZH*6Dgr& zVWekeGXIvzxG8NZH5gnK*_;`=ggQ7Io`<$gRmjCA9BaXw7Y^;q7uzif^+SIms z=pyCN+W%T;cRt^iTYGAJL7M*5TP>?QG!PHL<}uhHs>q66M%w4IO6` zQCp6fkOuEeD%1OSr5};KpfIj8^(Dsf!G;g^su64O!U(GD?{^_xYq+wUlAx`tp#=vn ztmwu&J1_1#kw%nL;NYc|(6ODU0;%++E2~SBpMuRDAC|^j-d$(am`wVaLqVnr^SeX}R2$F_@)h8!#`*)`Zk~F$65`l{L`j*iP@$*CGc(F~-^K zxFD4YOBIEEHR0Z71p&7+A+X0@a97mQ)d}suYBouaFQ*;{uB%*Q@Xu^sm{b$lr}x$L zI5^H^RY_E(uzZDXn1};V@Jnf9X7&ASBGQOat}tpST#9DbQ!^Z4qBRq_jnn2FzfZsH_TcgK zkZp0=R@h$3Y_A5wCtve#kH6;XryRs2KELe$t5)(Pv~*wHat#8#lz!lh`khEq#C?c4feYyT zSH;KYvm1Lf#%HCjz zsD9{w5kJR;7v2(oaj+;K_YfGHX;3@4zwXF&8a(>YTVa|Qg@D5Qm>G8j_(jkck{IRh zL!uPr7+0L^73YR@xHw14?Lg9a-r9AnuAXiO9~S*P8BwUB`Qb|O z6J&_G245K(Ol7i2LcOyP{$il6=~8V;lA`EOfmOS7BP38<$r#}KK1WSVZ5}}pS>W*R zYycUi^9G@0D-lsMItfz4f|P@YD$FLIF62f?u$uFSl9OJ0m55inb4;|7Gs>r%#94D@ zi?mQ}10R!K5yi#kpqk*7G%X~i?#)&ccX(hE3avX#)ocK_TIX;ku;6Nod?V(=C@J1J zS9j!pkq~oBCP8|H-e}KXnry9U%*OzWpL-0Fr_6kMKrB)^HPvs43;WOkDTJMZbJtn> z+h9%fb%!pX?0|_LVhMlisM8i}#}x3Z9}n@FiJjc~CqT#zYst;Z95kHgGP($LtKZ6Jr*m0DtxUzH}I@Xkn#hnyvp93t^#3Rd$!)(OleG4T$@WIpe_@b zG`hw#nx*%Vlpb>mW2S-Q;SD!aE{L*ezMda%_Z`o==_vDwGaHhiSx637`*%Gf-{>0_ zQ-cKYEhQR8u!Umf-#KtB%h$|>y;`0C&wU4w@5 zy$Kb-t92DvCCLYVPf(x;rDg`E+q-&u>`Gb0;JszYjL6Hy;8=S2)Q$2R+Hk579IEe$ zI&ijHaql-)0vyY5Vjz`&hf-DPkp&!J%#u*M(dLdiL9z-ytb~aAk%78txE2CcbbKbk z=SI9E<-AS;8$5V#zvJ}*F)f4SG0cRE#A$ioj+OG%ER;divdQ4T&nZ7voW@`iKh8m) zt;wSWjnPu2+UQI?{%=pdqLrh~S!=WaCcy5IS)Q0fd}D05KQ|b|0(i@ad?KGxH|$4! zlgAF)s(4LabWd#h5oZ8$ig~2ooAf?r=1Sr3bvh@Hb}0SI3NzV!e@6X8udQ8F&&M*K zCG}s?#^>B7%A@iIL+xT+8mWa0%@YFgx*u@Z7Vaesz?k$4ycB4ok;Z#)bwCdBC#Gxs%x1=mo(*-2ysc&oARb~fd3)S^nu?eZj8AnN$WCwDeNMEbn zL_e-nT=NU5?7KEBPd2s6ED~guS?4b98jrM&`)v8WubMqFMZfO*G>kWH5@7%n^G}ww zXvYhhhYWA+Ldi_?UgA$W7ia{!v31=LsO7AK_d} zEK^jER*+*Opj8(PbPDVD5z{-sgybezly0pgWRB|8nIU5C4yT3760}0iF%U0GJaKy? zDp9sjZ_mNF{v(3Sj^odVvpH4%IZs!?{ZZ5SU#uY^1 zzG$sV)UB_L^hnktaX%a9U$gq0Qh$*We%Lp(W*^pBg~X}yyRF|yOuRkDFrKj6s?XSR`{oYNi^;Kkq= zp=!^-O=Wzh*kNthk0Jq1#k;Oq)v;d(Eu2X=!yaUvu54iz)tKs)&J}V({m#Oyvg= zSz6v(7ej?=4jNmQ(@$t0P7G-ofKt8XV8yk>qT+90v9|C@IZeor(-C96koiseoMamh ze#jHWiUp?1q}3`?GOWMYHCjt9>{S*g$)VdC)yW-2B*b>dChEs8K~ z>@eEe!Z|259S=l;&!^VP2kzp2zms$My1#)p##*I*vyW2=igM#Ab7P|-qjk5rw(1aW zJ4m;=>N~CbI=Nbh|FiJw<@f9Lw;U4_ZHP$@<1F4B6{#{Pn{Ntq0X2o;tZi&~R$BWq z;r#o{p|QRhP6oo9OFGv(4ohP%z%C5Db@n8Y#B zvs0EZQiS4#CvwzT`h2{%e1RE?$@a6!{#j8GC7i?~@_;O!=+P z)BCtE_e=Hpo_}9{e8yaUT>kr4`(sz4${sT#_wnMCVmbiALE88&<`Lg+iFQ&vhIC3g zg#b{a-m@`JV#^L4?*GEJpE_f%2Kd~VOmxf9oJJ$5l=?19?rbqG7CSQnHHTp{2z15$ zv8eXb(E2UD&a2U4Hb7ZKpbR;+e&2@;1;@Yux^}&^lwqt zj*=Ay@T4OaVT=&(f*_LQNqz{Zl#PJ792hDmbI=Md19_Ava1jet4*E}Rr_spnMD7s` zcn&TI4J?tEGw2oz8)4Hraak>;UjZ_s@`e_SE;s_t0Roh9C9pPdf=1pbA>%evt3pwX zshS(xD20n<<=>Y%b#Nbs0)U++mN7Q$4GeYcYX%@Hp=VBSO8OJb64UzTttkoG;rnfC z7$=H6A)1W^)*V1gbO){g5jS#$n~(awS{V|K?Ry)WEf7cIowKyXs!^}Cy@S(;oXvRF zZVXfgVPtDj&c4SqV?rCNNPT8xZDf#jF`aYsapM%ir5(~75lz6LAUb3L#BOn6c+NBe zz%oq1Hvt6>>{DO?hAfqG3NyiG`EJLimqs^swU5@@jv%fhi`L>LCVQ|B5Gu-$Xq3Pu z#kyoJ-b*Iu4Bo#n_eS2&*wuohK%gUVqE0#sMuh5 zEBfEWK?>QXyir?gd5 zN@kBeK0SSKvsN0fF@>g7Z-gCkp2>6#Vj`KuWXcAZYeK2%=Mc{(_Z3QD)eO;Oy(TqK zRbJ@`qxVq#z@u^vQY+6NNEQVHmzza*v_by1CVLeQO2qEzKDWS-#^b)=>0IwDXIeli za`89FcsTo_E`>MQmTdl%hUAMeX|aN5g)f!!@td?Ygab#kbECR#K|+JLUt?6IM#qA) zJ3yF=gf!VgZDp(0$Ue;u6QBJ;)r7rv(Ak=$W$$>CdT}qj6&hYaWko5-6`L6unREuF zxmYb|@Lu=$ZHm@`?R-SrQHC)!QB96=&ZeLvc5a9fwCg3%u>@f7)X!T**e<~I@|ddz zR|20WuyAO93xD1QuMceRMD7=G1O_ILRcQ+fRYV`H1&EvFG zRzm@=7BXSfal6(nFeUER~|DCFnk^7%h0}}EpIt4v0D_{JC@NzLVajn6muYh z%@H>rtTkYSXu8$PUn9hBY<^jh;0lpUYJyxWc+;%-UEmF;d_aPv>DZ-?MLD9MBjV&p z{>K(#=Qompu?H6b-ZNk)vi6Z{DV&K|Vd_JW5_vrmFI!nk6rDv9#Lr6BqK#=}4N54r zpctSn&;tEhc+pu)S>97%9L%5YTwVKDb3+R#Wtb}?k*S@PwbbCg7xj@gW^lu8c881r z0CKK^OR0qd?ii86gN@^ zriKPr>F)B~_vofr=BAZII_8teB&&8%MY>m(r$%d)+&Eu^XCK$1VTLoY@sZ2@Of+EC zbX6lNw2b0F=C7FAj^;%tkH}`5I6+`BXo^dXAz5ezNmk{c;<0hU3A>Uo;#G_zG*=iO zH)>{vh8Rsoj`mgh-eVhy0DsXV@fW8#Gxz{i+k`#As3mqN<}jOw{8>hgNwkmcb! z^l&+N>bWn84C+knZLY^;1o?fjeF42#?H?4Xwdu;~&x#>e1dYm6OhWbKjjdB3RP_>> z`UZW~%L8IIm~Dc{Uxwr9Dm*_ipJGo1;X(IWJk@s#w*#ijvH075@i5uoR$=kau} zw-@$Ghj-|q`b0V3>z_yGaTn9jr6FeJz5;J-)wHHc)CQ4fWcky*nNMTW(DC*V4(2`bH6Alt*v@ zK_exVYEH#5b9w!||4Z&Tw}Dphu1gH&czQuOu|{g8vaCW+tqE1GUYgqLKXp6(OuUT5 zll*I`H|DzfI%;`uu7Kg|!+iU^|G!YXmofW~E|2UG+sk8tu(u$AZUid09qebD2pK~nE|fua-T>sXJaMo*G}v{HlKDBU~YUw zA4R`&Yk%}AO{hmVP582woT{*Y66wL^g==er^QPtQNEc8H>TMvg?IwDq1J$Jk49-2} zZ5b%5G>oT4le1=WVPiii?WaWw0Q=QMq(!jTB@}&=QJ&TQvwzahNS798$=K7;nBK_R zxgH&i#c)i3^v^jGrrclS(J7XIk9LO9mJ+#ZBWfF6S`udS@r)Fgt=ezE4q5}^a_0mL zz^(cOucqIFQ4A5YwK2G=#0MA-2@$-&$;HhD{hcjSfE6QMq1XT2;^;!jFzcyLMVVaGeprPjuz z)>d|8M7cE4h=0*Z$-?8hD;adutr%U=9g~%2$T9Vr0o^}uD31wlfJ>PGmb9^#6Ntep z^z^5{R9cQjzijR5D8?e!>G;iU5o7`JDdsOXYDN6{P1N659_AL2)n$dJ1qU;rF_8Rz zqeXMG8cZ5}brneV06i{LqwDuf;e;xWjL{k~I8qU1+MU{FDQeg6Pr8ts1C=S39-8y|&< z?NuhYi34=M0NIrw)*g&Jh67}EFeEnjH*#t=IA0E85>f>?J8|;lm@Kin?7rueD%3_Q zdqHG7bRPka_3c;1>s_4`w?(L-h;E7Bw*j=x2tXqBJGj(y4TmzVI|1L6=Qt4RQKAP} zz48J7RJ(`;BVv9hZ9QTA=z7L zWNc`Yoys1q^012krQPl}Q}GJ*5dJWnevF>8MW~OaG3bX$ikxGxXCGQveHA~beLG8% z^g3sCpEg)3h(5c4ZEFQBxKk6uH)xl#?JzziE>p=kheQLdL_6=uvf83L3S4X&=D7;( z6W1*^$g=0%0?$pB5!vm>pyBK$@9Kg&%Y(G67b^^i6H!b)Uo3CbQ=JkzATw)GNJ`O< zR`9(zP!EUnH7EptLMX`>>Rg;2Nl$%e{0#Ml%fLQOPe?3Md17D3Q?$H8>JHxrik;TPCbr5RHZMwQ|VOpH^czvW@_1rQ`6Ex;oM`_( z*ZjD~;^S5hKEvP%>loen|3O1%itM(Ku~7|c6C7{1By^h|KcYQ`W6of|&w-meTZr=x zc2=&HOlXeU_(|#*Ow4A*u18Wta~e{6=4hP=)g8N;{xROJ4+_yp$dI(szeQg~Q+%|2 zx~f&e7*|_$ZZ*){&@?Jo18WhO(Ev?AvcE6q=w!Zoj}EIf3knLxo&uw-s&B%9ykQj_ ztgZqq$P11i)rRN9B4u29L84ED92=a0!vn{qtli1OQOQtTEjgsstEEvDGGLDVN zAzV@ZvO<4^o^v*=o+}Nd^;jH~Dw==~%fi5CeaiHE72_Co_XQ?5CUToqT&RjZq&EaK$UIJPt*d=}nDp`cbd~#D z>vw%2U0&&7$+d=tYOHk0)~aAcbhQAJ?a`6TBd383<(Ti(&!m#o!iwljNviwi`Fw4I z{Zr*}CZT6-Z)J$2{VL(e4M6KO)283U^M}*t%zRZY5&80wpILub;Hl5(%a6-{f4pD5 zj-?dKyraz1gQx}d2$C`&YmoW7%=ttf89dMbG9wg?f`^3OWD`HOJ9iDsc&u77M$_OM zE%h^}BleVdrBOs2XQvx=fi(5qMO@9xF3KYH%qQk`$9l8GHWP~bKJKfvI5N{4l@pPa z8I+Xf225e>2+$Lp>lte&q?RdDO-=lnReSzW*3o8+%HBrmwAm>$y-ZeKHYhgz4vUGM zqB*SN(C^+_n>bc0S(CFlFujK+aT2`7cE5q#gTSTWAGmB&i;UBsJ^+p2B8WNl4)SLM zkwu~~ZOQK_s-E7~V|RV8jq6gLA!`Iy03nMkc0_8_w|oUAu@6vy)n%|B2Rcl_V|Hd; zwNCt?-R;9QQ5R8lrfkMy>wX4aDs=5uv`&{?8L&O1ke}MGZPl==F)0zPe6mJG6jV1W zwRmjPYEe4xxCgF_&FY(7#&#VH0>}RwQ-6`u-sGDn%gV|YQ0s9wV(<(mmb!x80&U}j@v<~0s<=PP)mgXU6Xs>w zndDQ~%|XM$I5L+5WaDQS4Ya7qC-qF14Q2p=O2mb%=T-48)a=UqaVNQqW1ZG7rw$)jYr?Iw^c` z!Kd3)HX>oJ#K1&<>N%uC#i|ohWAuX=J+8dynnmX~N4>Fe#WkD+Gy$M>*0#{Uv#R&q;Cz7P2CyfMNrjdU;$(*E?@(EF6hf=C7yR$yYt z--XFKE`>@o766>iOHw(&#~ShB6^jNhXcg&j(w;X@qU~X~zSnr#yw6qV&0AaIN{^;b zk|a(0rbx_WzhDNbVzC>@nsN7L-viACCj{~U&9pf;7u~M zjk7XJZ?qjrT?PR%U+hUIAtSR|Tm^^!1JGD37&3YOn5y9lK!Opom?$K%vfm5cNnds= zAK9_9O-!9`F1TigvEilSsuqJS{C~Nt>FTQeI21e&1gv+b(bx-$scK)gI^8aCJsl0O^#`)&PC;w0(;jw z`bPpBfQB7TRt~|2N5H1q&BiTRjDUUmBOt;?8@DLRJ3I-#io+&(iV;0g5CfR??@Qtp z(3C_sw9G||R;4V9sybfrZRI~LJipaqGabd5fc$sCy&y4UjF-KH0;7h3qMM<0W z3k=my^OI~}Q*Y8r3dKwG5n4rs7gREIzMrDUNVeNp1>c+56Ylutc&?HKr7@!Wrj5MhQqjxt3m@>YcAM!mJ5p(j~S3{9!+g}%k74g;wWcW38CJDG6 zLfnK+7jf!Q(&yP`(Yc5m^Wo2BL<|5Hj(Vc|SUlYX(R=TMP8e(zM^QfK=E0LO`+#lO z9geNcPFWXDXqCeUPvr$nlJBzJrI@lsUQ(o3K-u>>l|B{ZomuOyu8{@ONBvUkoA(y` zr>agr2aTi1jl80}0i73pA+2oE(MtY44gNKjl+9XkhET|A0r70(@A-Pu2+c!Ca3g27 zL$2tJVEIUrsHCb~rACE0#?Y$ssA-;?eM^{7SZU&(B4#t!P!f;4hmtMAs75tEpheec0G@(A3jVZwVNYXpt(We>t?@*-A>JV`!5F81o96W6viRmwT3BokvbG;(BlUTd%ZlO-7kE7KhH* zN~-R8`5+koz0VOM3_F%pMv4rpzCNy2P`wfR(i2|3a?yu{R-B0poxn+sGUl5equHYd zYiqBk5As;tJ^Q8ym?Sw{1SgA^Kdw!3pAH~=2uv8^N>jH3gN(UM4bU2sV{Bvi#(La* zjGKyR^7u7NgJYw`Q+%$`?a&#y-}}(M4QObUB(fe#iV2S988&XNy`~9$WoTYx17YHT z6}EH&gw|SU_O8MkA^wFPQQsbnzb`U5)MJmiU zX{Va<2x5gX@JHy66%Iv}FTUG0iW7A;KJ9!uMBIhK7;|MaJX>6#QA`#sOEcGee4%;eozI=Ik56)LQNZ2v5coy`_?ySjJNXpmC%$&2>55?;i=gcez}mgKMafT)tem zM;Ee(=-P6+)60c*sb>8Bm*Bhi5^a8ZF+EyW{yzB<98NW5x*Al~pMB`~y+tm|wI}J( zmE4^g=!ueob(wlwMLo~&((44vO7eN%!`gi;4d#o=>jN|2B9NDNkeaeFvufd!H2x^wa+c3V{)@7mtw*Ne)p5=yggn-|j0vW0ef#@>@z#`V&68O(i5dd^)PD8l8*`o!LR z8P~A@ThTVx3%u!t1r$~X`+uAnMcxkU1HI|)+#BVNdwM0$ften2M=n35mvz>vWH_8Y zuiV@y2YwlNS(lfHAuTDvdef6o@0b+=m;DNv67E%!a!xPUSNY{8yb(Sv(Pn5(Vb2%uft`3j_`92hrQp~3pA6T zd)X9=ANbD;&(`CFKV^YWxl5nIv}i{QteQ(lbMLPYr_byM`sxeKpEd295dwH;_(iSU z>*m#7zO>xi3x(7d(JG)g-zWLke0tHqz0{RM&Fu{p%Ij)z->hj{J8#*+XLq>%y2mS{ zE#qGwV(v5V8Wr6jC_K7RHu@9$6wOe z>*W{pdpmmzCDH4`qW0ex3HJs2_wJwazjhHL_qbZPNPV_omdgIE;^D2dssrRrmv$b} z(?(E8>uLQL$p@vtGco$U1^)I}K)*4(xmDE2M>zkxBg&7#a}R*uu4cGdOG&8!Xt!gnw*;o8Vn(N$7*{;B?8iQHz-1e|?4E=R3R# z9~)QrY85zK;lmNlu)_cRvB=JGybfyGw&Q=UfJbEZEvES&HEC{nEmF)V2O~K&;-gVN z7XL}ei6CP_7|s@5k7b2J_IAz&@*Ea|V-M{m(Cui9f#xN|ZUnvEWkGrzDMv;gd-`j> z>#Jyjt`y8cfoFFnEZNR>7+}Rs_2ZEy#TRbjqQ(3$S9gBRrl&WvLT;QkPWv2yBW*UC zeyNSd(ztaBrrT|Iwi`5jVeSP6QKhlri2$y8e65UE|@7;ZDtt0pIso_;0m+c{ek08W8i>aOgj1b*%iu;}!&IYl94!td`} zQiW$&Uv91hORTyge?6f>xX*lp5EVHNVhY4kI7`SH7=vW~_JpX-?8KNDtS(+$s5OvI z0xkZ&Z&;Q9a`u!nEubBt>>OnIoqf7F_g~nb{=^WH!qpvPL0rS6Zw6zhN}OZyhDCmt zClv$hW6JnoiHWhvm|;qK*`8tn1!+bIW}P8+R#0kFnF^3mQ)GLoE=g2I}#@5ezPGQ1dZc9 zFbEAkw=z`_&{%}oF3uo;0e&E8W)h3B(qiJp%Eq3JW49+OM0E*h^gg2BiXGxd>g3^^ z*;;x@u?FOuuhh0@F8MlXNR?*f4IEM>^i{SrV*?tp;SRx-RoAI{D*Mxy>3f?>=EKCO zFcnQ|BJh*{v2$ga#+%J=&ku#{7-;m^RvtJwDvN*NzvS^Xt?NY=(u|Aa56F-}ti1j| zH7P$f=yVPA=RRb(fa?G(hE_i_>JlG9+oF9v0 zdv?auKWP#c<-fy~YHUi;FSS@jz-jp{*IKF~cV4r<-9$mPC=XPa`36P#U=5_;kviJ{ zApe92r*Sr-=8+e0N%(SJQKq56qdJn(g>I24kkdkumgM;eKOPS@i6#ALO2}1ClvF8* zM^?mT8At@<>G>7kJEHC#0BGHUEEvyyB&LDuB_2&jQ9MpotD!|~ujger&5x5K7X2Yl zu!}O?n3DtxyYYXVLt4;uP_^fWO{XoKegsJH?%S5cL-?#24V9SMbzzvnA(md zV+{(xKfXd$tQ&=JZLSQQm?uI$f5IoCVZtx_-#4_S!Z#Kg#WH_sv5Bh+{8dYemqYr~ zds{S;o6zylK1^3y3uy|9<)_nr@)LTn?u%o?yA^j7+CCK@b=~}Wq{mBLtq`bGzB!f; z;?bK9lAjDpg+N2=)#E-??^6COlm3&YAIzW`t=;VE8npEx)XLn@GRSW8Ev|osDB>vV z{3AE8phaF>eD3e=rRmX1ESwum-Z7iQwa?|CFxJZeUx6i2s$}#XO23>aAzwmar5*B! z!*mG?b?@P|+5?-G)vK40n-j{XQA_b`nb2FSycLlpjyeJUK1X)=-yIPXCApRsoWf6C zmCz4@S`Lb|gDa~uhR$0cjgW_nFcU_Q@|E1lvf(`TB8tauIfKdI?Oc;SX^18+j?o*L z&Ioiyn(Oy!Z3!VRFU_QhNs@5uxN_1YhL;rI*zY7=9t2Eou%27i=7S>?M*|nh+!&Bw zZ&HVJtwB{jOuSFzp;*Z)>Tg2SyCYGmOA0M91zjZGDDGP8KMM5`1}bw^HMj7f_HY!k zQ0D=O_7i!hgY`0GJvJ?V3kXfAe0LB4lDbA)+FStCh7JV62tbHV6<2@YYMAqi)X3ca zctTZg`I}6sW3F@19}o;|X=@H*>i90-xeGsy)hgm*n!tg#MPQ*Fi46J>1|G!kgpCi7 zLhZI}IJ$T|f68>XSPk65%{Z5~vg(x*aIY7MOU$fa<_M?>-4#orqFo7tT~|DAuA05C z1#n(5)CXvvL^5%}D&Lb+CyR4E3bH!#tjYj#`GB8sJsnxoC$lhf8>Fiqcc=>yhkAo2 zfq_94=~X(xMIUW68mAhiHWz*r7d;lDNP~@LMI|T7KOB2=_<$jx~MHH(38<6h7$5S-nYHlZ}em!`N!M#)Pp6%~Z8Seapsg z_z~aZ7FMh?pGWI3?$90}8Qf_qi?$qP?{yt3e(#*AvzZ@6tE)A<9vIclp-?6o;6TJo z;fyS}5LmF>`ehE7_$Hkgi|50XgsLNaG}c_81@mgt?Ft)aqdpa}nAd}bh}S*v3DZUv zkE<5vE*$9YuuDsSr_iKc+5Lfp3^~Xhn+YB=1I`nj&jwh5gCqVE-{A;>$BPZ;-v@uk z7StDv5ZxOJ(X*(@@gAXFLi4e?g*o-vo(LfEZru(%!EdIj-D)?H*vPkFC>||Qt8uR( zOxAH|dF1~ixNTysa~I4Qy?<%xt1nc#_|&dT>%vZSNIc+9JacPO_CR5kh6YD~?6a>) znx7T_&|r7Q608-rWs-QFfDAb7^Yms+g^h4vOBTBx!IfhEoRe;H2XLu%%Cu~Z3CVJtL|DxONNW4mm$8>~)q+?G z5{j#7SlK)tB$G7=x|4Ehz^n?F+N|tvGZ!uk`D>*cMT|u;d9!+xGYu)&r>qs0+^8YU zT&gAQ~VHs;JWKT88wqdj4J6*_-LU z6}XR03iD`|7R4vjGyebH+sm`s)8Mu=O6+Pj@^O;Kx#1;Dtq!-PAQZRt|8n?kH>Q5v zo+Z_aMVzhey!BO4P92>f^y%w$DlQy^Q*~i~Xcah~$Sz}5H=-uo5LcWJS(=6>1pk{R!B>D2;&F643rf?{9jM=N zICRlR{@@1M$7GDJ)DpPLEYmukF@mwmCBJ+~QS16oG&GmVGHn7*A>jr-Y z+QfKtK6yjmk>@$9pmPqkVzy&esLs;++H|-jE*4P%TDLCq+yu(rxxLr7px+a$9;nkMb)9>bVMrHBH8#0B_oNgA4hQK?G zukN2@^rbGQv$420P2ce>x|*XHNfa0PhXZ*S4Vnraw*=@8mcu((j=9D}#%_JQa?3$~ zoVk`}`W%l3CV_odMw=63r_53yB-MZcLD(Es(&AO|?nWOjms&m>5pkoV3}f0<-LD}z zt`om6R@+Y(I7=(qBhA*%6)nF9ZpY#}NZ37ym1yOYh%v+^lK*H%9zwMt-rU;Yz(PZ+ z?X|?$KM!3u5IT++*yBdYALqbbtxEUlgl0qVjVbS7rM!}C?G{&tijdPIPUq3GtrQ?F zo=A?3g1XcY?b2Ezx0pXt4`(Wg&eu*%hez~%mO?ps(7AaIBu(TiiveEAHdkHtN1!t> z3mK*pR!1}F3eVsbLjFfr%KCizlUg>p$1jDi5;}F@h-nHG>=~F!b&1I1BPWPzgUchTK~VtKoEe z%@w3WB(9k-@2JcXj}Qt@j`{90@HX4pW(OY3qzEsfK3)kfpRIQE6{gu71CHY^G^)Oy zrr!?ljy%v9>bV#!KXWLi$6>7wT=eC={ojQ4Qx$$X6k<}HH9G3r&=xfQgWLB%&>-tL zcy00=FR^w6V8vRo;{&0?mR5KMjll-Y87U+teWM%tExtRSdAt}gNR^LOA#A`^RVt`K zgC@13hm|H}R3xgXp0IVfR@ePYZBw&HD(63>Ro>R?zsIzS*|t zM%|s~5_4O@(PM~EC#&h5&~7VpuFp7Mk{Q_YtF-UiXC0`T)ZuGbF zMz5Q$j$sTkS5%JldjwbTpWRH{0Vc|0*@mxzhd00hwyoxj-vV5yiMTN(V+iUKhC8>x zaMkT}Xw>(4pB6H#sdKut{x~WwQRCNcBIb$$)i8-RA&y;yoJW}WV4u*`5HfqlhR#i# zs5@-dyMf&1H?vVVW;HPoe(}1sF-x>uKeLy!!Gig_*T}jZS~CQg?&nbq--?KuNBA0l z)TS>6);^Z%EkQrGK~K_fMq5v<4Dhi)=h84!i<@C)_vGLeL|5$CNQ^;gVrzL{(?UHB zv0Qd)T>_&U`8kpRhMInt^x#4_rS9ZGEK4XVK5B2_JF^zhiWBz{~5b!e;O#(wj5LFam_u6@}&5<|MYP3-~9W-gc9o?w#zTda(qh4L*O&pT}q|tzT zSo?shL>IM3M%?86mcak)oR z7-~#P|7PgI#@Enh=6N*6PZ>tsQdsE17^F6{o%65-Cm*Gea2XU2$+}XPT)32Y*T9=6 zxfN!HCM)A${100qKIU7^)e_lsE!Yf~Qyw7`F*D3TmcJfo2>L%Nmn6V-0R>}Y;pwNd zrn<~5mAe1nluj_D#0Yhi&;8CoLC^yz3x@mirmr(2$1UE`s%tMcj_B?KpChf%oE8c} zOqE%zWQ}gU(Z=L$R=gTD4MUUig5U7;o~-3G^98e~GIp;UXTbxjOv?A$UNSSTI%Q}6 z78jymld2Qe!$;(M8oi~ezKg1a#PRuT9739DQbn=N_hKNEMCL1P5*w&~oY`#pR8gH( z%A(N^D0GRNIu^G$FhYK3n})@fu#nwZZAQmP&ZuL)r_n{MU?|9 zz?P-3al!8eW7AH9ZM7rcA|?_FzhjG-`WOY7Wwc9s1`6ue;~JT*WIU@CskVpAet^a% z#UP*(^&;cpS&X=i{b9D!Eg20q5Y)B=(OR;ns}At4(DJOo4BnDv;g3n#fMBKICwic* z_hqoAny$Z`UITX|9?He%ZHCjyfuw7DhDJo5WX7v<)5^BSDx+={H;vw#?G|i7z+jfi zYI*h~ndp0yBlEja1u7GW)$!tBspFyzim9`e5*f2MC6g`<(oVfOE>X?}W}8%$U$g{8 zz#L?c=yXi|dJ7esF>z=yJ0N)R#4l{9A!!ml<+uZE+1Trdej(Ro?{R@1tsY^Z6b3Lv zZq`~bC4mJ5WIK47-dIA;fa*<~^>ntac53b0spweG7!=LojrNU+BTs6eah;PcGlNv# zb;ek96^ytsqeD$hM5Ulw8)nu0rf~c(LB()E;a4N(#dgj1l&=WAjaGS@Xnd{CSmx|~ z_FW-!4Q@jb_WgO`^No?nUy>zi#yJ=kqWyNK5yu=W<#2qc;A^o(t{E>buVmwi`*dY~u|QLk1#?_1nE67H zmBgWBHqpB=>gf>0Ar+O2=R&Y{s1Z4`dR>RLk-0a1Dp3gEpl=(DS7+M;K(9Qr;NO1+aUp8wh zWUXSNOybj1=E1rPmkKewp6}=uyk8jF z3wcy7E4kEXyMp|33+zh+^X15i5JOiEq7q|mVh@e-r|mC!elf5uC`XrUAAv?eg^oF! zh1UP7Noyq3*V?!py1l!tX!mQnpbbdBy=Ibkz^B8{Kzk|=EA*gxLr)Rz4?LdbS< zzDRMvRrRDYHh&VKv2$D6BG1x7Oez?UB53CV--Ns1fKdPHkjUeVsH^~}H;u0jqu$Y}>Kgdx$llk)29jcQKBPFNDO){&r*q;*+*bz? zdA*4QOQqP{BmPg@MBa##@gL-zYMlTaHqat)230$asfo2}4`9g}^-U-eJJR5QO=3O0 zIq+&xL>*+?cDP+2dE*EcaZb0W$Nh?2 z+-ZQdQ3Gm+tU48yx>o20LA$&s>nEBAr3(BWQ~sJG}ML6Km|g{YfQH!!I`LT_Eg zg=}%qZ?nW;(1A-svKbR*6CsqF(Vso)>=BVe(zFA~=J7(6?&Np@R|{ z$R%fAUd}`G8e{Fxg)Y%C>dbcsX|k;Zuhd?!q^j-DTT+}-`#7LO>Zpuj!kVoZG{lYj z{JzW3qErCDn2UloxRn?IH^wi0oo(HX_zWchuqMq0>5w&c0Vi*=%pr(ZTJzaySfUWb zwD~kn1?_*Td44J*B@;)l+If_S;fMg-dx)t4zOoZkA|jV~>+9Quw|~!yp?bvRrknmPTk5oO$J$ zQtK3(%!q87U?Wj8h|O~bW`^Zd;(qx>Xm+yGb|cq7!Sh%tU5rMUfdKqLMoq&-b!*+v z1G`zOv<4(hpLF%929a4dU?QTsWqAg^<^=U6Q#(-6`rU+*Jb^d0g+D%w4T6Q54Eh{J z?w1egyP92m)y23pBCkxrC`74#XM-S7%6rhu2YVbsMX3cX4I3Z8Z_XN*NcM<-wpkU; zflq9;;;(5h`ndua!%g;Cw-Zu^*jcTD6@b5g15qi|Y0wriFoz6*b0SJAEhgbiWxyLT zR@@2`>2C=t<4AE5CL8l;ng7TYQoKR56~w$)e`5azkKi~9=f0_bO!+vNl0 zKvz;U=@?WL(?lVkQv;YfYr#UJs1uj1YMLl!Q6n{&aa-P>fY13II|#>$TfoC~J?`L4 zR-t!1X|W&%S-;+#+sZFTxGmUmnsDgOj4TCEJuP5MX`-)k@Sv6}5JXW2R$!B5y&ZmS zXT}3U3kfYBXmsRk?28GyHkt7)TXY9j7RlGc^)R;w?P`pC#5rk~hEnWML`HSu28QIZ zV(GhZ`>_M>)5ja_yKtl_NLf)Fm6IkS+dIpQ_jZ3U5D~MCG9*eL^unKQx))I5+Hqy9 zuMRzmTqC*U&P!GK14E@#^f%HtQ#u1Lj52=@~U~<8DVaJc!+T;7?^r z!h8^5N@qg{ol6^xJVrr^wyXs_OlhzvYP28Cx^5RWk*Jwl%NZeZ*cwbMax}Grx{@rp zNnr}SLMSHNAx>Yf~Uetsu2%*YumNSG#8I zJ+o1GDXds1_eN@>$19;^gRRk-GF%Kw-`1aJ8+syL zyQuOQHY~dkcmK%ZQ{xCXR`JX{mux`{6_9~xq;S{Jbm zTk`ix^--~6wIrH6*#FIW-?C%z8}@W7=z&?p#*`V(3gZ~@z?owOx(VZgWd}a zF%bLXLa6s0h|QDP;y&F?(%J2dGi)DccXi5gRpQvF1%Db0WvmB%(MQ6RQJ#me%vRN> z@Fk3$agbPJNzxg-t;t6V39{GOv>#b9u@5 zI1jS%%q=2#92}HW@54WezNF(^(rD8WoO*9t8SFU{1<5%&NW=Qi9-rnm!5&cJYK@lw+?3$de(VMc!D<~H;W~)AK zLKnx#(m6J`E&Jg%H34)pS@jqm5Fj2^l)*|F;7dN}Hh{o6H`cA(0fPxwbDrBor<9b( zO2u>Tz-SswCnn@GsxPNS(hTF0`u1YZ5it3dJbXr0D3=teV((_%nrZK;Fh^H_j=E^f-5 z5u*!G{f8NqE#vp`3Lmn}sHriHF?+^S_TG%LTb5QdVLID5rhrTYxo}*rD6$0dr1?jW`@ zo7`riSPUG_gx^BYN7@993@j=3iMX(0_F=?<3t8F?CXUMD0i??T%9J2%9wZaHVB-Nd z{rBBQQy&ZqgFWEt*vOEqUQ>Rgpe3y&MYM*8$b9bzLnS#)mJ@m6kK3KLj`LPx)YWX% zbBJc&vcOf#Vt90Z;tHWhLPu&PcapiS5CBet2760qZX9*(8N!Znf%*(B2W|1~ zZOR;0au*^5$IL}Fs*gYeDqZ_671L$&xL^)3AxDJU*{w_ttigU=VDNF6xjS&@pn-M9 z?5jp*>~UuGW>&eG4XZ@<7DTH9&9;>DlJA$XH1?wsf-D|_E19@5$vx32L=UCs129rE?(#)E{ZrW)iKsbOe ztiY%rw=Jb5(PX(w=5Z^7UxLXS`nEBaGl%6O?~Vuo$1C9kUi9fn_fgB3WF~y1-C7X$ z5;r^M&P)yafq)O26ZAcejx!-s3>V}Eb!FYBOs1%M=67ekv?9(doUeyjU9EM-NQ>_a z-8hfvoUI3|+9w722GE-;fafPoM>(=dpUhZp4vd9aT|!o~INe(V9W~`_HJXk4I*nSuO@?g57a%>K zzAJQ8hi@~(N4mY_jV{m&u4EfXmMPKF$8<$~Hi1rVFSSG}m*8+@;`m8RQ|e8LYUS++ zOG{9c3>`+V#sX-!<4TBB=iqNvo@|7?smI2*g-$cH8-pm_XPhgz1~J@InujrM9<BuBvwq~ys{b{W!*gMdzI*@+5wf_>W#p=w9_s& zMxPOD>r64C{HjKBvq_~IYHJ+8**+`LE|Z7A=FMSFl@%c2(-4b|hKP=88J1y>EqMpD zluC@f4Fu;?TQOV*tA~iZ_WIB=hCB@*1Gobf0P0AxeYb7OMSis`b+MMo;`K)0Fa(Ms zh$wslsV`nc0++$&wCLGH!19{=dT1SuOM^;TBE+bgH@E6oeXnhf0}g#aaVh{z4R(ii zApntk33SzykGNWVs@S#;j}#G}A44TJh4v6(zX~_71-wyKKBjK_5-GcGR3WCkQ3+zr zm~eShe3S#{#&PJvvD@IlUlu(-qW)Q5xFgmvL1&c)e2++xm> zOsT>|^q^FZLBz(49G3^kUg%xB0Nr?R`Q^~Eq?}aAWKrNG7D6a;y*$pDuo}7-r#gR8uPH zMT2SAYru@zDaj`_(OO;t@V2_LjTcc3g1gfFD)W*bW2e|+a-mc&AEAXslc%I|&NA9} ztx40Yf|U)C?F3!T8=1BAQEyZXW1m@U0~n9ab7^x|`T%_}lfXbYEixc;J;USxq4ySg zLtIPhxV-P5oEP6f5hQ9L(%xUK&@?bde4tO(l#rQ9X^2`uTVATT7a~?Ei}ywFSmjJT zZCgVhfBsUkNMFg9N6vYifK#IE7*cC%8tQ#*;6gTK$n%3Z$K_UKB4r-2MHh!xFZ5wL~#(aW`~9>MY8;8t$4(aiDVBOL5xo!TfS_c)Av z2|`^9i4I}koVF-+8e_n=L&5*>b&|Z6Hd#g#!%`g+8O7tn(z)%Ilj_gRGL0T2=WOh)j2n5vG_7TGHJ+_O^uf04u zehLy32$?!M;=O&H=|$9~D`AH#G`KLc*qRQg`d42`geusRz5ajs=AZ*9ayb&HQ3s6-x&H58L_j%+`u+m z2sSb1O-2EKlWj7_F3#-S9(3JOdxLRbby8T}wU$bTQnt7eWeO0dr@v!c9WwW;!#cEX zcx4Gv`uvOx6QpH-(sr5ZhO2aSRtE<7dy8+=@Pt7*n2K|<{x<8oue|FWwm}CA#nsPE zJ|2c@yAW0sN?((;Jd>dj1qvdvH*y56P4~THi04V+HnB}{QC8OXD%&8t$~4ph@oOP; zN0p%GdF4QnXU!m#VoE-`=>7tt@f~}E2_vypP~^@{JhGlx4V-&wjb?Uo%x3n5Bdy^i zU0|@>`gyx=Azh7xv(l2~BnuNNVLc2Dmu)Tf+1J|pi`A#VsT&bEAk3HyYqgny2RMcs zZs4UHX@d6##?x0q12advi_OAG3IiH`%S=D5ubV*9nmkcR6dM%7X`mdDAojPSphsS2 zDL#MMb+52pZR%kVG&u3{X^1#61oF%dncd=Q-cc)wxAO|H_a^3Hs_0XT1Ti%uvfN2i z?$;i~flp+OxRB;n0!Vb38~|>#!6D4?0R|27U3Bb>mYC+iW8aP|>-3HrZ^u zKlIz|t9=lVktHtHl;R?0(elKRhu;9rZ^={{WJyV|*r4#W7TiX+JVvTIq|6v-wQ;!L z2&NVp&KL^)=A;V@tjQR`PL!wq(y#X7p*u*JX|KL z!3sNFd@siC1o>~nqG}Df^4vmLaB-3-0?}lss~f#&=UxOu2CsUJke8w&-l4NLMBC=J zkR0t?+TF%voae%u}L`$w-!ATqnwTkf&_= z!gQ8+zth8B9#jDKatthm$;sLgW8adCwG{8eBI`H$_xww}Re(F#`74+|piJ#%n;ez@ zt0pc2)MQM}Pn%Z>>a|F-`{r7-2<~9Gi7{|T-tCcu*K`>9OWZz6$QoiouGR76fI?*$+0ms29(Wa=_6GPu}0r2j5dfXmLOsCM^3s z&?UG|6<4C=+lwF@k-5rVT5K<1xf`9cc(c*A&%ukR!>wTf*dh}~w{&r=3qg8wt7;~f z!90V2>+)iGN4+$(u>r3tfpavgPs5YI`Svq~%q(&wd+9s+w;aM866dmjUvJx7O@oq{ zZ=7Tz?Kwm9v(VH)mOwPwQSY0uCyFLS#S-jWqNB=SF7V!DO2*W;RdPIYDAH`lR-|1F z8rT<;9PB+-^^hSg_WIiwRgCSy z;8Qi&{LG4hj?~0PFel_zjd9Xd1gU~}@+*TJ6$o)(MefCDob3VViFN1w#V<84j$&(M zfla~<2Srt1T)KfpmSUec9~`o;&#Cz)z&MTA}` zKu5NW2@V)QCB^uFp4}P`?OS~K&Aj?~uuzFtn>Xv5w7y=f57#-Uek)q4gIUz(q?)Y6 zSl4V7)@u;Wm^+5^j5JhUBEBbb-`N}8s%xNwKBb^?8FLZvG3R?H^PBh;2-8cd0|6RS zRg=kNgetpQ7+=SYLQOC#?J`&?VzLHn2u|DsKL%|_B*#ScGSL8(s(lrHceJ&SaO@#? zq!mBqA)nJu#{}8&D4@uNZlx~y+V2W3S(i*Vuwj%XSM?S5MwW`7#s^YIT2v!kPwQNC zRw)Mhy-nN1a`v=PUHj}+H<7_bfZacKhF5q_6AZbH?SzzAK@kQRIpp{*PK8(vCN@Bb z!(e@+na%;c&EV~bncwF7tGN-Q5V@(b<&2$3pAmWTE$|)&ODxI-Rj)$Dmd`KEc&LQD z3K|@&Vu@3G=99z5Xzz3LZf;@m5p|R^u{EOC8i*vZIQE6P{Ych{!_5=4o?veDT10QP zmIj=cmX4X!+T^3F1}o7EM1X@LVXvEnBGqM6Q_Tl2&J(j)TzYGNdUdaj^p=+1B8WM$ zXVBCBmEEmvG#U`jlg2xVRy)|p_*g<_3Zp&PmL>2##-2l_&6~nYvz5&uf>|?VFh~>q zn$MWlXo5Ox>)J>%mp~(_+l|X&fl_On*R!p{T}^0Y^jU;Tx`unZFh)F#7TZ2^IxXuDwZ6UkBNE z5;W=nJwU?0(Pw8Pl29>B5lJeWd`^Y3Ba^1hVQRf`pPJ^4Yi=>yeNX3^c~e#4 z94*`ky20LeaD#w^BzPKy=qhYsWc*IkqUc+1=9fDEu|8IEu;gr36=ejaS8#i%6k3%^ zEcsQ4)M6m)$}4ZHL$SBk0LG$Nr~^u|*030jg$#Z!;pGqPeQ>2c#dlUM96gmSb=i$y zL^mm0{H$T9`@G(xyRzCBW}31a7BD(VaKb_{Ij@ChMRJxRlI+Pr%tKf-gdU~5}XUw^l82wVmk2>i^ipFMLV#jKX2SzyWY|-u+q_73TvLndY+0aQ6 z92P^{_|SP>XaQY3E-~49WsI8eYTM2RYD$oi4JHO49NdF8#>%$H7|Hk#b=1gIHnS=C zp*~aPl4&5Npk!zhpREp0cGOECz8t}q2fu_LtezIed{sQQSMmcRD^;P&1{x|1HdE>0 z8Ev4N-Ri>DNa3@lxNmi%lLE7WR4HhWWjeA1<3nd=N7D`sAzl$;tqbPsw7IxnrL=sjG_ylBh9ZVuTM? z_4bW`U@Y~mGrgr!)MgX_(h-H=rCPsxtb`!$2dOu}j-b7VCx-obO5MYBy~MHH#^>}I zdrk?g+R1CVixE@^MC618>kScr;&`ur#Fb{Noq8FodR6#2t*lOMTC|LX1FluWl1Elr z)b+wl8^Ix_RI!{amU~WAJ(qfnwr6MWMY6XyWd!Sy{8G5N(jD<&n1Zhl`N^4|>{#vX zMOExOlBbrbR+mMa9>(2}3^OXvHXx=0y_+iDlA%dvNqUz)w5R=}%5YJipP`#X_!y?N z_~+`1<*a#K1e~=?!t>cUcNNeJ&4^{1FHQb!eMCd9*}!fB;8tVQD(yeTFAD}sjhHF1 zrw@9(DJCk0C&4@Q@;!Tb|N7G%ZR9d%cl3$N^Bet2V!J0!LKy+%yJnpfhWXIET1Q3D zUN85HEx!gnR!vqVM@|}+KoD9JMWHqJGIWs({1#)gJ~8c&FEw6?{74&^ILLlX+jU={ z^!2Wyf+wat6sEXHy2ma~F{t*>`u3smN z@J_G4sABiP{$B>usj`F#N?*y%Onj#tR!Qu5Q2iwzOUAkKDPH&j8&%0JBRT@$kX)cB z>e>bk1I<V17wk7ROdMUn<-0vUnoj@mb{U0jKl1ho-a#GqzolY$T7u2N zUZ9bo1>}xF)0p@(>-lKPawWBoK9!TD1VwD`ISbZv;kE9-#<*+eP?6-29}SdTE#-sgizp`B)I*H9_G@##(%#*G9F)lE_jhf0c_lZNI<6t3EO-a0(a5Y+j zs^;|vIT=kXm#e0lv(X|_0WiVOYk2BNvVC(Oi9`*wMp&bZOH<$zY>2%cyKC>plG9fg z%+Ovl4s_K8%E`3&>XOe{S{>R46s~s$)4U=DSI>E)Z}p}o^Y-@8L)REU6*vTR#m^E1 z&9l!A+1KUILYshqrXceUUf2iHL z17e&)>QtJQ(gLi3(7$g@`XucgGZw|XjL@qH2=2mNO3cDy+n#mXsOnI)5#HomIgfU~DueoFRxDo*u=k^Q*R19MgDa5BW)X1)JUh)6c#*okdhG0Zc;D zrXgxl_`y}ts-G1FOMU8LT!niM(acOTCSQr&>?BOr3542U&(3icihvN@8r9Rd)#i~c?t-HXFV z#iEu>?mFUcCDiN2MRs#j@WLM)%+KYS1C|RKze&LsqY?u^n%LjGhVCEvfpdKlV}2$p zSsY1FF(VPrD&};(66P>+{MTgVBwXfAnWEXPAGg#5V#NZYOV)xa;gYK3U}4`31f58e z@>TJ}i)}E2)K5;vVq^r5Y;nY~@dB)V>m}FM3eGWie)H;y$i zEWAiP3U>X^p$k-2F(r#mAc>3|!8jQ2b5BbVN}D>{XK}4>U@v`18zb1BS?YynT|riJ zl>i|TZK1v87>M$xifsIIwaTg}x09=PmC=4kqDm2}Ro$L3)G}g?*EYpbU z`jId*W$%y3g7Gt4`}+THzI*=+-?fuCvfoDO$DUD%6*Gy&(UM+wmsK3FF^(C^+AXt2 zJ-Fs`^Efb*Uz;fWKGVu2anJ#50ZSc$Oxjiso|2?`C=8?7J)2mlcJC(i-eXNBP2_B{ zs^0dKUC+)Pt15>GTt#Qq0*R2Ex>+W=Xx7Moa!snWhI7X!neCwQEd+>jg0PbhK}Q!*=ptBL3cET-c0YNiA%e>cX`$#< zm42Hpap4_N*!Z#7T*n>&HgojXwpWsst{ehH9|%MhqmYOtPYS0vdAK-{_(Nt44~v$k`zRj=8k^P7W{%oHNKaH|xIUxFF!_~0aAt>SO+bt_Hu!esk+=n{omfX0;js zT(p9#h@gr`=07KBE?&Eoh$5dDm8(;~VkfadrW=~?G1ylD>C|f>jsQ87G3(DkZqLBg zMv4_>V$;k+cCYuKQd6rM%SJT409a*`XemPDXov8<+)7|g9INeZtB$e}^X`7_`{*&s zYw~QMK$B$^&PGyKwdPS9b!>2`_=f6dL_}?giXoRwi=bjLbKfULL!{Kr(65CDsM*B! z2ZDCxdCPu1ug@)V=gEV+snOQzfo$MIowX5~ z0Gjb?Bx4=b`e0pnR!bH+k)L|VERiVZlwd)g!?8s7{c0yOTT$#3jD&;nLMGX~#{c-| zcQ$D!oCO&|NorVI!T)q;lZmBAu?}5YT_Y8l(3IQx2+NL< zDliNw7jcLSRcp}3mY(-wl}n2*{MF+DMW1p=uMUiE115$}J~SSEBpZc8XElc2rOPgw z=b}NK|6N9EJ2nC%nuI%Dmm@#2jhaTvT>Y=flybgvdAmBhbPbz!4*NEiY?v5NJaJ_H zeKt|2JVzPpXntwwHiWr4iaWvsKjHlTrJWyxnVR)O5Iu?8OqVAOVL>+YBRkw;4H)5z z=_h5a*8uNg7q6S zmC?->K}rBgZXfz<2SYoIJ7m=kSju8F9DvIHzz&nX9*5PX|DNX)y5^;zwT^zAJ8=+SbyNBk_3vaR$M#4JkCS)Tx}Ac;EW=10rd@6;>3dd z80=vwqjN@+L4eO;4OArlzq1+q6XNB@%rkR2&ImbjAftE5mu z{SD?!uZ-Rg42Osq&6R`7Om&z)JD7*tQz`axj3BA7ZkR}gwUiF6u5TVpWrC=-Xzrca z(||xAl4&ptry32X3NnR;e4*w)g03?24lS3y?s)YbKaBFk;tTznFpkVMdyP0<_S9Q9 z+Mu>YviIEii>&b@Bt?#vARWr)8^dkv1gWnF`p%tD!`T!$M0S_t14c+6j<)%X9mi@t znk_VOCfj28u`kRno{`r*S#wY}fMpbemDKWcc|^=JXm`GpQO3i!W)cawI*nUh=&T%7 z$req$pyqI1CFy@4gbVe^Fu^1kBl238b>pI5T~OIk3ZCH&Kl<4w@w3f<90EA{7;YKC zaS#tJr*e2rgCYye7k5QYByY3;g501ErG;TpG%~=2Wn-OzoxRf-_*Y}Xt?tj2()bKD^Z8r~ixb9p6@mDKjhx&a*^WA!vCzA#I+*QC~Rg(`~-MGlsCZ4A#nv zrzc22L$3_%Mt3EBAmYcXr0@;!&5XNDmgj_``xju;D6ondS2C5W{R$PpL068pDBYlZ zQmaa|{{>x}0)H;Y7xE5;xYbe5P--c1dZbHxw&3tm4wq0FBH0>@fbk;c+X6C^!Ep1P zK-L8f^za%npxLOX+)ylx+SiIRTRIwKN@nd?kBuCul3%RJ1tP?5I9#W5XY)xnCN3HBV7ska2R9I0g}ikX3{F-F`DTScEQC}Eu9@VN7{opY6HH}f(l-M^w@3%aDuF1i*@ZSJeLO^Tq48Z~ zx=gkU_-{QUY+SHO+T^(%;0|2*26YikA{vXKvl`vzOzguztXk1c)OA^rg<)0(5dE8* z_H`iRFsZsW5marHkb1H}HnXH-fN(P($Vr3U!b|ura&gD|a|Brjx$6vj`9fakY)k^y zi2dC#>K4QW%mLj(IvUi#%bilT>gBhx0eMr=Xp0K0iOWf}rz5w5$ctb4DaRUq+EI46 zXgfmU({ zU}oNZ-?Zb(xf0k07s)?^iBUGg37BEB88D^J<)+19+!)slz|`Lj)SLTNKQ6~)pU?HL zX{+2;E{5{eY!-?%=HfOTCx*HZl zxlgun=OmlA8$cGQ-Z{`irT;Y?A6m6yth=LBMGVRbu?XR{pJ5W&j>-^tuw`MW;@N#bO zlFQrCU1_79zGVkvr;o}0A2J0GV*D;;dyaGj_b>QAz*rZ2xaHtgQ5QOjP6^>?$_AI* z$*vyRYbPc_Su&+G^b;4vp(7NVmhD56|2mn6DnA&Gxn}W~ZW5BZg?3oH$L zHhEhAA)D64@F(LazO#^`ir1wp$!>(p|Mt4splpY^WU1}%+Nq3(st-9O{?oDdlaLZ-ilxWm!Dg!>R#b zpOU4wiJb!l^~yj8m%fgO#t-qM90zOdx7-+_Cb#hBnnX5S{no*hCV!b7MZ>FrrKNk4 zFdbg&-|^#_XvtIHc+LfS5Z-#y99< zHzZdT9V5m1DK-&SC=NmhW2Vj#Bxt<*#ik&>Mol^$N$Hm%CdfsG99h!FInt*qrXPo{ zEFNesPplZSF~D{;XISl%p9};ooKzk!C~otQemU_UZ7{80{hF#OD&@`RE%}ht5524TSiK9+)vK4I)ZV>R1k(% z74X*y?UVPJ&U2gc*ZJ8DX5SHD=Y*vnCEB3$Cz6d1sJ!}p9w&`U5F6N_wome)xIhmy z{1ygm7kIb9v3Ms->-x3)PP|Jljv;RV)Jtc1_mz&#SzUW zrr;VJ@F=+3))Laq)8EhGJHh2N^jhFB%1(3UT=5ec|96CXY1k9thnA}=;q8T4Dr2;( z5B9yL?=DOf4W^OeVk;w|AO_CJMKLDrVXO+1wXqZqoA@M;KPCtpc>i0KswHN@3TIymo zl~r+m5*|^(QGx_F-dCu}R)%Tf{155jk_3*JsdH=1AVOj4OSFu6*8V{|yacFnQBUC} z$sIM_ri#l#L9k?tV&Fxk>3l9eZ9Ca4F)^W-z~~q}CK3s41Bxtik++C^T3|UPMG7l9 zg0$m6AZ{xZCWhpWK)N#g1w<)Cbak?qd`d}agsEs`F1RX1!HR)NUtpRNXueqG3txVO z>#ysUTex>oG<^w(bF{sx6semHQP9?|yA0&)8R=4+C40XMTN|1E`|lksr!9cEf!Z$< zJBYdrxv>d;?2a95D&(cbHq(cgl#9IuM~A9NoPKVT!sHz5Zp3SNGna^TdWt&hK8(rvKC{HN~$`ze7iKxSUkiT;KJ2!`e_(f{sdQ^ zvjjy8ScF@{gxN~gPIf$L+z@(K5A4tyBx$_VjRpOX$sWaK$F$ASn|F+nQF4UBtArbq zfESKn4IDCaisg@@>=eFb&CwybG<*YxqV_)z* z1RK!xrq(ne9gtT1t@`O~GPCAe`WSVH;_~jrs$nOeOsL)|NfgR}(&9wL`Me`U3Vz6pWdi!}N@Jl5LpYfl-KA*KoG1ty zEqfkruUSVJ02nd}oce7$$^_Mz5mXov z3d9DLR;`vqU`#edJm1NTC}AuGpaH$digN}gRYF|Mm~j*WINr`D$RxLag%1Lm!M-WWZIITPOO8uYjS~aKm0Ql*~pDBlgJO-#SN(L-@Twr@d9r zPpIg@Y2it~1`S7ZU0iRJ4i@QKN~{N_y_+8h2i#bDm?*MzV>`_h5;oCm4mYL-J4!IF zy!VS4DTsMNkA3Dg!|*nyNqp&7S~sIgo2&RJjxLKMo#Ti#FlRi2gQ`yWGnt za+AF?uhLRfahj6gIROA&RD-1hU#y{S!wWUBc(4&afnA%x6(Rm;QiCY?RY)$G%;VgQ zXgkS#UBtsHQ^rHJz=3dRp_P0T*l*&1`4E!nv6m_-$P+7K?fg@?YP%-i$G^A9sML&k z=yWy9?(f&WLTIwC-s6%VrdHDke4@S8&@1H1ubG=is4ogDLlscVno0F-(5X@psCFmP*>AtJ$FyJd!H#wK*7$7i8y#31|&(+VhUkXVGR_jdV_5|Yz(DAlyO$?i%cfb7XZKjCa1E|kE1fF|!bb(svGKFk1F=ngXuN&)`lXBb6`9Gx3 zC<|xtmR%AB2FO*ax*^>W+1PTsafMN&`hyaL+X|*y)X({AVFe|-)xojdI zO&xR>>}*&4S|pfgr@VJR*6dTk;?YE8iu2xqt@>CL(7-|=|Gs}*mWJ*d@s}D} zvlidXE%6tb!F}eJ{wZL!G-qI81PFn1G%q=i)QWIOKpup_3BaE>;SGI>+3WyGhjQJ! z>Q;$0yurwn!Mhe?vJG@o_&9qk9~_ zylAVp428WAxM^g^=nK(_*~hdp>~-vqEAEkO-()kBWxRK=4>z1zCv~IBgN490<1%b$=BOnR1K)2tQ+nZOS-Hqh zMb~w-kz<9?!~nI+`?SnpTA^12x7kF$pI=Ott!QBkE(3``Aw2-J+fPUzeatq#(3083 zd5=_c-lsO|{rp!YUZF)hirx~;0eYx|r8A$9EA7Do=8o@|MF&wpN-LRQmx)X-`<*Dv zR+2#F{&+}#QC*IC*nRM$*boXn+b2B91L)H4^~Fd8#f2bN%`q-u^K2I++z{pD``prB zEVC_U(TcD~dQd0)S>&d>XL_KNC(YD z8t5yQ_H^Jvie6o@Ic%180Gl~)lYb6_h!tmIPHS-rybZ%*7QEL`B0Yv@qir|BH*_`( z$vHoP)p$}HFB_q4kW#gF^a{)xf_Y4?pG3115~KwXcLFbUVV!WGi^#&z>pjYWw`5(O z(EFu@*tqx1Wz`65VaG*@)-p)2)DDv#)hwh5wa};!;%u!`Q!gm|t7=q1k0g>cBWshq z@N3XMBqy4J)b3amj*P+F^HBtqhnTJajCH_`wi|fXeYc!B-oyN$ke0+Y6ho_j&(3N& zWr!|5fWue{G4x7Hatr^`yR!0)y>C;xw0GI`>SOJ{fEGj*3&d&^i^qr{#Q3hV5(AC4 zuu8h<3>KpZ-Oy*}zh0rg5~!Aq`N9(H%UBbSwn#hZFEF)%wra$liC||On86|TAMix3 zr-0qxrrk*&AtxV+iVI8b5SpT>xhvx&|1)Sjk!fM~n6igs9Z52xQeGsvNnx*z{51A) zCCj{gnf`cZMeIx4-B5H$7mxr#=B~iGbZ4}<{932EM?aoaW#vE>+T{zG8u!@@9FH;4 zy|8p=1-*yKeJ1gNjAJ_r5bb*b1e)XvbeVH0Y7OD0B46Fm2j{=;D(%meR$@OFG+l6&uyF^?vja#&y(sYJ zscdTPLkkxFj$U^=p~{ur^g%05VqQ~@xilTno<|qY%27HM7LAJnE4C)vD|++VgB6kT z3{X8c^l_>9m$1hE*Jfti)ttes!w9yh)x67S40EnSw|A~);YMTqX?D|Ye3S?M(yclp zda!R5eAdlvupi~wOwe81>^is)QDBxEHZ4pd_o~*YlEBzvqLA!4yTP*x2zmQ}G zG%Hy3z$7TYRIsPWt_V$F?$&sELm%S{E=K2+$E)o-%H#82&rlIu zGv~MMqCS0^5%<9~o9nSXfMuHGYx8!$WqzrHYf1;ajd9=PehJ;}gVGk%K3FDM^{L5r zmP1Td`CWf{${Hsj7_ zTwJI*8DMr?NZgt?U}n{Hp<`#(yXwvQkbg|~R`t`7t!|zz#V=&#%P)N8&T38xk(v-` z2C9B>zt#V;Zpq`7p$iK>jvua4_gkj>c5*%vSz-2kZ<)*wY~AWQ<;^Wk16#^)_rKC-`qSS0cJGMU|LORxS?InC+4R9g^Sot zML58sr$Yu<-07770oVbOZ|NosF3=nL4F57ark+HPl1Wy%&-eka^euX0nT@oVoD^!` zlDMsr1BFNNCE1zLy#xH!&cQw7Mvqk4X>(Tcl~NsGeS{%le-u>} z;X&;)F7m`Kd}9}~Ujy@~thWM5D=Ui({FY(R$!?pd?fBK0N8DKC0km9-v=nvc#-tC} z(6Hhe>26v0MvM9C>&f_6S9(7l^2{B$Uw=YJo~Fgo&Fl>ulBZg(_d^J8c)D_;DKJIqqzabldP}&+->Z)@UQbb_n_6og*D(y>-%c+M48(!wfI`b~_*BUd`Xj0ef>_#ij2N!LDd1j@xoU@alq zKBN@p6+ZDKinOuyH31MFSB4!sKfaqEuR8VBnwA$)5y%dE-o{ijX4 zbpf7dFZrbkv{7X~rO1ExYjx!R3Y+esGA(DzRB&Icb=>7D7Vua|=x}FB?^RNr$GGIn z^8xDlG~AG0yHdFZ$pz))ds_0=P!(Q&uU*-v^VjwMlZFEFg(gNz?y`}61-;5z`ETPO zt4FDg0QZoSzMa&yFb>*Vx!H(OJain}hig7XO;;7~=Af}z8tU4dV-Il;28`;y^PPVc zy12;j-kpUzHBds~7pk;K87QC+JojD?jCb~AT9a}wXb>CZc*F6$=zG~ zcR#J|MfSX)dRF54e|P!6x%kPA$UgM$Mx;C87B%RgDCcv~)~7#U7?BA~*mVJz&&F*$ z6y*Xbw3Kp7qfC^bcD~@=O%Dv3h9t|f9P(CfwTe4)muw#5$4NICiaPMhOzi^Rx3k#L z+lo%=p&(c(mKta~kNvo?Rh;N!=XxuI*Nz3U*a>2p$+(-6(!Ty5etLspyke zyT&BJ-9{lJA6tPH+0^{AsF&~H2QG$_LRM*Qt6YO>#HJr8oS^i-c(Sv~ZfLfc z!H#i5AIM*P$F?^Ui!>7OR_b|#i;FJs{aKavI^ZM^fSh<;`wWD;&|fkRI}32SysF%y zR8ljxsh`VU!H2|ah?o!#F;{j?5Bh*Y+4{!nw)MMOkRBV>#j3vON9`A5H&sZZ;@I;n z-edSwkYcg#(W3N7ugAW!v)waTm2T5Ey%zQbVv7X_3P0mtdcTSRT;l!U{W)!*TMW>W zj4eW!O|*aUzwj+0R_43;=UHA$aCBiY&~EOYnJ-n1mrqR1_w4r+aUuCdop5lXlsX=< z5ua_QS5xk=g~1^4j-kXvu)vxW9c6EEbytRA-i z%B@p~1NHqT{H1r&y(?}^d7%Z}6J>F~_0RWnJ6A3%kpRQw4SvvXnwkD05mAnG!ycv) z__n*3TWoB~xuH*3zv##N?&Y>Q%EEV=Kw2p+yV+BFgPy3ti{GO$?i$^jk~W# zdlf3v(>O!_3@$h8hCY)Q0d~_;bA+$l- zalQKad2CZYKWu}lg+|!ZE&NM%ab>S;o1s40w0lni>|eJEW3CXU)EA$xp}YC#N}tl) zMZ)K#*{c7AHjVH-6OGEkK&4QVtDBSlxsxup!P&+1wv+Vg#-qDwqHO3D`!&DarsDt; z+y9!)U&Z`o-fn9f^%v^KfAgmoKiNI>=dKF$sltM&i5#smcQu!SeACS=b&J^V-yL>8 zGv)4H0^553p3U0DfvRk&>zj|b-@yOfSO1>jbel)*U2B&x!N5*cW&0{l^q~E9SBpc~ z>Cd;xTH3!wC*G#jmEWJ+Ut@pN8tOi!Yhjd?mZG|M^Iuz^P#>{BRnFB#@%EWvkI=4Y z{~hJk_U`RpTH|roSNc-6f7?g=xl(uA+tvTF-&C!5oGsy%*S$!qjW`6pIjd}%)i1aN z3b+{Xw{5-p&&TsLlXN(6vG8hE9s}!hsBfbNoP;!mfhWmv+dny&si_NmRHw(8`YcwR z2TemDE{EArx<^JP^;d3E@{LyuT5ju3dVu)|CxN9kaDk-CQz&Y~Gy2idjBwYvk{{_u zM3}OW%aVMl<`nrqE|2ckBUF~~-|PbBc zkLh1q3uE5wN;_UZTh6dT4%I(|QI!E)%g*l*b~RS!aCkqJ@0?TQ=nvWnYO>X~*J9M4 zj_xGH0GR>38V^Z&Do%k@Oo3DMc$c5Vd0b$nM`)9>fP7f4zj`9;QW(g;aFa^w=UqFg z#e!d^h)OkVW)U59I)8`LfeSD{+LBs#GPMseQT-6af4uEWJEW!k%~qP!;1uqMR_;DqL=F$7vcg(@S$ax|J?VeH(;AwD=m87AmJ* z{q@nnDN45EkYfhRH5{%_B5S(KW9B3OZ^E>&+=p@;fUEU0C>e*0dv+D^pnr)k#*qOB z%b^^YGkYvaOMzJ`Npv^>=9EV9G*%QwF|d~?5%H=;LL~zsyqiFdNeLaiM+@-44VUOo z9N`SsJwM753>EhY9&wElIg*o}3$xh0_X8&g78})54F}!7gXc+G;M<{8tl``63Pz{e zygVR0#1^^$`-ewEx*D;uGzY%eLMS&0UZ4ydYeTObi05WN%efv%qjEVQ zOIQ?tJD~sCZ%NH`Rbdap@YhXSyL>p5-aYO zZ~{h*q~_H_bio&;cIFbXH}8BaTN=Tgz{_qkUz#DUH#B%ZYN_oDR3h3 z_N!KrJW|qB*8E{QzAKm$EjM@oP?{36>6-DQ>Mpg#4&H-)DJXA%IJ1pmeAwdkg6jx% zem%d!jk*$%ehaOR$ZGbWN~D5TBgLN{!=4OP(m{{(x->`PiJD)@dyu4vRHE#mgE|ivfl>2mQ603sPJNiL0y-*QNMtabRGPtZ%rHHg8-b zfn>ER85l^lNP7kc&SL3ahEWGf!NBHRn;?$1g`ydwmS_1`N*s-YqJUScMvh?SDqJr2 z6F|;*a8CB}WwV~(IxS-VS*W}=?Kl0P&T-}}b7(M-{R6PLoY!Nmfnbf>tDgChHf!Z_ zVok{mrefSG!R&JAy=)bz^RdV9md^NBa{-3K=fDZF!7eUTh3?;naZ%&R-Av&EaaB-6 zqPXO`^)}ewiW5o2i>NX?!$Y;p-Yts=_}>@&_2cmloh^&4pISgC7Yx=4#!}}doDU2e zX)WI1$+?Wx-9N)Hnyk4HRp*h?Q!qehvbBl)^2}N!2BU z1xasoWh(BaV3|~{k=O)@1x> zoI%huao_dV2qyB|HWUJczdeBCL;{qTA8OX6YLcFb4x&+aV9(e^%bY^p+8)~eDcAnE z{-?jSD#)gCFSm@rInZ^w6{j3-PM~PjU)MbL*Yklx-l|e_AI?#7g4$6r* zp+>MV!9Igy2#n{V*t_cI?)LY>K1Vb*fS*x;b|qj5rzM!@Yqv`8*>#2pgSPevp~GL> zj(!n;9ewRl^(C-fzb~gGbeEjC+_c0P9{@L0e`(N;*Jjs=|C8|n9^ zlJ^2zkY!`42RVVUb#=?M=e%pLftj`xD`Ds62eFxyVs_`5XV|}ro8EhvfX~aj+JFY^(g}|ZXkSZ{F{Nzq1 zi?HU`D(+(ztcT7PtYeUedVT$9QqE#4?hLnHF5y7*l1)k`^l^TijpM>I%!Wuy?jj^d zh=)(ZyLtS-JsKZP#Zi4uy>{rgyu2?a73#e?PCvo#q*F_6NFpqv%fYRV?1BLl`qA0p z*w2oGu3;OZV;NCPFGpp%u+_mH4;L2nui`w=tg+ec;Pfizy>%YE70P#*gLpWmv-&y_ z@qiud19F`biVsTybd&YoKyof{&Whi88VZMX%yG$subMvi=7X%S{y3dSgeH@Ckulf` zk1}Q4@M1mMlob;0;>V6AF{|n%0a>alj+{qmQ#M%GcjRU+S=~;I3GTvZ&q_Dxa7={y zaxsc-Ejgc||2lLzOyWZOFM6Qr@p8KIH?d^w*b)z$Ecw5uGr15ca@jk4XPG3bco%CE zO%rT5+Hh#c;jhOq;pk?Kyx2KEVyaupgk%j*%#CW!j@i~TYDj|N3^=FF8YW?}@+72q zErbjts$1b^pmpj**k)U((WLhQvhLOjDvt79mA6&vRRYKEBP={vKS)&`)FIL(Xd$h)+k;xAfiY6gLTMSsV-OtXz3 z@{CX8#5UQ-+yDUICLYnQ5kiX$bpi0RhFnD$P%_@;Ea)KcQ z$umj87Q)bt4$34I#mvWww@p#IyoNT+T#m_e5_aQZ_7b{Su#Vyee!@9iQ=4M%wHt-w zh>)_}hnV4za-qfUiX}^~3rYdob!EtjzY<*kDspZnl!{z5qB4FBX<2Coqn}Jd!UFQ5 zW9MrU{RG~583rUKjj(d^*@f$aOA)!jK(mY^EpQ*VDR*lqKk^bBL_FR;X}^2_Qt*F^I2ec6zSIeP1RO^OEp- zhInn0hm&e;Cp$Pqo044c$)iz4U3Zx)EV)u}R1(DZ?Uba8kcu(A7Y`Oj(E~u`>FRgW z!606T$~D?xYQJhRzxos^0&l4F|6Lq5v&uNZ;QE-8jHBcxnG#fQ)w}=Wh1tn>9e(Ql zeQBkl9Ox!E@fZ8=)5(c+ys?c4^MNi4@|SbqE(F9=s*sorM{A`h)~dFGd6!dl*uvZ1 z?7NPNje9Z*a9rMab|uVfK2p7(O$S7&s_ph2RO)0t$UfV@jGeDV>4*_qcd&m=LI7|; zFEo77PACz7Dtr9GU5_aMRj^zpUbQ~Jt8M^Wq}qg_u?j|7jzk)I#cH(Mc>x1|>Pnx( zGLFDiFDzZTXpNn%s`Yg@r_K0BMy{LZQ^ev4w>L;IvA!{8 zOl3ghFQ(4a^neT9qn&t%+c23d1{Dv$nc878F;baRE2{Ffglj}6(Y>xK4 zp`E<2>bPVY*lHre_nCCx@V|`YQm_d0MTu7GE@TYEsbE}HhG>r-45!W|C+4zMC}Fth zja&^^8tpeiZo87cX4ckb!*K)!2e2U#8}pi=i7dc2Pay_dvUXogNlUoI#8AO#U*ZTC z4gY;PQW4E{V0((F__m7oZe1Iq$*}|uzWDD<`Z^Uf-Z!(KN0x8hRcRxx^O;wT|ErFW zd@~Wl(@^*U?f~nr799Yt0Z!Dnqlmwu=jR*gvTq9!2%mQS*@jhc_zKJW!O)=xB+wTY z?@b>^wvF0_cbIad(0A`DG4ztNk72kg*kfGCt5|+AON=JLND`><;@^zpp`UQJUnfh+ zR#j0<@dy^CGSi!GC>KXn`U=SwO52uj1mmGNwVAitQq6fbCFWnF^K zB}T7IIW_!2E>g@Gr+6%Tkesyy%vy!&*GLrBQV7rR6WC?~AwVLN6E51_j zYNN1RUW&@ngusD;WCBL5LMN&&47?H%9ngN9Wdh0dXGC;B&LfQUVx%Jw-#&jda zJ26zUxLRjsyT4({`SAV=SvD)Uu9)eWiBopS)u-bSC zCz;Tom&OvwRVTawA^&CrWff`c!0BLxBzp|)dFas)nMm)!t73_$AsJt$F@H=Z@*Dy| zP-m>v<02x~#5`s-P&6u{9Axu;e7aRVu>F78(RHzoAzCbfl0xrl>Q}|v23ebO<`q8b z2>d^_8j_=-hgv-6XphPE*Q>dN_x~5JzlaI-K;FwF{oO`CND zNW}YW1(8X4?^&{W&XV=;p%$#7EBi*fdI|eGgp=vuu)>$-^vQ${c1KH#+bb71A<+>c zkVZg~Wnf}+=$M6g_*6Zx{28APy>yrdeP7t3TP z_Jy8Mc>vjyo#_gj0K!vGV(F))>x852*ejz^JbQ%zdk&%Wj91Ms)f(R6le!P`Jajjr zeSrGN;bIw*o2#7^ID{xNnbYu~#6Bc%Q*bK!r$PXN0P7 zp^8}f4dY%UBMl^aW8Q-#T;sJE9SMxEfmiR651sL+u}|MGeeMFDSx^WaIZ>c@5L+FK zNL?gcN6@O4I{?%zR7WU+HukmN2LL-j#J|1`6eX#qFCu*kJ>Y0qW1FiebELtJbijWV zd$HYzdR5h6U92@=_&kdQP$@gLOtr$7OEGsi-7ItLTsh?xqtiBwqK1u)Q6cL-(l)?W z0t-?EO>wHY36cF2lDKSv+Kz2c6Xr-kaL2}R&9g2p8Cu%K^%ZV;sN!V1NZ)N`W;I!h zdIlpkg6%`Dw(5ii{78;56LF#j>oTMid^$~}4B_-f4|aXSgpSC$EB!pnJZm9(>32nJIF(gnym zfQc?e<4pVU{;2CEw|uo+%1NKq#w!_b$+fgDQ!(F3j$K+4!x?MQRlNY9qhQTO3#rcx z{bDw_B*voYUH1T%Oj-;YObGdq>`NQ~jq%&D$KgWYAm+7fA@$9;^WL~HKI9pikaq`H zD_eaE7OHPvpuPsXq7B3|H$u#zbJ>cor6bLdSc8EPF|{Jg2Y|c^q{|XAM|?7_RAB=Ep2bn-wNpQ-I4K18 zp|N}4QGDD2{^_y;*fjlg=-7)Hka34sNfR6%&pOB(k`c%V-rThBfpY4(=_e4+tP4A) zQd2V53MXlFIg_Jdb3SlVoU9Ajgp1w7Jr`+oR2b7!(`O64q;5{ULG_Z}lv}8K*Rcn% zVwecDk2;E&o)q$Xjc#Eng3dRQ!&$;$P43L1W-QM<9FU(U^8}K7G&P zua!YL*<(Tm>VX$QOpU!DpxGIVcJuXbkW*pOov6zO(g`!NIB!?16LKz10GfplChbRt zAFY*r=UQ-)L^rI%txRK~rDEX*7Q$jP7?9I@)$`+Se9(D3TvP;I7I?#nW5zZRY*EW7 z*7Jh+yXZ2Rt@_WUPCkP)w`0$KiUQd}-87K{z?xpk$R-I$i;7NSXcvAej)?~xwYK~U zp~BC5K%u$QB+mpe!rl(OM#vXkdgj2x;pZ|4t`2MAoCK!$TrtaY<3R{LAvJ4UIUAsHyKY9k}Qxmh9XHo@z5f~AXcE)aOk_uLCe z+2I}rFbmpjl0Vu)RMmen`IF`15n}C?FJng+u|0q}5!sqE0-zXaB|N$_iXDR%$kpMH z)X0tD)?UGGlRba%(Tp2^(UYy7?zTb$QVSSL_~{m2o5!Gw9#$9ly$`V$=a!bu5n+a- zl&os8zahcB&+z65UCPyi=1=~NyF?8PU?FU!cDr(H$<($y?{@>FJy_KaOKVsw&i92> zD6W>HT_vN;AtN3&^i8R>y{e@k!j2)C1{OCNUj{#-UZgrxSkkbH|tes;w)!S&s<<& zv6x&FXeolNvH%<2Mx>q7}QFbkgp(v z@wBUr3>m;?+2{4BBNw8^_jTBS32sJ(=mO6&a=o|$$_BI~<0_`sI$PKn!Yw7X=GjPb zVXY_PtvK!C$!DdGH^-(X~y9k1RW z+N-+COnKE{n`c6EPg{bM5h$fqH-Bg7i{`n0svb_;bW0+NTkz{5AL_yE=d}VtAOFJ1 zHeKLD2wz zEbxmEJktgJcA!8@Q@V$;&0}W4Q&pzEI|c*Dq9XS0{f60(#u-~!_UhWsv)GKSJsKFW zn5&TRJLSq6ZD+Yv%(OYj;z#WP|zewU?m@7{!V(*#F`!y8j~Gj)Ch zT6?I{W}3Jk8k83Qex9c2e;z0jCb)AbC@BcB1Kh1Q#W4sUxR{51mHOQy@4AN_p04iU zKhLK~{(pY{xBdUFFnOBZe&lhBE{e>OAL89j0o#s4|ZDUEh z$K)I6)eS;VLC0jL!EmeHT?oVB))r^DWE;bvn1zn6*OMdkYID=r!m;_Y2e7aWGRDPy zuiv}s(&t5rMk_$^TFCsCwEMMvrAz}9Z6P%O;&NRjx7NWlV;cDs91Xa~9bRlvr~^tq zblI98h~wF)F*273x`RRDXESF8tW22e2yC%&0lzKW9qr2d@ewuIv2$kouKwmS&h;Tg ztVpPW28{L#>r-+3(TZ2Wvjlpkwc9d&{cDjX!1ikdm-xOW8-h?ml-hs>6^E;3>&;8z zLuKiAKXHgUu<<4OwMcHUI~;H6V?Z2rc%(McFSuc_pb>8D$o{c{tSjxxc^D-UpTGfu z`QW`*_i+1_6ht=&?@L7W*#}gRWA}AO4r3T%@(p@d`u!>Ziz4aNjzP-CIH9~j3@s)D z&45EPv76-thkmt$1R93k6=>lrf;YrP2_n>A<GaI5#_6tM$yfPY*!@BD8 zrXv?2e4SioG0Umqip`;g&~=V^5c(sTTQx`t%EW56zkrS#c<2It(`qqj7f^b!AUdN+ zY~qR$B2~3KQmLwX`#Z+_DIECNS-tNM#{AC{343(R^FlbVp?@C@>!Q zDy#P{bQMZd$uWhXn<4%i94vr%DKcFKn1`Dz$7Maj@58`3wP(KR=5k>Jt{H&*YVn*Z z+g$jhe=gET!+)rsVv@HfUQ9q_*Q5AdM;as6f-LDB!Oj_0!6BQl`@UBGT}BAjUZCpX zi7o$Q_(TQVJG@Yk$RniL5TKu%t90s?k`ztor3IQMHB2ujYugtF|0?u%$ZZDEanHcn%jmI*C(r3;%L3V%r`9=5G^r7JAQEG}*~-*X%Cf-JUgyJ0kgx*N_m zvn*Q7AsF=vgMPE!oGro})vfM~h@L9Nme91ZnT4XL8AuCSt9h^PkZs#shgJ~RlV0O# z1ca9Av#f%mTEqqccNl3Y5(E7N_E{J{xcmMF2=8eJ1N{~0#~#(5&<%4$)S8o0-|v2U!c6_e~`=eWFBO%$Ld4Y5! ziI|g^MW~s#GVMDz z?HEp zP5@io`4Q|7kxxC=*c?(epLL>Q${@%qoCsP7ag!@ffGsl%@mHMoB{^TegwG}8N^WQa zN+ePPK$0kg9NPw-!@d$a4FP^ATnYY%GT&#he++-a4E%{$ibB-9=sL6ZVkDcAVT>Z8 z+cO!J2

l=|r}hhrZ@$yH@O;#Sin>I!ni#wkpj%PYJML8#n8;OLe6w1`}}OcEO? z!(n|0+c@M3(IXHAJMnxx2{aTv4eJzOB*sl>T?=%Md!k1*Dje$w$Et*L$Fb9UJAHL- zBq$Gr%OiF;hgKppXH5V=>8p`T1tlC?(@QF!T0t-X*OgEAEQT`(~W!Yi{lM09gnAyB7+HqcV_b#h`&&FmrW^?~4`W4Ww-CtF5 z1W3t{4A3n@NSj#t892_Qx1T+99LiqkgYt=Oh~m*R_dg(XF^#IIEm2^?%;#bk(Tv>( zl^YPSR^@y)Car0&l>^m~rwZ^_H;gQ<=js(+#m*B08v3%h2*z7mTSIarttB{lt2B*1TMVLFikOS$W&8_=XD3p6Yor9S^= z2xp7LVx&`_uz+r))%oQRCc0-H#{P%=Dd1zki}9-klU+@+6ts4wr+8wj-Iz+F;hg&_kd!Sf<}D6 z2ca%4jQdgO<-TW`NY&GvIce5S{h|xD)J$FL5jKdBl4;`}9Q9%{Xr3}vabHd>SpiDB zdd?)bj8j=C`CMvM>*tNeG^smfjbIwiBmowW0Ts3ABVR1UK3|cRKTTk>k18K+T=!*a z87U0cebf>`W5_O(Qno)F^`ZwYDP@3A2#9{Z>b0PpP7JOK$tEoZh2>q_Kz@BE{%W@~ zXZEvH(b~*~1+azu2!3l!;Idv(Vp~Wc6|_6ANQuNIQ+6}z(|G`Xg`e~yw9of0@>y^z z5;Ggw7{M~>Le9-4Px-&jV~#rXz(6wA zAxA;AVB#Pi{;Nn4LVnS}WCCkOHE^Iz53pH^TT>u^^$FWf4yHO8z)g1>8jE9>44B<* z{5ZCl2)99V*;REN8ROLjz;y)}aJY@I2D08-jRu4Y3Rr3PS@zFMb_(8HEE;xS`qB(+ zACaF%aLw?2o1k*aVRrE^3kPXnI`{;F2EJTOk;2kiBf!nev3fL67Y}P+nf|$4vuRXR z97?Ba$$6V=R@D>la?M@V>%b=%y6#IYCr0I4*gB(H+?Elx&i$c<>PPJ%DA}fQp{s{E zs00uV>gMlk;Q`m6kYoNHc|OB|;1H78LM4EQ1U8eTvA1~DP3{xq|#Sic>H z3vBR-2flw6iz~jFZO}t&&bQOO?pOQ_nCQ;A`M|QV#Y&S?S1|nALnO{Wy(|92=T_}i z4`hwbLeBm1dG>G-YujcnX04nh7W)xn{pdhEVEb|?4Vz0gwzz_NSs_l^S_e78rF70> zzc`s&IP$~%#Gk1#SF_#|!*mO=I@IBH0WHzmWek*Xh*@y1D>*c?g z8TRRM+)>Lko#EHXHl7$fV4>G})cv~9_E`#O$o4xyuudSpa7a_IWWIqew1wpUwx& zQ|`#vB|InS4^Mv?b)oLHKdq8ky^;0tUh}8#Vhmp!-Li!+HQ*B?d?9^kcHVLzR}XS3 z1G@uPYsjcpW+~(kCH1$7t@h#pi_0VMP|=hm!+tgs6*kJu#{UZ6*zTUf(KL7oiGsUb zQeHG*Uut)W{#St;FU(dJKDPqmA&rbPkoCl+Yw1r*Bgq{Zd8?dyAS~Zmy~Ep~gPc;u zdXf*)L;kwL%Ry+Zh3vh;^+|Z{ocF&gy{uny$UW7(hL}V_fqB@rRFPmXTT$G`o$uX? z&)Xro2~QM@WFuMSE%4{Qy3)T}v&Awg@LnFgcp#2RftwQqyL}RSLYOhewg~1nMmUr7 zSWONTs2ECeBdyN(_#{TSvT9s}z(<9EgGG*cj$q?ryM|bKZ>z;Y0ldWW>a3U@Xws(J zYueFlsYH_-txrL2K}jfosTEuem)O>uRLG6dsE*>ftVRaY-6yEaX(yFcP;Jz1FxD( z**bxZXJln_rQ#4E7Zzr|;fb-Ne(wyE(-a@?7EyVwSb z)>a45DT)1$LrZk9VPX?Wj1Obe1>#g2SNRqBb+)cTFmX8dS`cq!8%7Rei>TKTyqCb&nTKY z37-84lQI3NHewfGWRWMX9lMK>9Dppr6J#8IyR@DROd%0_Kz;_DPNc8Snk8g%DLS}f zUGXKlpsNyL#yUb8<~gmnl(HW3>Nn*{yVkoy%G86yq$7cqLv*pC-U8`ptPuS>H#zh% zY{vUgc1JG^)?(b4FL8*U3auNz1qZH~C!}ofa>yNfVpY2WFM0$T5wDgztg+7l8(=iG zKvzNP5Te&m7lDPN2z7X?gMGwdyLn896D5>(O|dQE!*va!+gf(H zc%5bZ+LdUjJj$1C%G5??Dmkiz!TtMUCZ6gYF9r$Hw)ZYSda`+ zpD4a+?50Kno={AX#3DX06@VyB(E{WbD>Id+({>URyed2vovL@a4k$57NWzsZc6JDmE89^X#ugBq(zqb+ zv7*N3ePR<|&iq{0O$P+{V>&JUx|0FLwtxZeH{sXy#4=aoY-)*li##PMZQ{QtU5vuF zodnq3grCH+wg1VM%>9lW2%GR`)hDZLaQgGift6anvwzY2+1^wJIRAW4q5q$0{Q?iR z&;73c2ge5-BD#;}t|yo2#9M`z?;0X*kBZ+_>JLB~_+|V)oCZ$d3G6#^*#63bN8u`7 z5T-zlIdak!mGT%92n32T}R_T~FD@R^qjcz^wgo`_$B5Ys2a==A3NWo}fV z?ozvG+DYnSd!KttC8fa&Uzj~kx?MWG0~an4PAecZ_rr7XvfnEYdoFk7ft!#hq%F?n`WlQw6?XQbPD+y!e7x;%Js`e?cSCweDSOobFg+FN%^k}9Pea1x_ z*Wv2tdwlD;={@wHwv*dPyRo_drx4eoz0?Kax9}tSyU%A~xw&^eYh9gipYvT!Qa&Go z{_DzbNF=(1u=3(GrwMJI{*v^(osmxKe2DHIx(EEcME}KEE+2-g|LfdrXm!)4fUO)M z&W=i{UItb^C6~1UB$KSD0qUIFr1b92Q47vL;Jh7(Xo%4=Zb_G6oyitSEzSs@W{Z+z zBzjxl|MLzf7~z|biq&RF!9N{(^>pp5?{ry11?+UPrh-7k^%=t)hfpiJ`>E6u_&1j) zn6By3f^Jrz6wEg_sVVG5UNxB4-yO~C^0$scIID5Vmt8sVGcMU=SIsAAee=TX4&c)@ zavH%Kw}6^pD!!fabx058CB$~Ohh(d})rjR}WgVoXv{{GmU6@^3M9^WK4Z02@85vM6 zS&fmcCh3Xtn2wm7FH&th_}2o~JN^{G9p`xD|8qLQ3q>bqaQMY<^|SD&YzxB~`{O&G zX#^;V_ft4s6eVJl@m8(`N)aRJQF5$DbMi);AiG!|Xcs|wbG@)x9n^>W5{~Uoik71T zuY6dlv48GEzHl_;Y)nk1HW^}Wx7fnpN{QTwBvHJz%pk?)EN5&6gE$^$gVaDeP1o<} z1Ci7MX0UWKv7t2HwB2Wxe90`7yvOgFOTK?S*`_H{_5?Yjk_`8!*A5w~{y1^YmBdRB zu&0Y+QNIuV@Ms=)BK-vGX+Dqn;tb-AbSTXHQ{}ImxgD{!g539iyp!3j*-d#TlD89L zC%aZtc1eiwUbS_H>+4os^!L}(0kAA6Cu5k`vJBmn*JHefcvG3Uu@na=em%i9i2_b# z8Ryk>q-w9>PI?7&S~$$cQ{MOAa~FuZYQ!h5rHzJ>j~?|un$f{@c3P2vUpk^9!C|_8 zCU6)z!v$`{Th!>|n}u@%?0*v0<%(Xy4iv;U1ydcbe*0*=AXd#1Pjf+3A`YAm4n-4H*^Nr7bGQ4UpZ!4IrlqEM9cUVY2N&Cp?lEX> z9beHT4tfffk_j#p)o)&NbCLA>75KEngm77K?L|-I>Cw0cobnz;c^`zr#VU<3uu4+ z^Sl{{jKQ%ME6!jt!dqi50~h$Y`rVZN5k%wZz-TlnVxxI0G-Da{{^N02h`LLp6Pq2m zOkN-O9Y^r8Axspp8Z_afoq`ORwS_-F8WdH9^`HvGaG;7G$?#FHvX~Y>v6Jy;VXKGc zsFN417Kss9Zi!&13)Ig&_A zs9NF1!oQwv1*F4SB}oe`zUb(>nRcD<#H-L9@bTb3 ze}M`n+_-t6qEa#vbeK0fO!U<;)%mH|t?B}6f)>?fGxDJ0yBbY~k#o-WINFi=Hsi5%-gAV6ASTO@M|S<;2UwKo3#XRM2Mhf zRZRG*a4V@S#tzdr19i-X>w&ZCW|$$$s=ynGsO{cjz50Em@9H@QSV3R13NsE+wwyBK zUJ3RGH8NiQz`W(8dd#7v)A_5n@GTt!`0b+^xQZtb{Bym1^~i=;82}_5akg8fC=eVS zt-{heLk)a8C3P(2nuSBrPV5?DL9t(qi%O+~ajh(Z3$vE4#PNxs&_79uURxXb$gX>b zdR++>HW#d&_R(}w3l|zduCiL22`n7#uYU}*k^qfVAsCfgpzs0886CvBJ8QR@U?V0UCf-R0;Ku&8`#Q%RiRZ>X`kYAkuKJin=I+U z`u%3GJ#T^$&3x=@k+gG3&x!TlFp>=v6brqou`?fx!z{t^!o@%+md}<;@@u;?da+X; z1fTm9PE_#S?=$-%-g3@_7udg1>i$%ZOhmKz8 z5tu^>Hi}k-?E`TXhUllOb1?>2GX5+SX8$i@cdV=HlC38~XO@x}dhBsxx(4o|jF*VQ z6(3w8uAJ$mOC;Xe)_cU0`u6dp%#jz>_-Oyy8nv`-<#O(+Z$C^2i^dQ{VmQHt6n(2P zio;z?y8NGsg9B&rJ0C5~qB%ODszsuII3>%NfeP0w5T~Me&Uk^p?#SS&#d0?%Tc~RW z_bQhAQ6bacI3pJtm@3?p0=4f%{xvxlfgPGsrZPTqL!~IAdjDC~?9~Y~khZr_J&Pt5#yM6)~74PS$8Pi#J(M`S`jW%xRFh z_Ugh%UGamQ3xC;-!)`k7JjPRowN|7a$DvMq0$&J@!FCfho|OZAcc8#V-pE$&1(0WT z5?_C7_(Ym8bFZw1avZhz zkvqj73B?M<4)C6dMQj}VK6c}&f}CF!pjpc3V{pTx1djG*W)5bbqqjo}g1zpBiC%&U zP7&Vx7<^;xURoE*QD&@%!!SX{VoM@3$yfk_iIA0j%z)^`=m+*Pa7I^83;U*}V7ytv zGNSN+Uoq8D7brfnIWbvAvh_&3RduqODFy&8Az&T~EZT^tgD7jykE1mL<(S#(k->nx z5BUez4kXr(efDmO`~xii^{vR_$Y|NFwGRoFqH04kM*yh> z!Cq)v&<8VQN20lqqDrV)bD~vej!`t_w7XK(-BrPro`d!pYO%uFKqVCNkYcdf!>)f% z3h0K|o=y$Fb{=x(8@L!p;W=gv;wA@K$TMhhLcGfj(?lyN2u^a&;u?WnQwzahg9(S_z^rk7NKK9kd}Of#{!f6kTZ7f0xx%(ifR#Jh3w$!|u0x#f`qXqW* z>YPCM?1%5w(NbJ3MO&sR_epP_&0Ia760J749@t;C%xWj0`&c%y6O5|SzSN#J%8x1Td&yZybe=`TtwVMFt``!yV7$}T^weKxDzf*7AMjf+FnBtBiZZ(K~2 zfFw`m$iP;6IgY?}o4*CXreIHeaMB$Bw`Pbt@@YX00k;DNYc2D1sGom(v+vdhE1~- z9cv4s=G9=SOq1n~D>%Oy)%20rr5S;Gv#qFOAj!g&3vaV&n;49S3h!jhxCwWdEO%JL zt{YepihTLyNY@3_i`g377kDgb<9_alP?is+6GY$P=8rIKxi=hX_u`n77eZi6F)n8j zOE&am&+}ln5(aR)*B?_V)|KE*T%j0$KF4V-=7m)3 zX{ywF4qEO@w;l1X#cb(#kLn(F8~9#JWnSQlMq#ZcU(cB#OiHjSlfaHqmZ|A?f9jyW z@5bNo(WCZuO)oWr9r0w=3=fEzYeH1SSRncy+e}P6e&asi+AU;9dmNs-&F5F|SFmXb zqB;r^TNI6O0)2?C+up?Ii$?j2t=U^=s~Lpm_Aqu^+pL76^}0&@>%{2obs_89K&Y&} z#ia3ha#xTDS}b5GMn%@En+19;z;wZ@NnYwr z4<(ItzrbN0Ac2VU*=L^*?!pKRNkwP3Ib0vg1F|xN@AIClkGLAO-M!GRuZYM+bSsUl zA~b$UMw~&wYj+EdeBtw+``iBiDa#2-p-CL>#!Ycp+c>z%yE=bXV@lCj$~sxbl*IH5Vk`dU|RADYd*uEC>_@zAiEb%a)Yn_9Q1m<}W%aQUiDjMzF@M19^jnUko4NAn?Y?c1FtY`-MnU2=wLuF3X zE9oq{iqECmH9cAqMyz9xgDF@aj39Crogm?{n-z0xwC}-0WvwPI0BhG>0&~^9Lm@Q` zJ`|}5BH3cJI3-vh^rf0uB=dFim2f#Hn6nmOfy6nBvEBPhd^eJgJlP$<6rDlbITBVi z@-Ch6uKDuOfB-Y%-3B9sC@u-7ao_`-ycTfgh^I%tgv2z*1V+l8!Ye-#J%FsmG-YMk zcsUsV(=G%5D>uq^>83P%aL(b?^P z7y`3n$M-deMb$^xZ-Xl$`TW6XbfqrFsUGiXh%k;&U$TerLP)>$1m^)!C=5czr{Xvf z=*AVH!8A@+M7VLIry|V?erpc*Wu3xbMv2wf2|z9xZ(@l@JV|VSZIlIx%X&*&HN~y`xytuYA*>s0A6pO zG6ADTn@}7B?QhZJvl(9P?;LOXPX%ENl|1F4Qi=GJkVg5c1XX5rXKB3phNCDTVJNz# zu~=JhfyEd|3G-UmFNgzy-PD=NvhgJYSO=mIml$=SFZ6jaDNslKg2G?V@7fc6`=w@jwc_xsHs7mHU)ja7A zY=JA^M+y+*aZQY!yG<~e0Dah7NSc_V2D`B%Zw=!36oQ+^@GRM+&E!GOJ(-F`)=aKvq8ODIR!`IVgG0g@7+0 zBx1Hpw8hp-y1s)$Ssldc$Ltuokwl@D>@J7;Bs$*;s84UC2Iv zgnAod?ax;C^u88nFxl7{L}hd_IjA#?DAJ$8c5(~?!yOA)TsX8GxzPTd-b~3^Yiu4^ zDti6tz%J2F*zZO9N1x!RR8I6GT?k4C*w7a*4{ftDH9TE1D^`p}jZ_w!&|$5gn}7#6 z;8hIMKFC+Oi7vGMZqlk8dQSxDPG18(#XFSD&Msr|MMLlT0oM}@OM6cY{oLSoU=7%B zj2KIwhL?Gchgirp+^XWx%;PXqDy+<(_s5fIGl)tyM4!Lh+Gd&L#;@^!gj%~|vXom$ z7eA|P&UJe<>qd*GMyt@QN#6zurB!7{MZsO6b82;W?z`33X%GkHGl4SYf4JM&eeK=f zW281pn~*LmwJ|RUCI}R>))B0U6~wy50wr_}W)N;>g)s>jsSFu@5+9t7hRt;g9`n6Tb4@wn5AL{oQ?SV=*5<~lw5U*`q#bR{o3v|BP3*M zMM210NeS*J{z2DSz+hK<-HO62x|rpJljJOo#9sVT;fExR1#4XNw};(pY)CE4;Hkm> zx(2mn=2(e_UH`;&?XmGAwy|z90;)GFHB~b))3>cu={O~%&D(buT*Z;|MH{@(1JDM} zwb>E+J$dM)7XnDw=R1GE=azNcJKLW&v)yvavNu=oxnUG61jHG5hYR63vPrjK3GFQ5 z1srKJS=1tA^os-$0-PIu1R`Ct745OxN_t018|?hy075che$r3DOW)t z+JZQekU((=<(iTR0y~K>IT8gpT^cR2LU^vj$OtlqktZ-Z< z)+9*xc3&5=WL?DkUuBwNyVBiQ0YgYUmqf@XG+4$u4|e_ zJ$Vr~k#Bz!2~D8AAj^=@xFfe(4bJ)`y13v_9O|XgT5T4Q3HEz82fc>foJ&5`vNP(2 zgQl!%2r}yZPS<6*4aQ%Broi*p+dB)tb?)03`kwfJK*=;~S+fuHTsl&gCruy;c@n1d zcj_5mv%Bi#dfsn)b~KWL4<&JHu-^a344)6(Qcwy7k&9t*b0h)L#p+8Q0a|9%o5lr2 z&;eUB=KpH!69e#ZuYlcE-{44*j6~(UmrY@#lRm`SSBMLdjUy>~Phg+fYw;48*=<43 zWsMD{$7=LAdZ|-9LqApj!TK^KVaJEtoWhZGr+Ul6Oum-Vb=fH4NG1U>@*NjzB%I^B z<1i8Q%3c6~$}rh`+XdfYP_jj3NOBBbKBjo*-spX|xB zL#1PZcB*XUF~51S+N1a5IDS|;?Ns_)NQ*AECmB*~UP!VSkJ@eqE(bDdYkKK+vQSVyTFq_K$Bue#%GkT* z=9$>CfR-LmU;z0?wH@DgvfBoN^MaN55)nx`a6rkP>p)t7A+mZ|Pxe##)|c6-^!;S) z8}2Cz&@MP>@ zufS{et}#l(mw5D`rD-;5u%k0k6JADPf#UI_b}LhqIlk+lX+=DM8XIlE z4fbdX5~sUyAGbZ_9(DPk#&F_XLv=GBP>;I6L=Hg@(o=ce^*;K zvHFL&0PxY0K9|;*<3KTr3YBopqNX)XbO0B|J}+%yU6s0l#GclFJ|AVdWu~gDt-23I z8|Yq{7Gq!+LxFfHc7wKkczzFy739eTAZS8<7EZ)r~ zDPwjKt(-dS9Jn8szBc%D-!aHPIf|81jWAbKPGU>4d<6*h1=WC@ll3@MfT1W>%iah9 z<0YhqH#WwSNhWB_sHBhx-qka^TwVAwb@$D5!V>#fz;QgA!0!a&V{>o|Kz|{pBJw2u zrdQ|H?#*1GcFi3gc^h=JkmlEwS&fs4!<|S`CKm$SMbI`#!Qzav>>9GuDwP%^ML zObpZt^7jlut)1!pexy5CBnW3;LrB=c#>zX-NOX|99I;p8*b_KoPF9acq!xCz0t@G3 z2h@&2{>k=VH4^%JuCEQajk!NLT*(%q`wmiZ02v?-iDCV2>J|2XF$-@7>+JgDaRAKY z9>5mhz#1kKr7A&4-?0Qe@C{c}(5)hX8InOG(WPk_KZ7Il`V7EYdzd=pN_tOlG&oUtXiM-{7p4(i8ZHermUS+6GR{eqA}V=E?BBX> zMkatVtuAgC!EaD0S z{KoMB{?ny7A`%edcuJM9SPl}7!jr|C$nyc_pbi$fBTk&sgQOj69Ly$6pjrmYARUgE z970hZSP6YO4h<(iK}aaKori$f?Z0t^VvM}gO$(gi5{yhZ>^C6Y$pfGtktgPCXG0s%LNU*Wf z?bV}EowH$pjj~!DKN|5~i9~0^IP-McIq=ISW<2kxjUWj+mQpmxUpVgmmfv(FqR4Pm zLPOxw)ytOsVU(z+6LPFv*KH2L) zq3<|GCj}IXR*Tg}?Z^&Z4S%G);AOAha6`FqAZi&!VX;|hq$}KAh^=y#A%1Xi2+Hyp zvzx?OH_CN}metx?{4&bGDNy9e-!vl8`n=>4m+|{?sQ({c@C$C#=|GDR-z6r8mjii& z^9klad=fKW`n}u7e%$qv%ovoY77U3H&@-^HV9p^}yG3o* zn!zQTU6gBa^+!@`uwcqXg9&SG$=*nbuqx^@J`ZbX7Nf$cJ^blNz29VPWu!ZQ;LZ2B z*a1J^V0jo~SRMtAh;i<9M;c|QYRz(KBEM*P7Smv}QodK`5qBG}Tro3NV7y0|2`9t# z?LmR@ym%@`WmkQkL-8lC&{^1NurzY6JB!7WFz=wT+FK76BMb)V&!8SwQglS+-339-qwUOZJ1p zyU7QZ$`6%r*8<+)2OP;4qd!vh%iMoZB7s3Ui2MM0$+`~n4mAB^QT0u<2C>`ITE6O zKqxcvPXpkAI3XW6Am@DrIp`(_MPc{FYe1x-u6&XQ*QZiQjJ`f}Yk2k?j4WOH1!k3g z$_=dyrt1(ug@4|`nG*wyNA&`lV(#!uj@78Z%OMdIPdHMLCQ>A@x*sdaVGWI4GylqR zIYAn04q0Tw)`+{z-n2n(VM(JFc$AZk)9+qsQBW64V$wW*?^&h9_61bTECKLEd6-jE{O}^V`WixBA7VC-Gn4Dw`EcWST<9QLjKvczvhq zCSR6!&RNZW7TYYmMV+UC?T%>j+Xr|Tbe={KZwt)gf!GLBC^-bdF_5Jgc43qZH~|Q& z0pLQtPtOrS7$m{dmE%ya9vQWZ`xR%nChO}qvFNIj zG&6(V{A&m>wjqEhVyH22DgJmozEnm_g`0Yw5}HP=n9HX|q#MdOwDp zCwsOrxj-_LM3YWYb)R+QB9<^lF}kqF=hDtLKpJzn++rxJ!2Uib2DiS592nyN1X8Jq zYD#wihEH?jzDyVyMdIpbvE79|#ZLaCN&C0E_EotAgxa^Ceg2nE3MmkMh<3lx%1h5-Yrt(1 zDJV&|!BzbT^p7#D#z4pC#RKefm`6cU*(CBAh~|NSw3Il5m~o4yW2*&b!7PfRRnDY1 zyD5{hs3YqJY`K~UDiV7*wgQM#H3Y;bxbE29_ zoCByw&sb7qw32(h0?IafeQ1GK1`n4oyA;JchG&WX7=26Pea3VKV+;FM9CI=sHpYTvKDp!7 z#!(u-VFWtodZua@`e-@;+Gh^}UQmH2TCYS}ZiB#=N=(rjAhDmA*Dh0wpI$tr5-O4g z6eVvQqTqbU#B`8O@y2CZZgzvdbhTB3jO$9`mOmJ&Bha|)OxWsRkKEVr1CfGTy%-s* z(ClFX;`f^@pi;Dxbenk%A2F612;Y%xR5Li?Futfeg`SFZ1&~3^0V*$Ey*h^Wh=6b* zy?Hht$4EGza+8=CS5l1EDLQVpH-$%k%+a)`MaG3B7E(&|-0#ZIIKo*3d4j+NpUgN7x+u1W&*wOBdhNKV zJ<;0J6>hfeuiW7%Ll|OCZV*&>!K`#?g({f5AtpHib@tzY9dSR* z#4!ZSo(LDT;l#lSL=x^R7sxrpSh-W&R}*u~W;vis?Wn;*2!|tX2D$gwl&0(fBn3I% z5Sd|nYQ10Bmms;Y^&fjlP@IL4t-a<7Yp(v~T`Zi1Qc3t4__xTTzlO=g9omH_yzKY* z56h;90MaBnf*i<-pEDc|ID6(;*wVAcsA3Vg`?q||lJ#yC_1>}>Ny1^#qy;jVg!h?P zSi@Bha%bEzREw;$vdzddmLtNvuRI$fb;f>owQiNvElAPJH6UmRrV! z%IS_Uxzy2~mLy+QTl;@ld$*>&lIuL|yGRuis4xZAH-#x67y|(e1e1X=?>_WC%y>qm zIOd2WGGs(akz^{gb#NrnmJ`P=x$HzyDk>?Ji(I5CSNRFKN`7I!-MtRavsUjH!%A*| z@9kcF*nL>N&a2a}PxdT9626lcNT4aCBbsvOe!EW&TJD}Wrh#TCbZQ)!deX}2ti1gX zbCW4L$Yrd)B;46<#mBifB^O=iq*x{#!H$u*?tM5zpPe;iP9)r3i68$oH?A!eS`}Xk z(AKWyYN3H=W`x!>Fw-);HfZ33NUzdDu6IFTyO@LLJftjE3-AA;^J6C5Rdscsr>Th> zP1L}s&$|GsW38W>U?xqsbFoL8A3u{mtRe?T4Xhf6=v5&)q^qpULK(9bH*4QnLkOYW zV@BmGb2qr3GcT6C*p>xoqpqULOAY6niWIlXz6Cv(5Bc^0T8@cEmou-|vu*!}0buo~ z=vc>>SdDkgkJULkL4~^GlPFbN7$ikPq{OMH3HcOT znsr{=9`yVGp}bv!r@gkVVW~z>Zvp_??CdW15D)#=2tC1j3k{kvRmqT3VxCO;Tohmb zPH2X!lvVdRaBwi{it0=4_iWZ*1hC2P`V|W@m%qQ|_Aw5G#-$-8?L8bENJP~|6c_j@N*b?m2|LO60W@7m6L zVY2PJOFcQ5&W9#5E$}2-9RB9Ifqq9D5j^9CPKc0byT7#J`7t*D`bHxqbD=8>YvJ8g zzp|eh`D7CVum_Bo;JlR zlI&X?fD|dZWh0aO|2g&*SpUFuWW>h(De5No^#f8|l~^cw|{i?FBL)!@Go$Aqw;I*?YEnU&Kl0n5$~r?2Cvo z=q5B63cW0+8laf)te^+&m0svzIY%rsVK-h|mfJ2&$yno%Y|@^?4djPTedb~8$ikTj zpXB?93Q*I0FX@w3vO^K9yi#go_l%smaYuy#D6Np7dT+S>r0b2mw;ve7TxPtBDvox` z+AFlUtg9`+N7#IEo?+%-*vCk70wp~^GH51G+xT$+IW=*sd$L>m(Mhw8ndW{Hlo#KM zFRygRK_8c17n~j;_rfXt#0m}dC$0T<);>i9kEWBaQ%kqlRMBG-qI}Gdl7L_UQpLS= zVz&a^gM9N%A$!vmWoNUNv)~r>Duv_WDBjdZXvewgsgDD!X)ar%@qt`x7Mv`o+kwFp z0F9+f>;EzU6}LT*!KyiR9Ly|pROs`B0qps!EH9rg4)Gtu%61c9e9Z0r@d!$wy7F%V zaH(|P?gC2cnux7l;PoaaAuVuo%{jWMpbd^Q zXfQTuafIusY}O}nu@|*nKf7J4#vIR>C48?l4wFz89s+UBG8MIycEvi7%VC-}M+=1$ zzLIUXX#g6WH)y2b2LP}j z#p~>di6EEWgDxDqD`-hWkhQaBL6DWh9#KK_3TSU)Mn1s{4}xhh7x)a@fd!M3>YG@Q zu$&%k`n9o>C8MAlMwcUy6FM!AI=r~Qvp5%TP9C7{XRI`vI=|oCAHDqUr@!&$5N!^t z(`n>DCrH}u8N=eJFhlGof{peX*M~8O8dF5ENxg#uf)y6IC}koCK%G9nk4-8M(+Qb2 z66!a*6$s=A*O7hUgWCf!_%rwoXhTl}TsP!JsI{wEgdpR$4}la9fVTu7DfJ2uD%`sX z-6oiV@~p{iMo8|QWAqldR6Bp?3N9`6+-_Kl&q)eRg{FRtmCf=(^F~i$GH{=a>it?+BV>#_G-)wfRnrJfB2rc2TTtn z7*2_F>`JSoEj2rzeWz17sra$U9&MQ(W|*D1TQExZd7}0NtX9TJ86kBu!)@@lRHaLJ z4KrFu&)t;nU>#%10Ntn^-~}`AoKgQY)0(*YWsgnJqT)7Hk#^xYp!AbgW>yZ>-+B1x zR%@CMJ(L3isD#L!BFtQCF?$x+(^*l)z+tb!t>zH|Z-^(TABp_Yy@WOH|3d)wMZ*=F zeZ?L?VMNqL5Jw|-+9*OnJ^-MGSHEi|3)uMO{3aujPULp;I&`r(duk6w`;=!4>HO=i z+SJDhqOIpq_X*YoR;}xuJ3s@s+ndC%on)S~n6Z}7B)W>1*+H*R= z7DE7vrEqgq!j=_|S@rpQ!(e0&i*n>8 =ymep}|J;1&>2GHT?Ik(tEYJb>RLXMyucUVC1Sj^=2w)`8+^2s8QD1hpASuS{x|u zwiX`P(QiS$Z?00?TYhN#q*d*02l;^8P&KjUc%{7c>jslp)s&A72FDOQx1NqlRl>!_ zb8&%JMN^JH?LyjzZ5;rAACE^FNCy<08eVwVt0rZ&Ba2j6A>U7hWL;wjg^1J*>~hT_ za|Sp31;TP6(`)hH9s*n=n?iexm)tPsigrYHtz3bPTJR07%t+QT)0ixqazvb$8QONn znRdSv7Tv&*Cq7Unpu4-3ABMu+i7B$7x+Zh#0!10t0|vr-hx&ly^%oy=sV+JvXRgvEQfWdt8e$^_P?b}Y; ze9=io&pmYae#9NvO`s!Qd?tPj%u0HcVDh2&slI zQQ|CuRndfvYMki8Q$HL*FND2(S1^*s4o!x*c3Kk8(+t?rfx)a|gJ~NU>lPvthGN<# zIPO*jo*ozXZa$Cu<;^%T)D1|e`;*miIWz~L+W<7voppZ&5e}sx+jxVXw3%!7)IZZd zR(O0(uXK#-VsyZ_p3s-S^gfiA3w)j)@8<}Bu?HZw-J<{l zTNJC5jHPq9f}CmVm(yW}w}OCYKlu-^ywLjw&nOoPdb)YY`miubQ(16>g-P7H=`&+EZR&Xp@*f0|v zu!$WZVbhk^E)P?I*80w({`-A)F+mMOatFv2{yirps32BYt0;G zM@JrvNmP9uB#tL2ksGsgwD~vMCIsg3yo+EzULfu&3jJdE#6fuj3a*J9!cX(C7@*$h zmuz@4=+lI@M-v(YXyUc#5M6vBbfeIh$-;OnWTBHy2t(3m(Q7{AUfjaRB0v>{m}rMg z$K=`DjmFthGyke0%=K{;2UDH~!;TOP0lunWfS3W*_1eY)7L+Ll&^cu73oqW>G32rU z4{qyk!sSZ{_!a^ltZezDu3`PG0$==+UBvdEb9?i@@T<8ig_BM6OwnP@)!xR2gzxcfDnZ?+6><`& zXiuSi@bP?b`8Jc4X~J?h?M5)4APr_#KWqNdhYZ)OCtPw3<^IyIVxeQ!8Cb6IF^@OX zPobqO!bmBjgoZrH-l=qe<}z#i@e?R)aw&8-et@-gZm+E*#4ITu@`c#<3OOI;Dg#^f z3feWWI}n91tLi>VrAnc&Vnis}npo4n$Mse&1a$bk2SH4>TDf^NYw{Y20&6Z0tCCt( zDf>Wo`oO=Hn7%)F$-4L)jGh&f84N02Ts}qFQnGR3Lu*{)a4tnsZ@#i^TeQI!v zBmSj@l&!Z?^np7#0u~SCY?cQtKM_~}DRCnW^pv1fTY}7MXf$p-%B_wj#v6;GFv9Og z*0?@}LMDauJtUIfMMrPMxP)j@V*I}}un@~Egu%48w&$nqAr{<*>*UZ}H4Lg~n#lzRVKU+v98Ra2(Yb-Kl{V2H=-b!eSEao??MB8r8MgqSIx^ZWi?d>ROW4<6bVlZCPw7B3z*LI8B*u6h zhj;vV2zwq@&g8Y$gItBe5!<6~MypR(~wUw-3G{p93czIazJ==9KO|AyO7 zz*aWF#Wnyj|3?T724p5(h(ZvIFSf94*{SC7`#6X_=0!b)aC(;5*bJOqS|JQ+6bMWa z9a1iYjZfpRaTjK?dZ<&;s!OBL+fGB^kWaCX?hY4Yfo!$Ji{QOceGd zL%L0tp^Pnl8QDy?4gU&z3B-U=vl}Duu}2j=>2)NGj>f>DTFaqgfv6ChY`FnTR2Q?u z2;%8CCoOG7Ix;PU_AhtZpLajd&GY$n%AXzHw8&X})N63ed`Xhj4+E$;rkxF~Vp4yC zqHiTPAW!1(Sq}jeP`wh#S`JR&RMl44T&rGT6$Y+>o8g9Y2508ktwd}U!$&zjoFk%k zCI($?L;JVfUbH-Hhz-&SQENFH9E2NY-Zr^f%(-I8OAS=foX+HhbwME{SLDct>eSVZ z{9c>48(YwCQb*f@_4sg3VyVa3XeC=)-x~Uu< zg~BE@sZ}3vRa-tL51Qu-I0%@Jp8Fr+2u{^jGno%hsuB`4Q+Um#EpqgQpSRcmF-lQG zazue|as$Bb@e(}jLAyv!%j-)MKYN~(wpik4nQ6R5PO z;|T&xaENoyN+_d?VyiMqfW}Ussha-9R9mflgG5v$AikWEaT1sNMQ&49QN-U9itiYx zqaHR0l82PE$saN_%5y<5K5*hwK%Oi3kB$L2B(d28wgF3})@Ge=?v46$gX7KSC$`-u zB13M_$TdH1TLKExbAlyw|GL|!J=WVugrs?hZP!#D(rxvjd zDwqN@(plFlPs(Y>W9s{_Hc?u>qKV>TsStp5utNUsx?)VhY)XQ|aTTY7iEZH`c1A7K^$TQn zg*#B-W;Zqjag_1c0Z(3!*Bo~Yd4wU{)hnP)d9d|(<%oJP(p~9I=|!(WKytSl8ri{JxZ=cHgNWx#5P>vGeQFs zDO|nBefzg}fxd$@bx@SsVuNRA4NNNW^aP?|<4jMmK=kItbfxynjV1-(`7+3h9IjS( z&bG3dd=Y>g&b9k(DxHmwqsrmp<7o1^{=Iam|23^23z0kD{QMkLEzUdZ?0UH?o6!)# zint)Ja5002y6<^~i$?N(_q4AQn?0EGna3yo!!w}%qdCd-A#vW=IT$AUI$P)X<^73V z|Cos7AEw(?uhz}8emRbw-YOClcfW6IvBie|)cx(v4{GCCN#+}?o>?gKSPS>|48V>` zXJ%?ua5A&~w58$K{(|5Mz0I|WE1bF&m7b3cFl zuZh84bwSx(@?CH!TzPQ`ne3F2j^S(fHj%-_b$OQ(V?$qVTW>lu@!g zcUikt5osO>8<-tWqu}3KWs(7 zn3-fGXi{5EVEh~uX_!hRbnzy1v5@W{?g;Ts#l?vwnCb>5@{`mIwF@1ahLIb1G$0jN zcZ`FchBm9|lY7kane+Oonc=1(lJ|Uzcoos$%k(}ds|?UloDuAfUS;U*x(VXOE1Z{# zR$_Ats%UU}+P$VwPa2v$W3Z@?a8DB)1Er44cj@}vTnv*X4=*xkmixR(Kv^<;g5fuO z^OJIbQ|CS4Dl&}RBq&zI)i^b`d^`JE#Gq}*0=40imn#aI?oBye)gUS8OVgZ@ug~Cz zscMZcDHIq-yX~4oS6{`kGYzjq6Z_@k!g(zuLB`JFH(qdEVN8FgSalEs+Owxg3kLqf6R0L&0_1K1o$1bY#kF(L#CqublIQ0dwPrZ;xhuB2Ig3Vl5JO5zF zg}pDRjE=;)vcfPA(NBRK|8=Mxo!w%)CR$Hs+Y;6kF%mSs4Yf7+??+rn#!1djY^#RxValwxAc;>47-T<4t z&Gf9~E8HEH7Uca@ag=_WO9_vQu^lo2E6A6h1~`3bElk_{0I+49?bLNKQs%Q`F!id} zvSh7a9AQyER~w{633%iyCbMm052{l_(Ho#ec!6zy)dTI^+zi*KsfbFRB{-v;qrh7r zR`C0))($&7^t98-IfO=je%5BN^u12*O>8^o5tr*ZkJt*K?|>}d5>~aiGtWY~z0O%f zHGv`2HRtf$lNu-K@5$CBcJxbT3nbQ{3pBy5h$N@0o0H^ ze~HQGo`tGRbH>Jwcha@ zIfs5&<2gKoo3BD#JE;bduZ;^|-Z_naC^v#=r+w;{6MK}Zm^}*BC!;k6D4m!-%ALiO zHzKAorqvodUQu4Pn=q@_P_JINrv=iSS>ZBuF0XEOTq`sa>U>)hxqQ$mJcCYX2{qwy zQtkNVFW7sdo}n2H7e8}p>Y$LjZW*5my+A~S7L8XVwTspUeEl2tEc z*L0ZnER!F%sX87CMgI>*DqMEDw?%^ttl4(#Lxx+<0vb$Xd@m#7C}6%E?yk_~xcE;( zHR*}yBUKa;dyHT5I9GR9(hv_G+A=`;SS)9n+l1N=xG< zP;}9`0b5Cn;_`$0&!q!_Bc=LYl0)qnC_%cO|kYAY9;yH0Fk;D z4W45m!6q^y@nCZnwSNb#>6-ixKDF*Ph&?)KM99&z&AN4>B$wAcm|Rb^Mw~Te#mwj{ z&;p%PT;|Q!vmNOfy!`~*a~Rl%2){VJ|2~vAk2oM5@s8=kXiIMyky=(J8B#OYSjZ{+ zSr3?==E=|7-FDv7LKpm5i1+$=65qXr7?B_e^C2C(r_j5Rj73CiDlS%PyQnUN(T1n1 zk|kYY2+){fd{ed%;A^1OWBMOk;ig+NsaClVv*CtOy%>rVgAozwKMHLMr4_J;m-10` zLhXE%x-kJlq}|_V(2dML7r7Fs2RV^wO5}Y#^qLGuD2%oT&!El(VjAS9M{kba6V)0BUj}__d0h;gY+*(_kKwHRf+fTcEa!u+Qx{{)!a8s8arxu#ePnw|##U}_;1Woxv#qo)cPCp9`@M@!L9&phSrwMHG0 zi$Z%8l6J_x!0Pj059AzyF$rFtv|lKquD%-pR)YO{R@uM6Hk$qfzYu86O^DX|rt9I> zLf4SA+X{QyT#@i2gf<1z#6IHbIoO7_y^Iqi3VLQ}KR$u>XmvTTa0WKRujT3_wv*%0 zh3@W3-IDPHx}%avK*`d}}n1RsZBv(_IfIM@T(ota+f28VOf2fr-H#apH z`OiW*TCzsu`J@M{I~tFRTtgJ^a+OQDtlY0y{0I@_@TqtGgO}(c(7v(zT#_Irps4lg zxr?Qh-i1O8h1(p@8P3JN_YAlV$jqZ!E6r`NoUE)&`LEy%~Hm<8WLA01^` zjgRPD7Q6CWcRCuW!{k@bLe;egdjWUHXrI1S+0Nw*^Fn0T4k7dy;9?&ia$RhCAF7>| z(5PM+Io&gW$%kd7FbWmbuHKd@NI-lY>>>vP>~QEs(bZ=Vt(uf?YMJ9!rJ{de0F)J| zL9`vM!p^5Jpq%oP;iNu5AQa0#z>1BAZHV@R5r6hts#d}GW7)kIshZ{I-QSH=#&k0h zBxX=bR#^xOtZ1SHk^XSfUJ1f6xS`d3177Lp%(bW~3Jf&9<5*=IVRXJlTX0|vEoUeh z2-us4v4osYh=v`TH6z@6ueS7)D@>?W2}eK^GVRJO55Mf4S%!~MjWZN_m?m9K;T`EG z4mX3I=-#S@llM6*-*4h#BZZs9je@3YY}JPdxf>znUu1(m2gpcDDUtn*VLD{glK{aO z>0zqH7bul8&dk;RhB{>ga!RCa{6->GLnVa{FA_7k+`?o$;BwmU8bsihev(YU3d2kq z%zHBw1&BO$BNJlDLbIXcP&AA5>Zqwc@V*&o{{U4^BfU`mJWZn_M*5kaF(V1?>q(TP z*n0Nylf&C`AeIY=SxXa6sI1EI4l7Y7jW}}*Gf9c>7@Mh1vm`z9T)TH2R?S{}QP8m# z*)S3zHt|1N$v)F^yFa3VitAHEZgx+9Ix1GtUV#gJPpf=M^^D2~srp1(85^?cTvxBf z%&0AQ>wz7WTW_N`lNGn$ZM_wj>IeDbw1RIoz#PME4&!M@u+UR?>X)uARGd`!C5NXS z=~4f-v6|DKDw91pTxZ{+z(Y~WW(J(~z&)^1F|Cy?!c?2O-tx#dy#K8_J9`gAq@hy_ ztUKMj*Q-pbc^%6r2`qOuKUgS=e=Qi*c1b@pkR2C_*0M$ zlSr`iPEnJHJodj&UIv!S!5fXj5i<-6f~EIUp|cF~-uSdeDK%?}J_#-kG@yiN;kxV` zxy9HZx1@maLeq2J&Fx$5=P38MyMx0*#0;Q|D$1RzjP41L(bAp^7HQR|FBjaSolA<`)|DY_s74_hC7J6 zvF^TQISfc7DI}x@qog>-;c8lP=a^={4LR6p3xp17lK-nPcuOihKO1)u{*wWN8t^sZ z1=D2GP?nB)x%naYKW>r)-IdeLtN>EGQh*4vQmDQCF7~!)Zu-fSM>l1w5E?D^sTnWq zV0tm=Y&CcLTkg5_=@Rofgy5~F7Xf~)i?%6=cTrmr{30`&xabnqt+@HWt-B&0Ci%ea zB;@qi6K{`c_{`kL&c@2e1HWW~T@2m`SY_Wk7|ojbp69=o#4QZl&M^D zzS{;ZVl3GoYw*;mv>qF+M7$^~5536($VV?Vb7yxfO?@~IyvEJcY00{}@#cT;_SGg` zI63bOTZwo4n`~ms%(|v~SUR`<=KoA{is!5(^N?`P243B7c+LvX&(gO0jbxTfK0t%N*Bc$yQ0w1=P=&<{A_$a@qWtf6csS**?>d4r~^y8RlnIC zKp)I@ndpX2JzKb0pOs?)Z+_>j&o<+Y4!u8HW{bn&`i^d!70RD>`wh>Pz3e@lC01d8 zs4>^E-|N4~Bk{eVw{iL z;0X@b@{DX3jR}Hic5r-azLV6U84y@M_IfqzQnR}eqP=q}N4RtNI(6~Wrec*MrjvK4 z@^8-iG`i3}b#wzC?{-ae;hw0rjN#gQ?=<3P-C4BHT6}9g!$AvlFxAFC$&DvK0wdp4 zOOcF^*~X9RzYaZaKzN`jY!}mxFvbj#Sr*1MMQtPO)cx}`s$jL8w=%pyxC!CawkSqm z9&qxFgyKfN$q*?u4<*;CN2M!Wt>5_9Vbndo9KN!bgugR0QuJBPd_sW$E^P)4UH;%~ z1`AxDiYVoCSE3(9gi#JQ>tA%cG9rhqUxj82Cf)%V?(jVeAg6j&|K*k84A&2AY-=dK zUHqX(fE2!)ek*^kJ76;g!vlA)$kmryV@-3wmhDGZPOVz z=d|hT(5~$7=9acdBR#$yUV9ZYJ(*e|&VA*cj}uVz>kDNCvOXIr^|zs6VqrUU`*nFn z_ZS(v9u!vtt9mTWe|<8KNRD4eVlxm7$iuI?SSaJbfi@aQY#o>Z7P=0Si|%`TFa`bU zs>yj9nT2k8p2WilWfIPaGtCnygYaz}od{nv4K*F&MLbmgs@wB=y2PFJ?cUGK^f1Y* zh~odk@mD1U0xz3oCTH*0_%1Fnzhwilvwd)W|3<6)}<*WYpfrxLi5hUlFmKR$e>ZC&}gP zwrq}cs?j`Xb4FtP=|1pdtmTp454)MpNEFFzZ>`yUBJH#7`KDh97#Am zob)#n8-wwUEfAg9ux}>9=@8qy3WiW4v#Z2^?@aNy^GoM-P_Iku+K?G$0c6s;i5~9O z`*~_>9>YbDc(u6-FwHSSQB<4a9mj+c9lB(IH#*m=oJ*yHUZIFYKc4o#?GBt6>pkrww( zW+oQ~;Jej(^WTMrV`oj{OWDJlQ6dO@eZ&HGuzx#@JpmWLCaQls9J}K%7sAa=m5Nuf z^A1?&stV{lZKfQx{cmj8cd%>4w|?&R(IqFRNeSZ0`+R~um`D=Eo}&v=55zKH0~27j zD1jDmOtEc69Uy7wDo9qK>ufRh6Bcz%Pj83H{$Y2(DG5+kCVO_K;G0|qiO3){&J5F4 zRn9db^_4#PEy$}$JjEM*0L0e%T8M5W zqH$F#@+z~>4aIZ~5sDcWS4ykl;~!u{r3|jo#CGHicg&(GejBK8r_iB+?TJB^kxD?=2!M_uMD+ClKBV|a(3IY1_2-U5TYhuwZH!VYaZWx5@81a zLw5$ruEsG=-upao*2re9TzgWwdmb2lBBjo7o7oqf=%PnZVJ`C4M|Bu}pxUM^Bfn>A z4BVz{GVC(Fzc{V&ydIP|8EB&o&**JCI(Qy28>&>o-7C7qm=*`iG^%MzG5 z6jK(MQIIWn1(f0WL0L>2=AU(kF_-de(UlKec-dHTt_R>}c^ow5n1Jj$`<9IblJ2$L z?Y(=2R-zs0Y~i&bI%5Rp)I^@R4_%c*d!dbJ&u3*8Atd}KXnr6w-S{}`uApk2d zqEG;zign?JriIi4J%FpO^OQ{FET(Vm;h%&aM#h2P6%Rx+^yGOSf8cbi7CAM@AvA|YU!Uh^$?(zVmVPk5f;0l1#Z1Y;c*^TMeP z#tbtTW)0PLb}Q6jXT&ryhbb-{5YIG)5vKeYtGdl{`PyPHLE%!W;|P?j?aB8$zNrv; z7K?iKTtPlyPw0FCso{m5oZ~bE<2X>M^DDly%*3d%NzcCd08|p=w?e}}lol0ro6&rG zQx+wJiujVThOA((Agm)zJCFfQnh%EiJJ3xVlddCZKG2!s0>oGeBI8{}Vntoq^Gg}* zZyHZ$_BX<|0;b<<{4IAxdnQ3ev{t<94~of|nQLwX#hE0ujg1B?BfQ^}e67%OKkE*& zfIZ@N&c>Jl(8Mx2i_-P|liqz_FVTQ+wQ!W)my-eBPf}v^Edqn?hP88a4UnCm)k`hP z&0tP*XgEpe3O6V=)5pb(e0aE#r0BD`^QlbRwDotxeT)q!HP#$}ZQ6}`awXB2DP#SX z25H!Z&X_Ik288+6XCJb#hy*2l8If65GJDw>1HFfqc)*y~j6+R;8kNI{%AR0IXQPp? zg-aQ;hQgJF19u2=gbiHBek*r{(ddG>O83jz5R{5J_Wbg!*UXE|uyqsPg&(J0Y+_Mb z8O%|W1g)XIzY85^9pKgzn0ynnL*sx3uxB_GrhPX|WOJS*SlkL0vcAngKHiid@CjD_ zc!U?;zQT+C755u1h~r+nw`2c1-Rh7!S`?WLDjuvK*pB4x$^KHycCeeXatQzyjyeSj zq$CM%Q!}}Qn@&V|>~_swWq74)@8;`E_9VecHi{aU_m*qt>Kr;_;RIGrX!bb>(mjw_ z(aam%%0iWtkdW?e09{;rFt=1*i%XXG+1XFG2rOjU>GmXJ61)U?SI2g>Nbuuk()iU$ z!|azPf)jA@YE+U4US48Hi$n!InvIC5YkUj?+vH_iEX4_KhO~9fhBSChS>=pB{zgjfnt(ogBR{bB|ZMv%XqK3DIINLAQHG#-Qv+iIGpa z!+^HQ&~OfT8cvnc&yf+_m~z(D-Lc^;CXXbhXMs0FX#a$pI{&=$PFV2RSE+%qNi9x@ ztZeQ$=n(K+9Sz=a10upW^r=QE0BHP1nZR>|DEehB*1MPm!!1(hTHkNi&jQJZsC<=J zbL3pLQ=bjk-)p1Rc0ir#up@6vH7=S$Z8r|AB6;1*r_e|U3^*!8DJyj;5lJwr4ZD-v z5lWw8tKeO0a#oGyVxq$)oOq3GE$kr@KYDR|^0Q_d9Z*kB0AB04&*6pR>T@^AsA!#%_`9G6D?P>#rLLGSJ?l~bi|1t zf7f6-%Br&43VKleG>p9~v2an&MlV8h9EfJuGk623Nu`pqb2N*N7i@8|nA8KCrViMU z0v**yYX*~4w$!A(2>y)|Fo3M+>bUh(?&8N`xOUggX4m$2su6MQ17?k)6;v6E`ajIc zVzR5qn3CjW?HIiYDP^)DRB`5O`--l&b}n~V?@1Z@qSw`3Y=@hFWm69!KMF)UFgfW6mtbNy3OqPN z*RjpE=A(heoK((%yDEIjYXq&PI-)qR4=ZB*{k1}p?d&CnV{wz&<;-~0bS*PU7G}ur zmBJ%sJ7E>y7uSDqGnl6iaP2~71lUxJYiSRC9G=S~I4nfh8aAp5p z9?9N@>%J4_{563^TG#B_RPo|Rq1L#)K_@ew3)z|>bLO|mUL{{ zH>SN0C>qq$`jQ9VSO z8D@0@S(u+3MtBNlUlW*wEY7>KVb&!c-YDrY!{!|KBls?YWHY&r#JwJr%Ue#&KWeWo zNx;wtKM#Ecr(}~KCC^-Whz5{Tj6Jmbvpj$q>+mM}8CsdanbUPLVbJHH_h3CR(N-=O zh%r{>Ilqg|5j`iGI^t%tKpx|bZ*<(h?)Iz^E0jJLG8f7TrjS&{tc^o)s!^mAJdq%VFg54AWKV$`IcOihQr`NjF2 z&_~cWU05lEo>#lmw{+6mDg2wWeluUTbg)d{G&rj_df`ieIR4?;EYQP#(zn1~l%A99 z9kcs~-QF;km$7LV5E_O!C^M*^D7pm-tT`fru<&5$X*$KP6FjXda$DvNKkyYbv#wtc zeTA)BNxV}~?bC$XzV1loMQ&qdMdn3~@K-wi;e<&xMhl%|mgoPnJ5nAd-0=J!uXL(< zh`W8-$9cdRs0y=CtWLtO60o37i(Wg{PJcVVne7sq;a-nTXKryWtsso+M&(Ra2_ia+ z%#fbm=xZ41xluJTLsxWJoPZ7&qzzV=(|1B8$vkP}C2$V1p~RoHU&P zxr*CVJyCyvJq9*;O9o;_kz$-O#M{wnWIpS@C8AZ^OBbS7p?+slOVXDHm2y(Obp0{Y zD==DUQq_EQh%%FwHCwEU^WGNk?dbP=*e`~Qz^BEm`j`h2k@KPgB@U}WksMG{hCbRO zll2-<%ou1Sq>tnC66clAwj<-?q=`K5kL zH4-0kKeP5@dY_9E5Bpxz7-JLWVVXs(F^uU=rPV`}z9|l$ffk%#{WrpKXOiZ@G1nfAbvT_G$O8StiV8k3r@EQ~ zE|9>^^x9}#$Gw0Ad|o=ty9)@7ThF)(Lk@{&$jYY{+qczw2<_eeyxja-E8osVD2O9+ zY_@DI40tjyyAUq?>pU`Y^8<)&6oHEJT{U6t19^4K5Z>N-h#*SDO)+Br0&KvhcH74B ztx7M0rJ#rN{TNz04p=zKe6uT?0cUhon_^n{Zs4}NDVQ#nm|C@4cLh~ zg9&2DPVBZclRBck4WEUcXSKn?vlTe(U0KaXp>dtiQW?nCTxE+x7J*fo_Ax@LV6Tbg zi`hN2n7X@KxElaeK&!v-6>a#$lDHfm6h$kLisLO0A&J4J812r|D(ncam(@M4L4=*y zx;Zr!dqcC0+0{F%xJ=)!Oh42HtO244j}@@90O;SIb=MW1Paqr{lW_V%%p4`%=!o?? zAF>eNL9uUxV9ai(DZRc9-QmS7{N@i3a?HXWBVzl5&{rV3(H1N_+b|!4!aM!)-w53Y z<#^k?wIdxDQ`G^n$FFf`7$J$0wrn18!!#S($FE}_5bouaM$#vy;YZli6?zLzIr; z1I8uUnByxh6>_fZCHLjpEqzH276e3IM7S3~Ev5%sm>9t*J2St|zxDs6(@u}%1XdK$ zTH@p(S^C(aAN&sTUNqg$q6lwMapm54OGGmqr}Q*{Hj_VV0qv7JS31?~w6MvntM2$U z00{Ltq%fvO#27fqv#XSrT6G_)?hvY9NFcZ*(w$P-h8B)>`V1RvB(f`pOF^%Tj3GRx z%8ZKu!S)8^EMTeXVv^RdiP_dtGv(HDx1={h$^_rH0MwRZpS?#hJX9lBlafo&j>T8( zxVyVr-UQo2aMc@Sd`T~`B1H>&XSqDBwdCU6EabYV?(Fxi?x+S#?4`4`v6=<-u2{G58)qM-bn zE#8`DnaRVkc*jM$S(>g4K#WM%5o-U%`Di}W**L)jZfBWpZ%oy>qRrz3QcbYbTxW2k zvnVcgiT*5ff|7Xk@RPfeZPhlyTdq7}<9>Bi`b8ewp`~;Sktw6T|r061?74Jpel$;{qxZKObD5}?&d=bk}`Ir_g z!yJ>e16OO!fSbpd!<4gi_i&1}k3Y_RoSC5q|C?P6Ai-0VEH3Q!7JcDulp=>?HpjB{ z8=fp%nk_L4yM3Lqu!|~U*yIXbX5FxH(<5LetFN(_m8nWy--BkDm9AY}sXzqv>~C7O zv3C$gim_=w3Buzx;o1qbS% zA&daoM@$N9)JJ2=zlTkXKQ;&O6sS=9~~!IU)L< z`uSebK2qCHV?qg=n${h13P*jBuGpM$3UV?xVw!z8GGtIUTql={cy0e_fS)-cK*%nA zB?2;gZMd$&3~Xl}Df++_apLl5vom<>FK_@Gr)6Y;am1r=)~`boy=;M9%b zw4>yCVL?}{@$516+)85t{hz*wL9U>tWjTiKLX18I1J2@)5qkXkq(=&ImE|Za&>_~> zC#f&8IW&9ZU1d#SQEB9Cqf2f+7w1Y%_3R>I&bR86i>h~G+YQ*{V3r$J4T#RsLRe-e z-2vzVRLNS@8M8-K2IfG}BRmMN5w18@D^^!c*nqJ;7k2{#7!_7pEo_RT(M8fL7)2au z1;rC&X^tK&!GB=~#}#wf{`r;Ov%ku~RB+ct(cH?(oHCgSnEh`5-1oct1@Ly09a<%YjrHe`54nERYRFHd>TN*AS9+Dyo1L zK429u^J+Qom{vrt7zoUS?2Cl4Iu7?OG*BM}jhkeJr)@S5h-x#E$u|A&=Ihh*(m&Sc zHULx_%x17m#A3({-Y-&3^OEbaGOx6OxXc_ORC3$wW#_YoS6lr7w2FZx_3WT%MdSm; zuPA0hOuWr^v3q-iS5lUGRGke(O&2v0`Q6aPaw5b)(eJ{dg%vDyA?w?QJx{8`m?&_8 zc;su?DzPE_iM0$4d|+f2t!cLSm{1~wIrZoQ4&dU+m1k4ZYgNaujVx~6);iEPOCpr0 zBNXA8XRGo7>*_D=pvsY!cA&pW$*a-?-MxPLciJnPf9awF4 zS9ie$*g&sJ(fn#?qIP?t*q)g6+w_Wcu0V8USN+10zo8l48TiAqnwYFjO^}zs zb8~X;Pq`oB8HVcSw6msZ*9Z<44ouDJqsDIGNL#C_X=b%zH!-V-$~DHFLY9k5yQ?wR zsFYQM=n>;>-pr_L_yON3B=07&(s7x6vBncTqwN0S-hrAI4Q7bVLil%+x_^q$SJZ$D z(CtO!($BH&PV!Y%iYq@@1=prURyF|;{Bo*(EjxaqvXEDsSb+Pt85m#sSq_T@yMK8G z&)w1-(w@vb;pYJucTY$aC0NhX13c*hXze4cH4}a$k!zI%_eXQxlpBC2PdjL`K6g0T zoU{_Z#$cy@p~qJ4vH9jeBGne8?KqM5wZ}SLH8-%-1ecq8ic@C`c)L2XT2tZLEv(P% zeJETlBI4$@=}iQ?XhMQd5ny!tDJQeLL|cLI=ap_3l@DuADE`G@@`Rhk8g`{(?HECL z`w*95>&IjYk%dUfJF;JOReHU|-sbSCmZ$$y2-jqn;yScBk>jS8?;>D7@B z?LeCSbXolz&(VU!1EU$n&-otXnY7eDE_#Fm13sA^@pDDPu4mv1xA#&~2b=nEp&D}% z9njEeHRp34)sZcPw10zrS*SlVP2N4~oKs(<#H4dRA68Xk0f~y2 zZH!5igO*2TJ{Rc|Gm_SqQ}B*8wq!z}Kai&!qr=UX^)$F_Y6`U`fB*QrpP5kZ8#~lZ$$_Hivi+yf%%TB`D!8DCxktf{gG^v44MO~j@tqx|6Aq$%TS0Tw5 z8~EcF$bJ<|9?kv%k3(J4>>|8Y?_5(%`X%*VW;%UK?d29~ z+v&YqOGhf4jKLZ3DgcwXZUi3ik;4H`MU`bXGs9erAr$UrUAAf*_6(>pVnEOyMPom;( zKRaJ@PphZV7s_3O>!JSG%BLhB09|2C_@ji%K$pn!eOP?KhYVIU-G{9%;q>kSvK44> zt9{c0t!R4wZT2;32i1SpbN;Qh{v2=aE$xpx9H0|aGGJ~2BiC~<)< z9w4q&H1Rr4>u$XF;3v?m%7&U+Ync?Ej?OyFXm@Gsvxtr0sF|H!FxN5`_G1LChUS8L zvENZd+OGoeH!)qofMlySkZtj0rDHuUh|B2gxdfTHbXDZ?Kr7p^9jncY zTaOjXdPZ7Yl6-BjZA~%ya%51OI7$zU8Es$#d>rm6o_GI1i7iFz19$$Y!mHpjnD{%; za1B|+Mz_CY&|=ZC;6!hQ7S~f1I9}&jE^wU(I)`~ZE3#Hv0$^x`9!^}X3-ADTp?x|o ziLqdJHy78qj4W5&>1fdD-vXsHD)|k;hg=y@1N&SXP;1Gr(?wB7S*I#H408_Wm~K7=qMTvlP~eqd7R_R{5XJQ^Q%+ zJowG63|9h}=#mhMXm5%?7jV?oe+|z$Wl^=GF@fZBg`*L<>S~bs8fx8jz&J)1wD>un z#ssD?4-rNI?(Rq^*KhDI=knvs`m`rc;A!jfnrkV+wW*bNAgjT#Ik4@O&-Dj$njB3B z88xbm2Y%?qp=5)-hmD`6h@>hBMa}c$6>BMWcCXfYE`FauDGxh1rDs)a?VN0D!lrGf zt~wisi&LY(Q4fcV^X8tSw+UX1Mw0krS-M9V_KCi#bg+wgW%Z5UD|UH=z{n+SFtY`G zER-W)4ygjQmGFH?X{Yej4ld~p#yP4Au&m0O$Ypd@Zx!7LWdIX+-$(6kjEs&tgNzFIIp>t+bPZUk!;Un zUH1tg6?w~?C-p4^n+32CcW=9*(qmLCs|bbg?M08E%xDKKmEjB<_|Wg6-aC-7yEyodm;TP4=dCWHXqNUCkAO;CP*R0T_QSM-m-d$qE$Ho)pc5zZK4BTWg7Adn87?o0`fpDMMaMocjZ=F z$~CBGt>NNpQjc4M*i1w%^f|eTqg!#pwg;qP5oMj8IO;pRH#WB0aLgAz13^RE@~h*Va!C%CbinHZuLIt7l86 zt4hE+=#x&Nx(lw{6>RbIe!1Gx7FZlSbsHDzl?jDS2XudiLff_G0a@T@p{3KS?f^){ zA{G89me}NdK6tO2aHyTJhMYR#>CEo`0YKo!7Y@3$K*)%|2R-Z*9>BT0$=x1sxgCAH zKlh>JV8KWIx!&BL?C-i>BmVSz63)SG1oK1byFT$Z?&>V91XgL1FTHig8$HV{GVEh^ zv^C(Ed>U|k0G6n|gP1GY;VRF%;Eu`u_CsS>fPNMc^0lA-AT%CGdRIZA`MOjJpc3YH z-}k@V{k|J;<`l%=#Q$D>Q&52C!3%S|+z@Dn;D#K5^}n)pn%15`m z{Ky09dKQfF<_9?B?zVIBgR@1}#(7JcutmEXEjC7d>f4()BY>F|PMT}OG}guScB0;F ztsqCMi)#n73af%ige(!VV3^FMhMQ{e7CfS)UEkb}$!*>+k1r<38^Eabud#P^Gm0^t zuE#7)>B{U8kU)$RhqRkH9@SHr0h<3S%U_XS4`6Ng+p3BbKI|0UQMWZAaw`vM*+SCB z@U6=hr^^~36L2=_>+IEqvn`6W~hzAu8;`8>}C#>fC(t79phW>+$|oPw)g^O z%zXBICaf!SYo&_Q28JhVNpk>k<689&vL>pfcUuNi7h;<2S@l@jaB6WpO+3F=fo!XV z!ynIl5dpHC?H{)`MT4Gium>DczB`f-2A)HA%Gkl47BuvJlI)8sS#p2G%Gv`j#1;= zU{?!^-^Shxj`j~06>N0@kqYPDp7h;9F&+J_pj29J{u_kf2xrCohkRZTe^F%QU|fgs z_)9vNX+-j{U_2EAQehMpO`=t!vHvmyQ19>T`UmG-y8&}|)@s|SD^cC5LRXX8+?mT^ z4sw2k61(~Dv292N9q5F!i(1- zfiw=0YzG%kVJQDN41-1mK-f}@u0Yt?MF`shfxv&9N14GW5Hmw}^KF|;*eD#{FG7dv zk;jC6^VXrJ zkw8-01WP>LLIQ-|XNlSpzka5RLVSDfi?BE zeoWNGk}U~nsBkUqdBRm@x-&RqXQ3BF>lWHV1W6Fwqy^gf!`zsY6h=h4#xxNYc!BN_68amDA(ZnFPlAw-=qC3g zY-w-spy8B$^Gq6r#&Zc-cV@Y@rSon?%>r6fNl-y-ixCB6plON67H1{xO_{lQ zG!KB$9bYa)^&YBz3(0LX^8#0MAmWQ+crHAUy@@8>XhDjtt*Tqwlv)t6n%cY?XH6n8 zGy2YBg*VO{WMY`8TWsxrhF$Cwts~}^hWxUo!s?2@9xQ}u3&c0!q@XDK zv5B1V9ZZjh^M=$HMDreL==xg4N!^9iXhJ2acj5VmN1IK`hdfTclC z@)wTq*@D(tvu+zrIj=FM5IV$vQCukD#vw+q#4F;q)+)iPfLVb(qFoF0(7bIBzzm)) zYHd>Z(k#-$I)T_~O?l)n3Bu&;rW}z=dg8j0t`!!0v*V?b?*cI<$5>duQN`z4D62YY z>`AC)_t@km!n#k)a&4hs%y!Ytkt#(YA{U4W4}|P~ zj{B;5tuLlm)@9B8tW0F6zSXVN>!$r)XxQTm`iw4`UI)&s36(zNu7w+`G>gXHvFhQJ zYZLa*ZTXMS{UNp;dBGQO0B+LH5OR-`P2TnPm)P5+apLTa9eOgSvG>Lrud$d0KM8&s zg}etu2Kfmlb=PSJuxSn6GNdn)TGKBxB{QD`JZ_~4!FPT4cWLz;Tg`{Pcq0LYVV)11 z{RP0dKx7bOH4<28pi?0y+Bcg_iU^vbIL89djX<7vC2ONziPiB5*_?f+J5nCTaCAE@ zP6zq^NDx1xNp}s!C+P>AZlv^GMx(9F1ozY@E!NxyXp}@5yJnJZ9Qj2v2niZ;p3J%wMG* zqXjB>35uo^6MR@a*53~ufy%zmFU%eJ%!yd$b?AGI7^3NnBcao*iBJYU2Apm@{-}nCc+vw~TK2XD z=o0(RDekvC(qjq}x)3$k7`O!`&J*+8v&M=*_(`O<5`xpJ45hH4ya3xn{~@+fIhLaY zA8l22j)-oYc%&4|KwnUNCa~&;aDcVF$#D+mRSn+klsG0=iE0a2_YwferPQPb(*gE~ z!I}lX2h_1Dv=`XKTjn7GXiNa=v%qbfz|70?<|*1Y{tYbBHsPSVc>!IJrui9#+e|dx0K0bz)%yj<<5gN4}{R9Wh>4uB|9A@daP%| z?_l$V(<5R-^SA3`ytqJGq8q0Pfxwb?dk5ki$#OG>omIS3RPDLn{0;QbmttdD>5wHZ z>w-;wJ@KPD_jZ0a0_f*?77M*4oisxiCWDI_B6dxC$25SSn_16I(Ga$+%^KPmm86W5 zi$N^f(ZQ^#@WdJ}9hqIrCPCq_7kIm&t*56iE_2+9$^#T~M$}a#g21CL%mJW03z)&# zJs_^$2+JU!DS=$i)^HQBn1(EZQ3*ccChx+o$~QO(%B4}x+ku7TU+1pvgm>?1&va_4v#&i!OQDpPF*Mkf<3!&Fe$~8!u zm}-m+a+4Hpq-|e?x_`pJlHqG&e*~*7!u_nqwJnl(%pZt$T6bYNpCZ_*%8u37@F4)W z&vU8Holve6I+Cuf&hmQJ?tWxd8_SrwJ_r~kYSJeg!@U1IbT=h*2+=OHF)*2(ELFAZ zL2l~+B@EEc-b#AyWet?tsAi5mBUra_H~K5UcgEsuw?6rB*GNr z(6embQ|MGqaeb1_G4!7(0DTx{=EhG7UJQ-J9oYD2GmT1%2lYR7M>tF7xyGmN%rz-z?P5{R(TDF`1UJg4DY zc1@g&GMo5oCO2gTb7-_+)tlLoo}+O)SYDx&8tm?@QwXWmH=Ef4>-p&ZJ%Fwny^a+*U7dZ+A7F>& zW9|vn@a|r%;+ubp!00g>1h3`?ng!WgI>80qBGgiYhmctXn^Y7RCIboIqP4ya1^b=B zUf533!b-D(HifMjZ)^O-T@Irk!!0$=Ey;7vTCUKt>lo~B#jN2Fs*{|b{A61mtfXUx z13oRZNoGK?khSk|^8YB0my83i8QgBpv2GWznWsnf7u`X&;2A z9_&nCjOL`I(@%agvR=QNd(VlV!ehPj7liAh>Xy$_&)%&b91^>5^B-Mp9w!rgU1lPO z7$bHGhLtG>!9|`IqQCtV|1J1O?tn&n8=ut4?8f1exV3`;+=$ZB z1dr-xE+`qyOqjAR1&iYll)K1!|Dlzfc-us+;pCtIZQ(|C<)1K9@xRo5& z?kAS3ANOmaqbbonIFAjmxYJQ1_Yq%}5+x1CxEr=P;cHq)@*Wut`_*~N&hY_uv7xvg z6)+~$BX%NJMo!9(dFYJXqBx-NBklR(i|!L16HT=Os?<2Bp3ZC4`$t+@T4h;TdsM&- zEBHkoQ~W%%TmcmgOx3SMZtoMs64K^Ttg-`ksz^?(jdz-{V@^CyJ21Et5K^Wsqv#qK z{b}VVbred^FR0ObGxnuiPSgf&zSK>t{$p;{@n|t@y7rz+iyojZf={tSo4unHc$X$M zgj?Nmqlvgzgh5Wjh$J)2LXWKlUV}*kd=HKb)Hokr&KeEbwFT4hzCXm;QFR-;+M?9* zx}ShW*meR%+d`$-72b2336z6S%Ye?(MUekAkiUKFq#ENrn(7>3wRK`T|rQ7mE zzUlh2H)qXu_*{d2b^=|7bBNi~Id&JyPIdB&Km`F(>r7u2r66s_8;~+~YYR;BRj4kY zWkj;$1;a^rC0)U74=c#4?nZTZ!d@k4;}B^(H-zhIf(yNb-tr~1M2TcT<&ObOkVtik zARUQ)w2*Y|y3EiRRz((#>H-aU%XN)P^v&8N)Re`^0h{fG?Ddha5=Vm-&cr5EqFCtF zAe^@H4GkEsioV?g!nN@%SE~ioE5P7vKCmd1R72d%~pLkQWM+g$Jxu3z5rv! z!(#I0SM+b75t_*&1dVe!64-u-Pr3PLwpL*D;l8PEaiZ&Czy|4H8oO@=)ozIGbrSc| z1O6bJvGwAOkg+fdl6h2_-=r$z;+a}ar0^%&FlcMZtP$PMC%40h;!2nt%LzyI&RKg) za>ZSF6+g`wd?k-W5mCNKqqz{P0O8j>k2MU0#UoR5v~O-lXvY-qWL2en54%!6!Hp^h zaowd4M3>7Qf+s>J5~OWcdRg^WO(5`HgjWYxoO8qdAu5dtDeKwoV{2F_>n0Qtg}Ha+S^4JOF9ny$5eQQ-E&2$bP;) zfp;<5+P+88HJV_mt;<&8Cx{Kus&SdQ%K5Wqf_d@p#ZhdCMfc-juXZ)db1h#j7}Uy0 zz^K&rD7SY3gJLXj{aG$qv(D#D z1ND#^#ZsOI7-qXgV^&2$-$CGJ`7)4F+HhMjvv4vw=Di3ma4E|K1*g|7^~ zcNcFVJ9snD>-4YzwFfW!5UI+#*2S| zRU6C)b%0AR-cAlmz7QjUf==rmWD|>pc9VSyJGTuNOAY^eZ&c6XtB-e?KQq4J$Iy&3sq@wJ(` zSqu~b8-V=V+tAABF3=qVjRzZ`*_=q!)dKw&Kz`%tu_l<}s1BLEM*u@)(h+`yrV(3N^uXC+O4dG*9f9`mlVWfuFt;AbI zo-c=9lk=&^Nk^1;(n}fQTwjMK=l0^yyO4Y+ZW*R-8k~ZONLd#(ub^MUCnp3qTKl(8 zZi8Mx>~k`$RAqP39ql22DMCI%AAM@&GZ8E{D{|+z_qguj3~hxIgqwjXd?Zr*oRzd| z`SET`z4GnP4JWv8YBBu@!mph}iP4yj_h7UJ=fp1t`2sQEdU|E-uzVUIPwq&g(a|A? zPK33^IT?|&fKNmQF0iPUqZ}at%wT4Kp>z`|K&c7E;=bA{ zM=HZh^T{`8Mccf-s{w{2!LK@7h}aMg%G=z8;lmKu;Ufji=c5m=GkNn(A)ADMyaw%v zb$S;VQceMezns8Ekf!j6Lk4@-`F$Olggx`XdT9=bUrugtpKzQ`PC&+S_85vvJI%HS ze>U59Jbq_jR|hSHzWvIe1@QG1F#LooFX+@!f^lRM~b45TqRpgwbf8oWMjH z|Af|{yEu^w&Fqg|n|T|c4~j|^Gf;RmUd*vgJf$@~B7-gye`Rrc(4A2i{z~(l6LBza z@uKpYi_2z7=>lLafzNF&4=a}sLpU&sM%>M0R%2Z5U%_ZHAjhO}yoWO)gTsuvMeN3ePn-w%cD zj5#%QBH~;^LZeka#;*jkxT@@cX(@+n4`-iFTjQWKqz>v(LKeF zO241!WG1|`LPK2mqt4IC$7f)?acx$wuL5@ooi5E}Wb5)RwG+URIbsT%;cHB`ZSr%HrHH;=|nRi~B7BkL1!A6pfF z4cj+1%@;m=t^5%DP5!*dg5chn0w#p&DnuBfbkk_1TdWOv9JR1LeRseQxcrcH>rrkZ zIBO^ai5aR--iW)~0C_xJy~5dP1DL!oa`>XP*E5QN&=5gme}&qefx+2`BBDcWEB`o@4_ES9q)vwPsT$kdH%};SSR0@ zHI2d>L^~+B1txFSMUz@TRtzatZkuXbn?DH}uV}n;iC_caYrwm$wYPArO_RJP=(h%K zhKy=dVaCM83@MhHD*O(9S7ikzPN)y71q*k!+RXTWGqrImK@6LR(NxuC!adnJ;=mW& zC(-5_6jdS|Vp2|mMyf<$y?Ld^n% z1ejgb2V_+{Jj)2Vxb0B0l_k|nPpj%Ijz1k zzKwx*gyo#!226_mSGcF6YEW`el?z8bu{cJ1a>V=$x^q3uoT4G^(0J3$^jm{*Yj?V6 zf@vIkD$Qoij+b3uCC^`CsVLbQb4{@e+(-CnuM0z&rVsT5B@M${cwxnfceD8lAU$n2 z2K5R!YB4<~$F=e~&6TdPXRjfHRbKNL90>ioJ_d+}K4}(hbA%v+OJ4Zu>P0g-m6*pD zz#6tywW}8h2Igt&1cc9P0P03;)++(mKq1|ccc3{@WLRLd&E#PWLUap1qJAum)S~$v zt2&ai&+)kziy`QzvaLV*);87M@kA#)%Leb&)D#n+1PXu)VywWHU)j%LN` zl1;Q;rtut-q8T6?)9HO;%(aQX&dQL)Q5)UGPj0gl{H)gyW8M(8wy_`fkQ(PR&S657 zfI}MI2zbn{VP1~Ifg{4=$pY^Hi4;CER~VEFbE1GZG~!`{UO}EPQQEcNN5~MnYn27> zTzK_sIb#x@c_hEUCCEfFJ_`Y?-f&}N5bQ=c4*Yuz-Qod(oj>g@-Vc!J*v)7J{Cw6V zt%k7;rh2DVl>%Oi((OpI+-ngct$+@J?kG3GhH57YqTm~NCkDMtb$gi}&5%F>yZ>>Dmdr((pYCa7OFw`7|wn=RL-C%D*+ZB%6obFT{Y3+~{nEiC~ zN1vB;0unf7Mms`k25RALZoCsgCPzk5$cq5aoV|R_!wgjYQmDKV5{>btFEGXL>g((g z?-q^DFstXy6K?F`GeC{rYUhhvHP;kGBI}h}!=5P`nA4(R_3+@M48f$2Jpx08q>Y@G zr@x6Fsu{z|kV0o7(Pr|X5e3k2h$cvKy`)qHD8E)4``^O0Ym(3*yPIOhbi=v@lrq7C za{;Lf#;t6NJB1fEwUlPKxFthFh}=bA0;XFugo}HB;xemV_-Vcqw1Ny$L-0xVo*tWm9MurGLAjLZQ^t6 zB#8Em#mP}Xb=ga=x#JO#%@eYJ8k#KuNCiOytu`(16NZ>o_psCh`$4E(8UZ!J1G?w~ zs>n_@246{KbI~+=nG!w!lpEM?3(&v-pgpwjMF0_fj1c>025M|oDiU(;IT9INDb|3U z>A}!g?;}M0vSVBPLa2e7)21e?S94ucoefl zgS5^5C_qlMA)Um>8T4*Qltm$5WG<1J)1ga2yj1roc^N<#)yNs5;7b=nh_-KJF*k z2#N;YQ;2E|HcH61+A#6$s5C+2!z7CYn~)NG_DjE=4Na zMF@F>F=Xr_w;i|@gK1OW`K02vKHvs-^hR?pl9D~0boqLH!CI*Fk+{2NApcPS=-Euj zS&V(fOQ^4~0)*PfP%B;A!oIS)mOWx8p?re|vSk!QOOp}RkAhWdF=Th>7kE;W7kJ>^ z&k-&gc`c_w{OiRNi%tuN<84v3d&Neqs1fU^DZq--V9+O8qPi>}&AC2#XPeOA3vSS{ z#9+ei%v+Mcb63?QWCV;oAu(uiGXu`^U6S1e6|j0eT2PUZJc}L-N0m>`fOaBLrrvYD zsGHGa06RRrw#@pBN+vhDyE-URvr(!9x8cY^Pb^Pl@n8@JCO(wK-`q*WvMNy=HI?JY zIYxplW|T;b$_cc!*ftHjjy&E9FG$}ATE3Z2?v`6$4IDQ|GJzYU<`S>*HI zX#Q<~Z3kR=wx*W7Q|#!Rjzs~4@&q9w5$I3mywkh3g~3rvXN2nQNVN@-JjEs; z9u#_nml2%`cAt{&gYt=!dYbIO%c8BR`S=)nGpT=&>URo9Oy3O=P99BCWNDetn>csL z!UV<++J@W!B?g$tMjCw28lbFV6QkiA!gsZJ6T6E1?Bq;Bhl|QlU|>$GB7IY(EbIh^ z`Top-1bw>t>bfn@S{gtq3h)R=dG4$sn zHPZF6R8mG5ddZPi>b@2>n0xlq?qn|mSYr{_N!gtj=b+9LeRcxWxd!MTh3S=|nM6Ge zB4B>egYXmAfIdnmb$~rl*20K-U5|~eFUjH#?&n5 zN-8VAWv_A@IBUyv{tei%+>!0DU_0*^diBM*2DbuSUTMek?*yVx4rd27Ag2&vx`juJL!@IDXP7&O&8g*V^sZ{6g zRr=Xxa$(59tb9QIh;c^ZNyQ|aQ#z@S8EC%1$~?ikrM?QPE^*{uYbD)^254`E+pOPX zm~Zgc^^*~*OmJU_gbiAT<9>@D}Cdm;QY)=7A- zXmO;sReB4h0{b460$;uW@6rvhbpjURqY(gL%x0AA^wpx&B(aM6bS&BfIB%eK58WSu zxc`4id$%S_jwC&-A1DDVSdSH~U*@NI_b8!YI*zp2e$JK2&G^7wI~=Cz7aXnaB7$9PNiXAli_N`PUM2Il#7FWgd25?4T$(Hi!O8`{r0elnICPHtHLuP;fP?LcMp^ezH|S@TGK zfl^m98ynEYgbbw-PY@DI1SG)(=7YkJrCo#ZPzx(Mb7_Q_h>xKmP=a zzAh=UlmalcQWP?u7kC;{_O+xQ0O`-371ko7?Qr#y(Dm~f7;CH4((1i*R&{f@BtY^X zy~>vZd5kw|S6K#B)!SA60A1$-~i{g81a?9s(Os023rH1@>o4>1*STWg&|{PBh{!L7=D{%jC43d%6R_8uVTZ zcj+YVTPtCBF#O%`?ITKN;>Deu49M97cBB#u=JwE+>>YB-!5kInvTDprA6+-g+0u$7 z4z)Oi^1iF3WKK+NpE8Uar%7JbRJDcxOK4?(F+wW_>NaT_pE3|56|7?{jUSpdElmhi z#5C+tYPG8`Q6Bc1cLhZycG&jQuP9xGM~IA{Q881MH3uE`#9A)<>Sy>HR)Nn-`oDXv z-kDCP-6o`S)|4_quzr{8Jj6rF*_Zj&&_oPK!7%3MK`x-4hYwmy;VE4%5X$T|!CDl@ zkN6w(3zc!RU_Reygm6ii6P77~U>Co58b{U&iKVq|dL1$=L(9@GvQDyZ;s^AJx|c#L z`N$G-DC?Q`#W#f8k{xXSwIWZ|YZk6)%JpnS6*(>LCoehnV@$@M(O0dtcV;XD3+{1k41OKEz zSp)GPRffj7vU-<8^7|ll6>rA97E0WF6NPir+Vq{7NhY^l^cWoLee8zIW-ghX1gOV5 zb$zm1i3W|*|7!HVRE7u7F(VzFf0RxA0T}hKJph1MM)^HOOA9cY{;v7&=B$nV4I*w9 z(>0JRzQXPa)p$ZfN};g>#dF8 zmyB$$K5Kzk`MO(lCO%SdSn+Y~+AhO8UJdoXSI1#)d%%dN7O*ycSKlN%EH;OrnlP z#JMqI0GOKducS$G7*;|~5-XG;;)r^vJQGK>xAYHx+un{{{YJZ@x%48@$*u>5On-%9 zeQv-BIxXwJzEQ)%~kv)KjH%U=Iq*Qb2R!b8^W+WJUw6+8n)CD=MQeh z2wG#ER8JP}6v+bX9rK-6Uq|D}TC0g>Qif!%g$rtz7CWtx7S}i8Nej(#yV@$e`X?i* zhC^P^7dCKACqnn|*Tdhc!^!(`C-ndF9@zZ%-Hd+z*T*!Ge|GHW*vXjj;c;cA)aSp^ zsU6kzw|kzq!!0c6`Qn}b&EKx`E#JsPw|}MU@bmiA4!afjXFs#I)5A6$=6*bKKh>ul z6>~A&W_NS^_0JsDadvaYg8zR|AQt@hf7`CQe*SQrls=f32%p>^Erdeh`uyo>S1<3o zY|yWCM!L2)rlW1&v#kXSQ%mjksCv?0gK5X!p3VKCsP?*IO;+ixxGgqe_W8EQ{6~SI zOZ5H-ONTqRf<8ZW@CRT*emI3ZfPGD{N*vxEx8G}poC)2_Bc@g!Rn9O zJz>1ztGntYL1ry!(-!pK)j9=+EqW`pr+cW)`?DbHxQ|M{6-uVXsg!k!Rjv>%U#E75 z!j+Hz3P_6wQ9Tme-ROm-;=60BoiU3IL5^Fn)Nqj5a9|O;e#+brtT-;RKOfqpnX z{dk^CyFBodKjT3$(&bnD?vfGpElRw^1N3&tZ4uhkR>b8nb2xZd2)H{G&Z8d=ay%dH zFU)n$RE+Q7EIVf(?KSN@{a0UtEaA!>Yo}C~=AII=fb;jx!KTYgU~e;+ zp^zgcaDe&zK^hs>0|)#ZX1NK&(Q>H!6+aB-(*cZ21N>AcFOJri&tS%zFhBVrPWco-hkClx z9Ou(nt-hpZRWCMN&vyOx_3L0>8g{JAc`e&M9BQw4@$F%?Z(Vo=h}x;Iec^EWVYs9o zKAgfFF7VqMV4VB6!%sl`j9w12&G)2Vtdk3H2A~6YJnMhEoPYO)bv)AT#~yTb-cB#n zw&sVCzknUQcDi})mGpc#R9#W&^I<$Xm}8S80y<@0`bEe`q~Dz*nLC{T+?->*d2G6F zpANOR&I5<~bY6bg3kVKxtzH4zy6*}zvN$|tEo{ckS{clA6U?8Dt) z?lJDF^rPohhpVCZq$}rF?sNHeN&9~Ks5~41){KfzwtKu$d###M)e9e54~WqVyIJew zEuC{IUJLMb; zLxiFFu3NQ7;`s4U+wb5kbRG)(C0b7Cgj*=_`K*)UtC4Euq8+eY4An`}`2e2}^SxBr zy?E+NPL6j}&1sOQgYOuOt~{hmbCi3o*!bJOZpW=TrGRztueDIRIs({Vlh2=uLFP*m zK_>-c?FGnt4_j_K!^&qAKg}ZIvju~3Q7SlK)h^~SP@?dCh757anTY!lz!ud5I?4F@ zF4i0Z%wu*A?G}$Nb3R|6gV@J|u^r&MiP#`*cmaQ7@u{gv(iEsp3v;JUuFzghLU+N8 zHWy&HJ<;Ikg|d@dG)4g2pc4q7kKpHPV-2U_)fdBPzhJ;KQyATBBk*?@K;Lcte_5JU zNBg~37$bC3#@A^mMJ*90LnP-t4EDz3SFNG8-hd;*KDY*2e?59tE63y}mt?2Ezy)sJ z3YY73@C!T{cAMKr=V+^9@+k-rj4D$$`hwbKFC*I4Msv6OcGu|FHXZbn#pH^B#0mmK z6+3D7p+jN!mpF@lKX%8w=ha{u7HcbM8_Fl@?@pr?V-n7g3#oro95udBn~wJjqMxS& zK&N}SDTtYJZ6-?lwjITFR_hJNTUGH8Bq_e}f>_kaUsXTfh{Ob3fr}6YSvHx3h*Mrm-<{eDD)p#sC1J1LiY*fKI z^2rNV*U`)^;?QgMupbP8+zp!qvIu0!kR?M_scO3%GrF+J& zn?w5BCOJyUbxH#vuHRVsJMC&9o9UcTx<{=qC*PLakIz#EP`vwis7gx!DK~pKV(#ag zRdP%Y63Y9ooUd}md<5$+=zO*&BL92nOJtE}8Fm%Z%)z;Yz;^I)rlqDwiMRwsWoX9j z)(7$#lE|F3B}o3`Gj0dVR{Qn9-*G^dHGJqx;z~JQoKq`328nVvJH!EPVf}0-1a_m)A*~kPNZKi@x}kIFuT~z;IZC%+&*gz#ue$FxE$qM|(wmv$b$v<NaPgNB5p2~6xX{EY%-r80IKO_g%UY)2RF5A^uFJ5~|CjU< z8RJWYKVcl$WIRu!{6(fv;Tks|7Ca8mtAE*jk>R~AaZnV;2?Cnq9si5=t_fel)6++W}74M8_(85JSj&92aM zcc1kz=QDp1L*>quVcz{~mad0MEL1t2CC&tMhOdW)eI_@g1B*ZzW*_#ycP(c@3r8c} z1roI75Yv=1DfxIt64HKs_#JT-wQz&|ai2W?#HZXtYCETJ2`zpw(@3dxF@6qi*TpW7@!%oLzr-#5C5oAAtsUO?C z&>($8!@g-;Ji24qz|v(zkS&*fUmSa+hax3v>smI^pNj;G`|Vs`s9$AB-Jp}ZB=5#% z`Jj(&fhKT;7_L@9j}mu$=H!vWt^M)Xi8fz=jNxbgKEpfKWE9NiI2o97ZIlJDwcU^K z^IX#Fenqi=B@KflWsXNuR7weLlD1ybj9#Chzt-L+^n)epa6p*yO6tzFD2Z@+^?$R+ zBgx$5HtJqCVt^(22iK0YEE4~B24?uTr(Zo%>5L$hDHKz#n|Zu{qx#Fb_x?9s@8bcp zs3#@%F47dw9a(Ht=Aqju-vkMa>IibmWYva)S9z~s0j}L5&SIF0R|Fg=i4428{X^Gw z%{P;esQJT9abbiS~^kmApRnJ$RD*AC0hp3@h%7AVrpj+_YmD( zUi~lH-Hg)=jzC?~BL9FUpIYT;GE!SG*56C_PAMM7X7_8e@csZce7-PNNLQq9550J}L{0SjAp?1oCOl>yfL93lQBTYmue);#%u^9)HFHzx zgzHgVBofO8B-jjt_U=mV&LwE18-b7`QiF}+A8Ip-uaw4>n3k@k#Y4*AQrf}f!Q{==rec9Y>XM=qZTak!e0^>T1*yJ34oq^46Bk@GzfzZlKT!hA~-OD*;+%sii zaCa+65pIl&%w9-QVnoYE7cT>vk)|2uT8@(K#xAnOHzJo?2v1^hf4{#wH0#*KWkt&N zCjr%X(;iQuAfCb~LYM`pxJp!3)95d%C@Cn#~5B% z4GkC`;Wd!a3d=3FS|k5KQ2Lr(L6&kF!!T)Pe%00IzAt4AXcAJ6y-Ua}i0gI^;(Kky z2!F%^8~B3uT#$O15X^5$q4lf|kuMP}H&=1@3IbnQ)tckZA~yIV0AgKto2=%S+{%sR zYHGh`{pDA40e3sb^W+z4O?Q;y4o3zfSOi|pzhaMIvO<$_ls|QedPKHvB>CL+HVgNs z&)?uU&076ITMeF`Bg7G<=YSdgE(Ihgh+4s}CUmtOBwPn~*rbA5Gx=_Ujs;r{Eky`@ zHxNjjY(9(9)370yo^wMEGVCZPAm>W%7-Yf%svmTXe-7E!Ll;sH;)tqb!U9g1I-z=4Obba%KPW;+(0aMRO~W>-bVqRM1Vnwl@rgi!i}Q)EWoTK z;v3;&0?S&f1xh>S{?cQMs4C5t095{h8zk!6F!7#&VFoVv1zgP{cuLu?LB*ZW4aP7j zbHkam2xp%J;6&Iv#QwcMg^Vk(uX!PiC0ZL34)&Pu7mr)IPcD*Lq1ox};wWDn;!eVU zP{>Z6%oQ@9n+^=$DqRnZ0Jw-?Z4|a|U}#x3TXB8O=GP2pt=5-6(3h{!fEAkZ3r96C z50nkIdKkE7gi;WP1IY1?g(bdiCwiHr39joR2R87>KG)owaS>5chSXd2%yJ3l+R0b= zYYW+;iwz(aS3KNH5+gCpZ3F@ya3dB7msQ@rBze0dLt-P#1*5XrGusY7kq^?lh5Ybj ze+5DRAoA+cMEsF3qp<%}Z!iM(Boav#a*LtDzUh_Sk%hV>UklHHHiy_<8Il#qPoh*h zD*^)aSs^O~Viq`PXcl~^-2-B5I3{aDz@|)ZVz|F#c@<#~_mYg_b`S=ZVCem6xo2PP zMczo%uAuN&7n%Ddv8as=;0pZT8!(g(7CGHt_D=jdktX8O4cdAX0dEz#!G=ew$qoKf z*Q8T%s8pk5o>?exKMyq>gE*aYCnH_XzUg7wEnw(HR6^7)tx%Ywq2^uC%fgikF)dUi z-)j$(>j+#}vOsq4JTFLnrSr4Kw<8vuVXGqam(%)N?QM2l=DBd7Gb$?R=h(?DeG25k z5g&6V-;o!g^}r@6i+Pb(iNMUYEpZb!l2in%q1lNn-!-&3PZ{1=_oQ#yLY&F-=o~e5 z;;XC@gBnTOU}KrLV?-FXBHU9I_U)8+({w+f%Wrx2O47H|Bq7p_W_i3(4?Cj%F*gp~ zKUkowd?#$v~&mXFCm@-cxiuUHmO5%=zR> zRuBnF4mZUpKC|Sj?}x)2)zcq;_Z#*WsGhW%CU#>@r$n;J}#mcYye zQvHe2wqa*5CIjwlJmXKXH!R5l$0ZxsDtprYhVW3HC9_9Wz^WlfO}a-a(ws)Fel??8 zhMgXe)C1AeLqGT%ZA0T&7(}U1D?(3_q&B?Mbuo1_Pw`QFnC`D&OTx7T1jKmX_YU!cqN6*EbzIjyWgHfH2G$K>SgbH%a~>Q(ylR z1;{okCpN32@I%OQnduK;MzJoM=9F&KGrgQbmXQA0d>R?*61$fzmOQ6&qJe%T?QX_@ zhML#!92{%(FvQUKYIkccn}$2oTKZ$PVLHAyP97VKhXV#(=!Fw5^yb=>By=DSsUd{x za(n)&Yqe%^OqSs?4z4YDk+y;IYcSK{A2GYlRj7SJbire^MJgW`#m=DVR<{O;RyB#4 zodX^eXi5CF8z|1f-W%ikJVq1ml+vM17JH6SdKBOSqc6omov~ry4?L~InS>Ha=Owzh zC>r}VtB|jwOILpEAjiNeRIWM`x#okbh=}w)RiISxkXHKDu_YhkF(U%nbvPmfnL{Cd z5%O?KR%-q1yZv@zaP#b&|B#SNbA!oQg~P5LB7gr3qzr>=Nvs147ataGY9#0El~S

RY*Vct(Q@f_U!|JZd%yF2NsXPcFo5>t(~Ex*_PDo!`C zGvsM}VSK-hz$>(l1)1HkWnD^WLnQ_HSx65~9YpzE59+O-DBa~4h};dlWP zs}R4DnlZrx-eFuQx^mD9dd8jVoR*g}N63l;sb1M)d9ZJ4b&09pIKcr69XP)ugq@># zM?1S2s_F77P1K?BV4}K2Yy+=(W@lFkfIPFz^Ge9Vebv%5=;T7+PM71b8lGV73iZ)9 z0%@<&0wN>KVT0c?+n2U9-{-2tLoL|^spfvD?pzVt@KEJxoQsg9)DJe2?@w6^`?H`| z7U2SC;r+u_A@;sELs&z?_EBJ>|5aokRZ$J4F=Gg140FFBz#8v|Qy!dsptWY`^cv;O zOj`c#aU^goXOOOK+4i%xAgS;@AzEE9VXFLq16`;5c$* zDBp^;h-Sm12InPiGt z{7QA>_u9DJ5QI#b3bP}(hN^KJz!Vg5tm}-Y>yg|(gQlJJTf$TU5JT)|0L(Bjc4XVc zyl+?w(Qdc{M9WPcW)~;NEc@VAE6#m>#m=9w2LW|+K~iO^?GYD)NQ0X~LI4k)x+TG4 zLg;_GMX2Ec3?uvQYS@5A4(m~cj$rb_2`a*!$R{BIbAv(}zqVLc&jhO;A7o0*d$2FEs4Df27EC#iFZM&bZ1Fi8scYp$h?;X zn{stLn3v>ez9DOJi3vo$cr66t?n6&V`uIl$5bN5fu6#Rh!b88|%vrg|AuF_ejlXTQ zeh{V+!QM*n_l6O>a=yl%wae0LWlM2aKjLP(gmD4m;U*N00@RYoiPVXlE{4bOW$ic3 zJtOFX2IxU_;yb|16X3D7G%pD;JlAvSbmLgDC2#H$3+^A%<#kC0`dmZKR2zA#V0A;E zAV}5{4ILj%P8@yK9{3s0%q~w`U4cShsukD@0W_f)05M@-`L1`bK@3P(ae@KgG>7{B=VD1c+WzVSkIu1@wbV3_#u;w@Hbl-dfI@r zskFW}G}6yXwk-eAOOj@giQi2^Q$l5?agdHZ6j?_TSQ}g)RE5?7#OAhok*yC+hR-?hb9k{?4_awqOWI2Op76 z#8FnQ&pgtVM!%aO3)bj=p;P;R*!@|!!;|p#$54PpEMrT=U{D)Dm``-E_SWv>Wijp_Q#KGv>njG<9!v%@y|D44q`Nwo^82&S z!#gVHSLS?U<*L|~vLALLh6L)#wV$FNbAyhH_Yu=})#AWq_~iSkwRFKMVh{`|#N{=ucP{ z_thi6Ge+#q9Ol!kdb;mHtsP5Va!3g2Xuk+Q9J&a%r~%T@0=d^;bkMUTzQ=w?II(jZ zT)Q^?cIW&J^rS3fGR^WZM3bN*^B>f%#1X~O&Txiyws;!kBx7lRf9N!+y{T6^3oq%~ zyq3B4w_QK$ne?DDK<`2Z)K~wjcA|=o&c@(^z-gDmIaWL3jfUIYj{hltAwuq{+^_Z# zX{ky{sVO@jV0_n=sX$PTd<33uGDTY*3$3TQK9 z?}A}wOV1ND0Xs#fqi5iP<ji4d{zX=>u{uAv3-$`%$r=QiPA z9-1Tv_Yy)2pVe=21GN%LMi2}JpdpkhO&c`Yr_dqxZgIJYD~^ zYgqEZP!-=Q7sMTkT7=`%*rZb?7luP5N1B0Fd7s)2|MrDGkKXuQLU<7R~4(|ET zxYFWo`DbS?G87^T^aN804=FUEz9ps>H|K)dIxi~_%OIYZ$LKsB@({kYOV?`YS&#F;EQ?^V2|}@^3;d|%YC2Tnkw=J$ zidYE{_nSd}hq-LEd-w_q(j}xn{@7mfeWd%M#@nFY7ci5?#xuEWjerc-MOjCAHExj= zjLpG=wH(`Ym()UttkEo#z=wv)TVJ1yKYJO5GQ;_B0qsQn@~7Izm?~BG+Mo)nzlpt( z-i``2?L|1Mv5RVzLETI9(iCM{wfSA&n{8SL`9mm-7P!&O;gqT_f7OygL3YX| z=>4O&6rTG!!yh_GMRI(jc;2}l=Z9&HbA7U$gRlDY3oz?>E!7%NUF{1EGlqHWYPXYC zIuavs9}l(74ms8#V*G)ZwBSR#2(x+^4|c);N6nQXj>Fs(Y4`k#v+$@T()oQZU(9}? ziWpP*`~o~NN&Lc1(ex@2bigen>U{K25q~sz6_tWIpKIb)Q()6$G+?80{$b_Rm&w6-L zX*jhc?VRY`!Zi|T_88cJA_k#)ek;H?#fzsbR0I`~FET918dg@OQzFy%oPil%+!EzJ zN$q4hKG5f%SOqgb+P#|vA8y~Pe=3l)P};4Gg`kVmyuta5vLcb1T^|UgirM9n3+p9- zpm%bUOSJV%Wx;M+Qit) zh?nosSZ(GbWNLLgSfREy$UA5#Niv`lqw-kTaa@L=OL(6ADPXL}-NyRWzi72d7qDhw zr^ZUixH#Ef&tW)h;a;>?2J=u)Cd#o&2qWFrFu71W6P{%Kn?z^qj@p`d<0BJpw`}S9 z>|Ef~Oo#mZ7>r}D2!N5k&x^;dxF`m0aW$T&kwL;#FCh^qD6xQfZjC1*X3QKRl!(T1 zooWb|;MmmoJ4xlHlxKmwfAZ44h>WKT)mbELFmC(%t_KN;<$j%$Y|1Drq;_Rf7OcQz z>JuBzi0V#z01Kw(-WyI5yOVF*qw4|t9SaY3XMG6L5(*@B;|-?UdI^se7{AArsB(PA zGkYLrORSLPTtX9S==L8-Z{)6mXP3Cp?-0INz{5=(oG{{l*DTa8XE=}A2Mf?R zxb`ZXnde?m6jy)FF2idC%4j`3Nl(5LW-Y!pgDg}P6Gex`VufGyYWTouY%82$$Rjw~ z$zuc9cMgU{zd`v)==w!6ZFJCqS3rdk(cCN_xlB1lC{D_98Y<&UhG@^UUBU+si~ zB@4whT^w)B#I$goWx(cU8C;o3yeZc?mULSD924hRv_o#58zmu*7zNv-MlIS9eGn-e zyh%APUo4I280CdlauxCVTou!-IjZ@8JGp)0?JW-9WfL_{c5uc%9A3-h`Np6cXOCpk z(yV9Q%`nPLy@*@Z?UstJ*m(1h@9w$YwM_om#73iNm-)@#YfDCezqAZ#b~NZIzJdt3 zL?SXzkFd7T0>_LQ>a)D0(Ilp0b-h~JmOslq_AzM2yp&=d>h1rjw$Cwa5(@0dAEH2d z;04nC>(egljR$i*qpRjT$UnK=<5v*PR^$}*>0toBcs;*B|QRDf9y^}_H@ot^pw(|YZU>nb3Zf142u1*_z`JE zT7?U@>hXfRIlxc&O37bwl;FA^s!c<}FrD!gisiQ;K$6}#`hxFaa(GjF1uS;7kADRK_e^~b`d zCqo@g@c7g%Z1eK#BVj94|J{9XkxY4TA~?2ZK#4)l9soF)^6~y^zcYdoX21oN=gf9BMpl z9^q+DORJlQ*TIz*Y6%b=3K2Dz>EjLP2rjdAudTvWvn!Fy)ai=0e!LWyxW2KQkOr4< zkJ}8O^8VFjh@$|UP$Homa9jo-N3*NI8Sz-WA2tHh=pr26< z_QSD!1(m-W|3R!ZBwDTyCDTbi#w;~n)61k1oZ;|#zziXA4HHNRL!iIx8dss1Ua*LX z2CH0nas)zRz02^5ApB6?cMy}j)N7o!TV(garK)S$TzbbtdAUf0i78vF+0r~5+FZ~1 zcUnlHA++}lMxBod#Of{LMxJlYmuC%M8Na)SMU2f+4Df*v8wda_mPwh6THu&WJj2KG zy_Bm}oCX*9M}(21`?C&hiVpUu-N4a`YT9wg&-4@;3=qt1zV8G&-ZOo@-kd=!#%q4c zb=}z&S}8E*4!OA>3v1&WQzAOkE2rssLk6od_^%0CJ(``rIB&IL3?U8oGX?MTGGv38;;2g=LGr$o!D!6L5yF8AZ@W8;i!Aku${QAXsa={Z7F)IYbM5)xQyllj>(ymx$-% zaT;Y^y%q#do^TxNskx;xlTfLUhYz|sajcVIctWIVMo?P9CizL5Y^v;y1L6d%=%Z-M zq%eu938}Np!W>R2Y*YriZi-jQ42pG>`EG3ri@W;A60J%Tj?S?A36Qx3l?<2XucgXe zPK_q)D^|PX7d(RFK7G%r)c#^y13|>4+i)73(nLhGeFZ11oy1XgBoD(K&)q>73C)s1 zL=rVLu)XsENWq@ht>tyD`MIPu`7z?PW|dz>zBGuKf;IqybRFD@s7|Tvqe$yh*93g1 znp>$+ZE|LS_J&6zaN7(HzEhBQaXhwUPv^j^d+#rsEV_!|7r1%*ba2HRSU6yLDif)t z=9?Pa>!(Ml6;0I4RvLVr7;-{P%EAYFU(X+;mAi%@*>u>jY}hbP&r^R~f^4zy#%8Va zt$-yuE@Hu4TDGGK)4SPqa>?hkHe5V}mt&LK3@Uq@g3nA=C!uf0Ri1>Xgh@TmzOPhG z7AM!M`hc~jCE2p#I=d$^uCoWd*mswQ!%x6$^luKjy8i)iXQz%AQK6X_oe8^@5=Lr`=Dof=yHVI{srFz^_E)A> z7|W+RRcJ0YemT{n5*7o_tTjTVOB>R+1SbJUP!O>$~999D*QX z6p4@&FY>q^V4egf*GhB7y;?)~>N3|6FpF$9tgB+23y5BIk^<5D5nztw8jY5;8j(%a z;1FW@%6q+Kq3VWcS+`0nIXw?E3Wa2U7^4u=cy&KXVJrD+=t}e@(NGaFe4HzH&Uy6} zzGRky>!jM1#RWp^1oN~drhA8y-6{>g7pmjegVb(IBJ7RW_*ojbv8jyrcdYHSR8(sc zcv7}4`)_=ZUbMYyL`DgxNw7_Y(b$q!P(&17#Ti}WTp%{VGh0>RcQ1)FP=7`B!VHNe549y1ESMKf8{5G*PCWW-+nnMf z)|1_h5sHfn@zwKmsNHCs;zu*|zTn-QqG__CrkEe4bi!68|HByHJO$QUHX+BSF(`wC0r$H;SUk`ePKZ?}mr}>8DYS0bUcm^yF$RMpNLtPJZ5Cj$!JU$@ z&r{mx(AiW0;4^X&d<*eFP>Es>={CC6w`*aXK&zUA;D|zbzCLPUmd+>Lp$Vss4DREh z{VI;&N&A#7y3!~m#NoFrR9Ch_qbeam-5zg(EO>%8;SvgW$+`lggfsfeOJ7djQUcrfsHyf6>EAkk%~~T* zZ4dVs7*!Rru2KKKqn-OyajaeWf-zLr;%UkLG!EeqK2?9n?D2}ACX@pfvBKjQ;VR() zKzYYodD3;WVx|qJRot^8b7zdy;Kt;j$)@FSs}^5lL}-+~YOm2!W$H$RG{)yON+ND* z`-^}C0C0~}oJlpV-JI(Pk2eHH&!?a6TG@cpOv!w&n-DF!W1<-~pShRnI_EKNVbwOR z@iAv7imb}YDk*6ahP5~;Gd2I0&)V<#;)TZfy^h}@dYv!v?mNJc0R$U9prj08*5Kd5 zkmSwreV#i5gbjKBs>@q8_DlssW1>@GHwKbC%|OhqR$>_d=KM*CHJ|Mk&GFZsN1w>z zG?N+#L$Gmi61VeLdB_dSXzhN@p>{V@MAfz2}QM_3suLXFiF1B0nG6>hKs+8Wn$SLstK*ReC(c;>ZEq zH5{X9Z*WvKsuh2+;x^Y>Q0_k5=%Fq2>-a6-TJwA=DnRl2>534?HGJ^&?{!R{wH~hX z^dB2KI#51%xY$T%4g&GY}aO(LIB!F_t^20eY^_YnP2yd@9V?}JuD1yI~Z@3qOnh{B0v=$Tgn^L7k~4M}4`dr4^Qvr)RnmRq(0jG%CFhE;x)?Ac~x(`Tn%w ziMS2+n*feWmjjMFr{~&pKX$2!LaE<3jdq;+j zprsDH!+*mL6`ArDGLGYz9nw`!_({6ZKxkp3W>FC=^64TNFh`)q1D1P#WE;rjLJT71 zR`?`^bD=#?UR{dg5fvQKk7Fj>-l9q52Dh?wKL9`$@{o%=wHv?o)R%-caC~S@?h(FA z%wdSfXZJoYO}^y6<*ZE}WX)wIi@T~Xw0CMH>Pb!$e*|TV#kBisLN)dV;FbXNG{o{H zf^~Z$f-WvAy%ACniQjhpX;SBl96m8{3Ar4i(fnoC2|dlkuCX^zpTIqL?$AHxzEq%S zw<-?9gwQPtKSRVTZ(u#SG-goGmUBb#e7fiW%1lU2F}o8$X79Q+PjHF-+(*b&RDAFR z7fp+V4H$Bdr{N+azGM@U6lp@o9H(QLiE35tXZzB>W3yu@8KTu25pd1Yn|@t!E8S&v zUz_o?|NJ0$kgQchrgagjk3=0qys6W$={deXwy*j18X&;jaQlzIRX(u6Mp7a5U=Mjf zTTr+G4_TR6&sv{vZ@?fZJMfkOIC8#Hv7=N$>rJ2eF8r^*aP86c+d9jWubp&MESzq_ z>z>qEd$fMl^{|DFVi^0+LdP(c0x_b-Xv$B%vFN|jnJ$MpjzVJ=f8fq1xa7mIWH-fA z%682Az8r3%tgYd|bmZ4e2#e`9q~Grl#G7%zyXb>LbH#BSK@Dx`oF$JkGiaFQjZ>H! z2;E*T+s+*-}0~<=8}8T^84E@i9b(pO2$*6gDEf;Ug4>r@HsX{ErAF_c@KCG z7Hs;gMfOPYZ_)ba_pI$OOFg-GK^Y*vJ_&+9{ulNWolFQP8+KBcSAQ6PMt5gp+R@&a zFyC)~&d5q;4xu$;C(Er)ZXn>4p5nCOv6X(b3az3I^YlH?y9RrP&G7fq{FFP3$SUj4 z1Fp`&eL4a!Nd`h*@576b$>&95_|wp(K!#tMsx`wH(Iq~=9r~yz(T@F z&F=jqGCD3-i=&GyBb0d&p{E9Ov*?Y*Qy}6Lj^Z~% z=cm!nw=uI%gsg5Z=k(?X0$x-Q<`P6vk1OodtK0)NVrAW*7;6WIVRwsf&9@S@z3rR6 znd3_s_7;qLgwJwz2_wgv%f%=Fy>qXJ@55fEBM!Cv;t{Tw35RmTI9sHdCn==ZsNK(K zZkl3$q#=KGD<_gaj{Y*(t(WzJdqoaEapOXp^GXek?z{A|>TdjpWriL(`_C^3Q{QS_D zz!G;6ImVG6R&|c&pow|DOu4;PFnrV!%QsJQ=|^mZ!}hVba$ry}iP!CNSjPQENR*Hx zvB_~pYaZbZmg7+X)WVjhAvm-Wgj2X2Dh$$BRR|+^%auN%JT(bdCK#p|e7ltE1xRu7 z!8=MQ=?sMi$7Wpwoll|qaDg7BM< zB;_WUU=6UN_{GH9>7`<{+SX6I_t=p+*`4EB3LT;`aI9xpmXLyW;y14OEOO3`FFdwy zW?R6QUJhv!`3AL$n^p$h{KRUWT}emg5jXd^gP3+XIpygZWPqiMHnF&Wq=&U=UXtnv z`Y14UpqnUO=i+p#i*A30v?d8iW??_-In!w9pnpSe0oR`Q_~nc6G^P#9*!M3sus!^) zgPAf1=ceS!zU8-9u~rcdD?N<$ObRVX?D+s@2*HMUhYgu7F@|1lHOLxEe${P+z$G{7 z$f$jKf7-#F8O3OH%TVu^wDso}1X!JfDQ*M*95C{+Pp4o?`rc5;nO%c@>n9+W;2~dz zRI0CElf(AoLIu@5c$)`m?}X z3iy*?`pGryPwSPao1nJk}HcWqS zvRE{FxBJpV@Lw|drvKJ7U)1@n#C7aHygUGR)& zwQ%@8RHs)hUdpp$Ra`yk-_u9>>l0p*};5dAI82s-JGDSgpyhE(%E^Nn)jHMtobahva`Cv2v^Kt=-Vux#&KOM zbZ*V}^FDt2p?$6Crc10R*TG{|omF{O2e}SWbtr7In7$J+iOyqdYjQv4lDY5G*0uu+ z0h1r^)N^xh4q}6BxtbnFl;kF3`eF|oWza>s-Y=C5$nIFvR^8{qYsnieF;VsePfs4A znVMsry03Jch*iEPzJS-i3yi#8vfUBWRDpi^s7=54`JD-Q>|cS$Gs$Y#YKjv~ z!Y!WArF&hmEKBID_{D7&J?~-;t=O~$c9X<9u*=cFX^&DhBLz$7lu_=%DF%G2m0!2) znSU8>dx-!M52*E9dD&0vmngKyL9}YEXk}=LRziaXU&<}i;d9NB&4RG36jE=n&~2_D zmE$7|;DMKYiEoPV)*e9lAOraR2!NB9@{J2ubs|0M@(te>fWJGf-AI#y3pf?>Javr^ z75-B;*Hp$!HsgZt5U_3&-j`i%^Q_GeoyYjkh)*NE zescpRzD~Q-nu6Bur`mSl?RefrFu==gfE%L}{yEHKIvDo z`ji~8{ew)0)T{QUcrj{w5Y_W)SrkEgZULHl4rwsXmkoz`+2Ag@=)`@BD^+Rw`v z%Y8Zr+G(9GLE_lY0P5L(-xB^jpX^OYeohxrBp)5py`dm^K3n1?>#I*{@os%HEawm} zoD;c|HwR~Gk~h~mx)gO*y6}Rc(P_@e_=3^lYVGc)H z*)bIx^>fT}$cL$~-Q(45$HKEgmXrA^HtFC`)@Kx1(3GoQxTN`tJshf*InTO3^C!LW zq(4n3Ro3cj6M`OzpZ8sN3&hG|<^HyVAs@;eT@pa-(0C~C3NZ{t-irPnj^!kyT45q%}S~e~(%vf;}EyJ~7-zMa)jA4d=DyjkR5307sPn(0{0%`uSLx zRth+vFQI5eO442IBq&mH=)dj6mr_!?<>o!Q!$I8x+wn_n)#5X8Q(BBEDcncXm*mk* z{l41Zc-Y-DW{!j(?pF*yhG4ixh<7ex?md(9!hjn&or3Ny5vbwH0e(bD5l3(H=Xc*` zi%|UtxMcxr*J7OAp_~yBYi+MjOy%TAd%8Bn*loV+~>Um0qh|-HqhGd9;t1ec>lRqN@RV!S%;!9$c z;_NIgSbdxR2G^AW1p**&$dRhxYGmp1Yb`7p1{}hDF5GWMO(k7Fac%jCi45#0X2#oq z>$RL+FG1yZEGg1M(_Q?x^0$n!_@+G)%{>I!Eyc_xA31)u^uy!phP=pM=P`hla zq$*zJq!QTDC(5M!$e6-NoO~ zM?^^;!h#4tJ=m6(bD1+h8{n4-fH9m|RMKFVn*Xi>T-!j?-v~l8x0R3IbM&M4z8yPM znW@p@MAtlq-f_FMht1pQk(3wSSIA6)ku~KGg_Wx{Th%TYX9>-Q|L#(4M&;F=o#&=% z@zYWe_sV0h;+ynbZ%g#WIHDAH6QUN(jgl9lfVWyPz(102EHKtgop+IsLz);zLLNM$ zeDDD5CBGO;6m<}G{&biO>K2$PDwbDY&ADXLGgaKNFa2HeUkl)fzX-BuSpO31XLtEN z{oUErJM>issWrvI6dOlOvJ}LHX1VWO469vy`E+wlj}MJf)q*PCVGWAx6XF?5w`-b0 z1unWCW*7QNTPHXRP&`oh0qt$3KNo@#51I-Q|~txbP7>9j~y$qgI%^rie= zOZTM`)RLjUXuRgW+S5bGWq9?)y5bKMem#nW5P6lOVh1z*UGv{9#%C%${j0-W_L!l# z9*eAlX$zxSyZLvxSJx^Y>ctG|?<)T5(3W`14Zq&;V_S5w8nwd{xIee3+ZX$bk$)h! zalg3Y$!^Vf<1<@AVkIZlG44%pcDtw66%|yf`Z2H;b;UV@$P&c}pv@oBMr~Oe?7Mz! zF^me^66>=C>PHp0A^Qs-52wg@cp?_*?0=&Pm>cWdqU?S?G&quZ2Jr=c?{AHL;X208 z#&LfV)>nT%>~TFAl{00}K}b%rcVwJAc%eD^Ev@SxT1OsBa79{m=6swB_R=A9{(^^guA|M+{-rF)dPC zBZR9*AG9qt&!077ns}=c(WN5#_Y*)}Le-9xIVrzmRhxzqOk>O7y#{LWG+|4E_n|UlA%m9e4`pjysxL?T?Uc=DR)UrC)Eez{J)wj- z$+!e}GpewN7P8ab0r2;_+@IOkE&UjB^v+BdJ$thCb%0pwfpB(hH>4k1VQB$W5D}DD z-~4u$0yvyoX_whh+-o0`1U+4we0$7Nj+J8o42HBXM-7<540r9XOG5UY_fz0cpWf=x z%ejKM_P!Iu0!~b!O+u!Z_au@q0pY>P5SH*X~MD5Nl;dbrz zGlPFm9}Sys*@=gt+V6@c`{_p$i^Vv=evBouB!!{iS1iC3UDd(Qv%O#hYvSeT(`6x} zG+YIE1ueJwq5Wb)owFe;#1}Q1d5>tuH7XU%1xA)y)wuLKhG?`Br@G&zir-_SPgiWK zFY4lVsNj^hH_Va4o-?Ekh$R(ZErFo7t=PcYVr4eDR$ByXydRNPy*FsRct#wP;Q|w_ zixGsY_0g!j>p1_;^%E96l@Z)$r@)d8(3XRaf+q4f)>{x;o@Dm7U5^Vq^2I_%voW{; zUSqN>ul_~XiI9Zhku*e1bPs((#Tu#7!K0e;>6czPE_XQBDvCk|*sU$?0S1gXq=n&t zNoGRmzajy(v@&y!AT3rzDIv@XN_%kv+oDH(B+Tfc1YmWJSPTo}_HKw`4KII>$pWpu z$JyA4*oJonp3d|hy2TVD0ML*fZOfYV4I}xl*;sBuy!{#*(FhW4z=vwiM?tCgg<*Ng zo^l%+Bl?E+Pma5ORe1vDiS8MfE|oxoGdnS$(>A#wxwRcVi-pGNc5ht?av6V*na}{i(Uu$iRK4*)f zF*=oehw{3#fYV#%Eox{66XnOzBam7IV6P0q+V!=1FlgRI-!$9|h6?<1Z95AWIifiN z@jH>c!OF)&8DgLQGM(SYW_JsABGd#F34)S$XXWTfPygA#MM`Sw22rtqg z0!>`xS}zjtjLY>Mo6Rtzwt3C|G6cH&MnG*hJ*1;C2ydl24khlF#~R%{u9+Pp*WfYD zER$z!cwI(GYrBBjFU&(HU!9ntkwFMYD9R0>jn~l7w&+(khQ_>#Z%QUB+WAWjGmdb27Vnj_g#P?s+7r@=ScJRDxvT5N|0DoTsw{{IsaSSQ zUHKhAW+n@XJ`;d1Oc4|&vNW1VxCIhgd5|E4=r=FD9|^F8ydiGsh?|XQd(R5bRHDV5 zGM-qwh9ITUiXdhtFwv9&1=bH3o;4>r0x#kGP9cgsy<7HneG*{x>4=!jYC*pNIWxuz z!ZQEJTFN5nUcq#2v%gx~mf#b%s?bNRq%Pzj8GK1^N^OQ!9|RyouSHgm&K&@|4&zVw zcM-IY&Xe>FHU>d4-mx(keU``5ELyvZ(Qd^Pfk&T=2YoX>aSO~fPXY|w!Zbe*tSY8i z-8)Z(=F_2HG#`qFpv@WgwN#Z!2HN^d$gS z9^vmQhpSz+ru1)rD=>thYb#yi8_Vpo;jvmOo|h6YRfJsz<`FVkA~<=B%K^`@2gfys zb3jj*2&K`iDc&KO>J|ido$(0Yp`!5ERG-Ed_zR`=7JgcEghKj&3{YV+Q;^4xhj@|f zdou{@)zdVT#S_|p!}7JoDB7H=$=7s0SxuJIl2$DjM#tJ3v8+^;9bKRvqwe@vI^9tb zf4ALnk%ZDMZ*zM=4?~Sd_#Rb^S8SVX3l$W*;o!joILFDEfO2hK&G0UMm&q5`pN2tb zcjP8}V*q3TabIJLrxhw||1IgixAvkS3a^a`U-Es^*K4sfuiI`eapync{MdGFo9}I+ z11G3=wp6%ZM2xc??^l1%ezVnn&jy)I8Id=2rxg9m{%~OF$^;45=4g90x%vi4lv`-U z?`8BpE2g;Mi>8maJK=g>gIM{a_>b#;{JSA1MC)iQ<^;mCmn1?+&XssWu()=B|9RJc z1u15%k!IallU(Sa3?Lmp?j&LAbOGn1Iom9Jl{tNSIyumX?&rfahXJL7NMk{2T{Xvq2tzS!YL$QYzZ@>r^O>mw(zjKXhy3%ryFt{dr0_zSbZOD+&%a9I{}^GFF5PP zWwJOZFArzuvQu4MFWmO-_$7f>IgHlnr;A2Li2Pvt!=Rx44$WYkidG}AE7KSH6H7yB z4q#@p=}haogm?;Oxh^hDtrl@^YhgKmAb@7$t34U(*Y7DqhYNFkwXsV0po!^FJ0XT^ zqAqZE(x&s;Hq+2ym2I=*t_KzR-eozQQaY-qG>Iz=!&tPj88F+W zHd;~v=FtO1n7#YfBA__{Wo$qQi=l!=2D6d|4}9da(!r2}TakdbF}B=Jb}}<`WWE>s z>U^uvI8Bj!fYfZx?6^O-EWznM6c$$vNPP9mGa(#-%@E>3OfiQM} zDIL6xvV&coni5{N>l`UqTkZx2So~WYIpq*^@m@h0vdQj_!ToKoB*d-2KT`+* zW@as3-3-D7l*p}QEl!P*_;o@`#t@W_dEFYpSXO7HTrWfZW=@55 z_O?$bbg(6ijqat&lDzvftZ$V_Ns*KuHVy=x8yZ*_yv@Y}FBXQ>Tb0BszEovGsOG`( z^gRJqHzvLtz2w@vpY}s`D`nmyRQN@N;c!Wf=5|y^7z0aH<<3`s2a4KR%`kdfKwyIM zHj5BVaJmd?9NF&9JG4p5i?ww|T_GyXu~P-Sp!y2-wpYB73jfB0&v42XHsX8!9fd|7 zPEg8~?D_PQz<_*zgk;(jv&|(%$^Nhgea^LBehm!hA|5yPjl~*~P=9G6Ye+{h>*sMJKH&>ofaC8gmSq>h$O;+@|c=93q#;qRRn*1?WaYzqZ z?jDu9Y>I{M@#z28Acc2c6qrym1 zTTstUjF-<()J{A4%`y*QXYMaT!fw*U!i)@lYpldPRsF9fT^{^!?QhE%O?IR?N1t@! z{co(KK;iC@?bIuCghjWLV1pE{L>RkhY%i>+t+Aw=6uOvVm3}Jh;i@}Su#j92RTN=1 zv*L>@n!pnBE&mQdHZarfbuiy50IjlCZr3}H1V2)BXk93E4&v>RV4G@uWlYUi_kH@C z{IPi!waHqeXIDvW4t9_7ibzW~;hnGJ13BxP6?%UG={!m~jvFU4wTr+JwB{J;1sLVwST#>s)H!@P=72hRrQ2U!%&wGEYvD z9%lZVele4m@T%`m%=+qcqgN|%w2PQG4`gX2CcLqotYfTGwGf{(eoHxb#@=f0Y7XD( z@!~JP|86J3!Qk`rz`qO02f&*(vVD5MW&!^=M-2#b;P2f2zv(4~ehcwuCpcYlM$2RD>Kp}ef6IlTE+5khq$)g-o86FZbu^Y9N!%w z)b`VJroHo=z6rDjpGs4-t~h!le}f??PjUX)}wkkFVF%tz9OHkka1%`X2%S~Q{?riWq-?#&zA2pNhy9bkQfQt;iDpEd ziUm(us0XVu+}5^OxH>It5~^5$=e zaao69;AztJ3}+A9 z*BQtlU>(DXm9grNWG85#2=#I7nG{z>W5B$Y@4mAey7edre{hj&aNeHmv*>cV#r6w$ z(tZuJc*@$5(b?Po@z6eTW@DlcBie_UpRa10^sASvWdw!ia(`RlH64O2q3zE=;Z&_L83YyJ7L2i=S+izyn?@F*gG(9h$vBgN}z zpIE2#Y{*4|S@humP?by*+Mdl-#oc_cW9x<;W++M@DA}Wz^M1^Yr+AQVz4tEkThYby zSp#6$cvI3_HQ+$3FagLg#K1j&^zjtbG-Z0pPP;U+J4pSS@n;8WhrRVToJ`WkS3J;q zS6ksEdA(&{pVjW2e&1E(l)(9%#S7$y3~J%rbTi%3aPK_}I+x~y!X0mX8~D}@t^}Fo zC}fa;871$scs;6E@IJ%LQ@ng?AGgYz9pxCG7z>0wDnL%mKO^Gyc|*~ZDe3d>nypUY<7e4$6fBr4qRn8h)8}Y@(ike)-Bx8;ucBlU zY|!CUe=Y>8DMIZ~-`fKacg~Q`*BQX*x+E6pEvGx^l4 z(8#xl6F8+>mFn#e0gvo5rv}Cz9tf=hcSydl68$3iPvGFbm$vGu9Nsj8To0xvs&Ymu z!vFY~WOb@g59E)weCJ$F++sj}>__;M>51^BBoqjF`0B3y(Fr5ob!oQ56?~_HM%c5Up>N!F*s`}7i1xcQ zdD33WMabe4LQ2%V^rYCUf34NJ2pSz=k`rDTqQY1HQ`ZC6P%Oob0C*#iCdP)V4bkZo z;(PctoXkS^Fj)H4-Tn zKWOa%qwu(VI)Wj_%#wpKJSrpz&}GYGYdd%)4Mr(UQfU?EhI8R> z9fWCghqN}c;+BTkzv^m}7}iP`(Y)$D#j?_^at@83X@o5}1Hpn=hSrxtC6et4KsBw1 zs7chDycAXO%jc-uej=MKxEemW#1_PTHYA}cTHQJe=#mHnA@a0ti~XFPMTuD!(XG04 zVD-RK2C&Q^P{>x!@B$dqt6JQNTvcat!UkdQSm3R+k_8#Dva?`BnhmRE(V9t%V|*os zY(+}509#=AgN$kqtSxbAq7WwR?yn++p{ttVs9D|psG1HgMLY5r-a?VM&$#QVLvxLE?4HJ51Tmty5nB~RBjZl=Uz0ey%g}LBN`}-RLpY_M zfTM`)jHasxvSzzoeR!C(x;ZbNG}AY5)aq3TE|tTFJnHZ%+qtT2YAd&ryU|M~-kqa+ z_AHn3qW~r9_?(J9gIn|QC4h!9dOEAMs>idc5X7-um@#;V}K(h!A##0!cl>*zl_3SvS8l=*0^gFFC z2YO#MHiLqy;TFv+7-p)v0{&fY;tmF@kMJycUQc z$!f*{1rb??SAYKq01c)NO<%tQ?3wjr21*F?Ng*^UoSwGPPhy<{M^2Oysc)Vdr*^1f zqPJj^JO4S$>B}qONy{dj_K>xK17vm=+ow@Ff>V8+gDHO}Us5N~z$M=(1cH}^+$xs3 z1S#F)qdNjA1_4#oJVaoBSY5Db>m6M9AlTM@RD6At$ zx7}3=R0C`Y_Vxt5?pXXT@q3+sY!xg532(TZ{`}8^CN)Ciw6oS{+`M5 z0*)qicPyu0$*Bw)rl-9a@$Vnn6#Cuv@AAhEcFnJIk4}VnnxVH9UZis);xIRuCG}UW zvyTKdvXR{C+<6wneX7z|_wnAsD;rvh!ciL3Ne>w+Oy!)mpafnDJ;#xf`R>?;N1$8T z4;?7sRu>{0O8!2BrBg6+gs=`X(m?)o-UXTT0I>A>gXn--yW-u4&U!OAbW#U zDBgWRWcB%SZ@6IFK@dg=)(b9e=k}8>-#**F3G2NV%@1Hea_iB_DRMfst8yh&W$z^r{op>-j({ zIAo;)CAxd(Rh4P`71p0P+(_2m0gbU6NjUymft0Qh-d1qGR2!9_&3adan|DuZIZNx| zx&8&}X8V6P09nicQTiGzO1e|Y_<8gE(NWdHqkohV67i8D?1<^juSb&YzqRTOHT3o$UXG`>0nRN6Y97IQpe}`#CQKdEhgAu%lryX32|iPHo~|U|>muco9AVqH zS*cQ4VcpfiiL>CGdx)bGatD!EkV|I6d(fkwTL;mkybW%YutperW>ls5)fg67&tnf@Y0d1>d(`GI&RSPF zH4AV!-~9Vrw-i~2R$`m0%bdopN`ru?|M8K2$J?BHhXL`z%q?1#Rl0q@j|b@HEGb)bWW&Bb)E#iI zA>MdB(qe@_%bAHU z@l?+FY@NKJeWT%YUp7x^m`b+8LR)6#8ds5*8v4C{Fj{wsk$7H-#OLw^;vbo=|T9yj_=szIX*p+5cZQ_laIqW z#JNx?ASgfS#cd!Y>BN z?$$L>iwh}vXL+8ZaLs@7VjKLIxuor;tW^h*MDkXYaZJlkLhd%bsd#zP@qOD>A7t>4 z9YB_mv)q>OO)gA~`@Pn+Lm3Oc`mCAp$9Lw^#YtZp(`0-3Iq0oM50eA^a#U z!>c_mYmR*r0sM;CIJcK>5CHd3=(0C4kI&*>2~XOjhPZ&HcywDfnwtRzzLwhR8BG-F zPe?XmxqB|iVKqoRB5+L=_S>H_fLq5eo{Dbi%F#Lp&N zYuV(#WeL4CwutAKLbr#xxj3mkls&Z@^KbyMwb^JyGjlo2FF?!DD zK}r}doITiCccB(F$;L}C9b3zy@uV=^%ZluRR;8J{CuHp4;F;CJe$THyTib848`T-; z5KUJca5wqIw^aBxk_X(!`9=W9A?DjC5!_s?w9tDIOH*BNaIb%x*Mwt6w|19)YPjgF zGNl>*ECIP_U?716ZcQbMyesL$BcD_|42qjs5AwKssYooSM|F;tz0UkgR!~BBhax%< zOjWR5Vse82(Nh+6LDodxDZ|i8ab#7=Cr8qOnlF^ z*sFUWO$dzCTXCg8R$KBpz6IQ2_l9`E+_C=>7dr{q3ov-L@X>^7Vrr7uw zXgEy@@+N*m;@mMKC*1vOskqYg?1M6{9vP64bejz5#a?0p-(-k1viq(M=Pmduu|-fZ zd0+_Re&Y8SA5>*;qWtDb!b8bAUJ26py*b4l6gca4)MLM^3wxE?h#bTh#08z{<^fL2 ziLj<)eqxD)VOiw4@~Y9({E=az7k2V8ZHGHrc0HO>UCRS;Md=p0`dp~@gTcwx^qM%O zGR3tD_cKs2sf!~~qvgj!gS^+mEyOo0A?^fyB>f2a{Ur-i^49^EQ76F#Ue=h9MeOwh zu{a6dPJ<=;8svV8i&k$a5~9d0m6+H@OPpUBQ3AS)Ox7L$j#4$sY?00>eI9qB4nM#%8@wZ|{;dj~QC zu@KrUiSb(*GqPSgZg1>E1*)#huZSnjQkzN~&hPQRxXJJs-3G2CWB8{sZd}1Z!4-L>E-+?F-NaL8wNF{wZ>w zl(%6+Y|PceaQy1nuuC>jf>l7uPf2fhY@2gW807m7l3?h3v-kjjiI{quM<4z}SF3?Z zCb7@bJQb3V+a|sp)+)N9k=HRH7aIOj8&a~e|kv{y~aM}<2>cKi#ZX97{f`+mR_yB?LX%tjQy0+z#%xV7#;K#ZAJ4hRML(;(RxMh^qqrnD z#kAWvMeoOG$Vsx5jY_}k$Oeh@?xm`IMW#?7idq8Iv3Bm_0&R#ih}z?^ayDGSHttGn z8+jy6uwpUbeA|c#eYW7zA!$Wj+D2K1 zf!VW;;WY{^GUsG}=XQfyWIhYj;<%Hi0Poj3MEPos7&Ndj<@Fv%dyk9zC@?b)@tVtd zhGMWYkH}8g#D~m-so_mObA}2QEJ=g0v-Q}QSh#iUJz{DXOO!A|mZ^!tza^;2&WPQN zHn0co2|%z<@w2qfF&op1*rrBd<=tsChZSz{m%EoD^96WDNyz~c>^^WD$E)%hRn4pM z)o6b;&L!f-6^KEdaHa_2o7_eo@OKDO(yHC20qbfZYp|jNuy2WHK5Rl)7*qnF3ytNU zddLuE5PVs}$t}>5+EW`09oY(Q@-yog&Uy>A(<5rYgsKr)871j1hHdY(0mq ze0gy{Ytza6J(Qd2uU&1$8H-#?vu;BnGZF|rx!}?@QzwJf)1^;#(HGN6rL$7~V+&o|zx8*6YN~8tAD6Y$6klkU=3LKIX z*%Gu$`j$B2u*+yjaSzzmlm*P|lx-Zunz32*lvdN>Q6qwNz*ha4q@r0hyjS1eWAnApPWv`YKk z<(CzTHzH8&f*caJAAYh~yKwIWEUIR4Df(I=Mmg+%W)%Zoydnrp1DdalE8fMwxlVl-TdcV6_P{YoLDQNV|{ZcI5$xM@UAQ0u#+_6i%(X# z9xN_O-G*E{d91$LB#7H0y{ik!kprI8Z$SrZt_O(Q{sHBY^{y)avt+%cuI}@ZtNmNm$nrbGLBSF=9O6jbm zsx&H|ec!5w`U~?D=8!xhk4TB`CIq6y}^MSGff0CDs zilN8LS<7(qq3ep&H8I@lIMi{(Yyr6 zbXUPkz|~HP(^6U=1)9$t5(Asri0Y?yW1(?&?fAhv`3Rd~_boTXgcPNUt0m_>?xA5syZ7DAD^8eB%`Qc1) z2rupQrJtC#GPT`LCq8kHEvvFHwEUIy$`W0(eZ5_3YNQ4sH=4yn5tMZORn|N|?dR%_ zZOih$Y&ygwIrqqW;>pOLcS%XE-RHUXccFT+ZP<_C)kQ+&YER8TAhbM>e&=K&iOF3d z&rb5dvS}g(Bx@3iNwKEP@U$9-;WToedTEDBm2cf-!dMk{ae z1|8NZ42rN6S#f7u^5SLQfro`*$MPKR-%KDE zNwy6nW9)*tyNwD~vsaAbPHmd+s0AJ9@1Mm2Lz|#Ac^pVzp!N#SO##b{&@d}sDgKE8 z6@9WAju7&n#;jIpb($I;-qgg%T5UyO%drNEI2~y?21H1x?URq?(uh>UEUdO-8JO4< zXTP?yWTI+O9&%dmK&LWHvO}HRk?kTT(`Ia{>@e;wB#Crb1h^5VdaUa;tw~W|bYtDR z#lorWHmSHP%&oi#`dwqYG@f-~-_U@FfupaTxssx;e`uALsB3%hZ}-mKg^^Z1lHFoJ z4YW;3$zmmqIpkw*iK;86EK7{p#FlAk3?_Wrft_juWtayOo@RTTrZ>4+vEjCBbam65 zZ%TK9)L_iNsI#o3%|Yb-HVu;c-l@p_K;DYm5WL8E2znzfy$yX2w<|nY$fy55Hy9gx z^@WvRc6*2p52;ugba-6|rsxU>FXlRs#_lC9%&I13DrJR46n)}wzlc$EPlB$c8DwSW zPf5NLPbx3WBph){{D1#8V5SA!q!{;a!EbIYtNjXF0IMvh3$T(`W|oanI}Qpir5aP}#dVRUNoR z_7*AgJ`V0z@Won%Yn>efn`ApmdN3P@=%}#k<-4Fh@l$SoQoCR)L>aEqG%apz24B4Z zE8PG&DDD2~1821_V$sr$)r8x-<+hsLL9y7<(p2rPR>@1cv0F9W$-G_;r@da?u14)! zY36K2eIAOX0|2#(Q9%baxXqf8;(3JUF|8`Iusw@qtbj+)c|6Fq^HdR@Ug^Rxy8B&` z*w;3Yif5su7jwU&C!X8d89h0>*YUpZ{%PS@n>R_FQfl1*KZ)>8w8y^Wtchvs6wkK8 z_6<%(k0(%SxVTwixo@cC`(IKrxVW`;=~>~n%U533Mk!ks`6cwJYoUDW>f2H;^HC(M zj5bJ&rrPXZ49QGK1ARnkX3waiD%DacpVJ<9pzeKP1S&+Devt_sN7M5dv}$fMEc-U!rNZd@Y)LU;D^GJsp!V=v?g13 z5n8&ln++e#eWWX~715Ka$M1gWj8pVnb5ZeqZMY_lp8IN)Rr(_bT8u2gK$Y5RWj96^ z|4wh1*6~$@?X#qssx7H^NS11sY273zxK*0}qdFvXWWq&R-5tfk3*K*SqHV{&WHIcfhz6{;Df@x zWwBSoPK0+W3OC6?F)O^Hg@qr+)&4%tvr;`}4i5xhfFOBQOb);9pLpazraFmy4HV$p zg#nj_$)`aTstjx!Wg3#lTbth)H1cdWc$VpUZ?lRHT!Vr&W7~3Tixlw0A;RcXj>gs& z--8=x3nIyEl4+2Mm-Vq>XHykO?8D~S-WqS>RVzhs*QdaJ=o#&FcWin$G37;AV1?;* zrA)1&Zd>Xq+P18^$f;_}E2J9&O^wV4LTUzjuHD5aQiqa$(+O`@mh_=_m$fDo=2fv3 z3iMq{@`hzY(FM}rS8$eks$Fnw(;!r*43wHt$HSdJ#j-K#<|yvKrgruv2iiDq2(Z-e z%GM!R7>Tcw``+uxNx5KK72K)5+=Y-zmNcXDM!_=Zju$?YbwdbTO zK}^H*$q?d7F@~xP&qt5-W%Frn{d){)ZN(?8j#0t^T{7~R%J{a3BXXqy2aPTgrA-jm z4z&sye5hrY>rHV@?@WtRW@2N?^&WL9mQzgAc{>VD5U*7%Kwsbg~NsI7x5 zp}>U@RVHthp%T06;c0}J1+Ytsijdb->64YL4~C;a7q?oqorxD#_=&^q zra;YVY>YiheWg+Ar2&pnnIl(a*4j$PrSkCOZc>n})*QSVyE~TQ$-oy3ZpneiRfS!q zA>0XBl|)h6Q*14ZOt0v#JXy}|!@gQ2#X((~Wwi=oNo9hE*nKQ%jE9|2Ng+Hcox-xR z4^-xi%+9`FjMH%w{qSDqR?)gcW|bC5OzK%%tu|#bmA6*acIv9tGrl_xA9$zODVEm5 zAc~nu4|f_KG-+^Mz1#X3X)nNQ>zP3+bBU83Na)&Q&uvmxYGD)0Gmk64(u{aueW1a$ z7h3ypZRT(TcHa6nNTR;I)}|uo0*GzWNWyW$ya}?Zjo$2pq^c-wT}O$pDNPs@c$kXWrot5hMbWCzRrZ!R6Y9GoJCgIf9jK-LzB0wx+gzPjz|C6?`cDJ31neMTjunNyk zZzYVuh8~dCrlh%GA#B@#ZlT&T2w_fNT2&zaR#j-=P8US@L0)q&P2VOa&}JGh$ADrDU& zNSr9dk;_dwwy!!-67K57QkkTz8dwxQUscr01%+ZLjs1q)2)wjGg-<92dM|K+d zVI$gfZI)@@xZKOUTs*zdmPr$#rJv@dvj%PFd2N@lDf0R5=c8v|q~f3CMXMM^YHt<# z4eE|Dr?l?sJBs#UN@A@){7BJYhLCc_uw0Cu87~opMQ>G+( z8btn>!Pxe61yC#;#jqwpU|#k`p3!9umwql)P!9r(g^V;)pA0g(r2!^}8RwPvOjBrZ zRkd1@%Y<#BSiNRDKc{WQQVhCsC24hKN3*Kj_hY%`wfW2bLI%Qf^>bF z=dIX-)LnWdmZG*QVCg3@!zqii8qL@m-X;NG{c!3$j!qy2{)#q(4+O|7gOi7@-1`0? zH&mEVW_iQUXjgRMSg|uciG^0tu8-~(pRUTzo8=j8cyAQ4(}Idi;nQMRBAb_(k)}A2 z`?#Aw%JUL213@etaRbnfmuOG{0mfypr_O))&Yt-$F*bj(vOF&vcoti+$DvqU4Bn3< z3Hn?P^Xh=DpDyPOhRgkERzP(vJhCxQ!CI8=OW zri*;0w=K5DV9Aw*-Kt~9w!!kZOSzWCuA3n@hO@{?Q_M|hQp71rZS_gxu?f(yDuSIc z8;Q|!cAGQ3PrQT&qSrHZDJ!v{wurYvmT&Qyzgy{An>w2%55Sj5LCjrd9J48o>-q6= zHrM*NSc3Oy`x!qYj1(hYrlQdx>XO~eU`)JB)fU$q1=8!t6Tw}7cHC*kjUWYP>$c>UYkxHD={)&Z=GNFRFd^9R+NM^4tM$m*9hX zn%KO=CdS+@C$Ey_W3^KxV82u{OigNGK40mJ5k8oRl`}ZV9SqmtbISvw@G5WZs#XnZ z-U?aWUi#2rLZ7XM4~Ho9E2}C_?skAnNpFL+b|*^?-&$^YhN#0~N0!im%JD%o%^9k% z$nw{pTUMOYfM#KWhU?cB!pG|{AdUHV6OGlm0i!-bQa+j+2Xi_1BRx%sml3EH zU&*M}Qs29ekEir{08e98u7t0yO>tuh?qi!Zduhs^6)SRA54+@+ODiSh_Is;d9YIcSYZi9_&7pfXe^j0dv9js!~ zK3C?zFx^UpVkLu5x9J&PS&cvE+(>0JW#8&e+%WM$MYpI&NvexzO?f(m1g+W5Ql2{d z2VkawatSo429lOu)2*fTl|Gs|4b=47R1?vXY$s-VX@$!6RsOyVz*c%r>WiU1;!zG| z>9$B9cxjX=nN&9Q;F#XFLv5Hgtr{BR2aP@_=~)~&JJWZlyIZ8QCXag-t&PpjAY*H% zGA`_(UPo?8v2(yFJ{vCs!zQsR*Eflk4C1rmV_At3Eir$JSs8CvuRUz)1O*xHVlwUX z8S_=G0@^|`hARxE3oFF{G9(y@Au@?gAYSaj*r3!_p-#r4q&7uPX*&n@OU0C)*Ez6C zQ!PB(rX{<*)XzbMu|JCBrpx8ESR@eA53EQ?i0ZCVViTwY04Vaicw z`30MtHG9zXn(oY0>J#H{rU=NjvP>J&?4EsU*eOdkqqsXqtllaDq)G(_Tbm0_DOshR z4#|#v)M~T4>*u?*@6|#+{OgIZbxJs;Q=aRe-s}xhsTAL}+5i{Fr2Xj?Pj=b_A0O2Q zFwMtIGZ{AHrn?6Daa=!n+t_8RJWHcc*bN(*(dUz;5<{qLkGAPJR1RM^$roDvUd_!@ z_1?8P2sOb1xM$vywHjnm`)6KA9OgXSjGe68_5zLclNXsm+CBBOPQ^OCpymsMR2Jh~ zJ^N%Sl|0yWs!flRiGP?KM{nd!;-c&7u;v(Mu@wHnj(l>b;x*T>0p*Anx%3I28iFE@|HDM7jio`0V&zp(7d z_Vgo#%pCa&f%l5dTW84s0FHdlOQD(5i=Os+$3(+|0aaMoYLq8utYdsR$^co?_!kOiTg2Ub* zqg&OkOsXEfB*%@qrS<3H=<2>^WBn+18(jKKo#L;o$ivpj`LP6^~W7L zGRV?Im=96}F%rf?O4GI?sLx6ad7x@Q(DE}D(tqy&<4K4bY0zdxi~EEg36v3xdN0kG z1>Q;3*3r}JQG`}YAf2cOkgNqZPGc}Y!L&n!)tc=HTSb5l3VG1KM>*62N*GAF_`R&M zCLp~Nq)&3lit6p2kx)~cm(YgCs=~ffWYB!<9LeKwbz#!#boFLR2fE_t63hq53u2HH z?kqV=J2a7j6X7OwbR`ogj9Cw7_;t_W2VVRN{`o>XG zRyL(I{-%}HQ-%60$l7Qc1^>-BB{=u@#(NGajjiE)GqtkCQKTzF%-C>wrE(@O zzVihy9e6e=>K7dun;kgV!rXgHRZ=uA=@l7AnIFb#@>^5)?23=hs^1NTG-mHO-SW`M z)v}EpTW<0@J?w<(v%<1gg;9GvUXj~Yw%ZQj8sOx~sye@;!mNdvm~39zAxr9c8iDB) zHjm5mJWqDhJnCOwsmbKqIZ)60HWr#ds%k9cW|cRtGuPH}=wzp%?IeKb5Z=iR3E{hP zzP3))ind3h&1^cbv=ykjAQJ*4*{2FC)xQ|c(b}@tH3U5;1;;xHLGRz|yi29HC-Q1vIEkmkK1SASb(V%97^lGO05x&}G6A2A+8V!2*lG zB4>S{Sgvx;U9y{QTUKpRiZ?_CYz%Lj>|UAH%$Tn4+wo#{{Jt%1+#8DkCCZlC`qhLx z`BGAd><}nXkG6AQTc%=qL21N*M)6F&zYU^cIGb>?(l00RFr30{d~W5m=Y5K$5#nkU zA1O3Y`l3V=C=8BL8{gUJk@RkyavNXwAy98y1v=hZ^j-_$l1P6W%12Uc@F6g49-kTT zV{`p16j;vP@>~u=z3s_fKk5)~+g2GMU89o-iKs4Ot#M0TVPQZ&_Wv;+Z=7jeW226m)8~dHlw(@j2*MP z^nv(d<19lLI$T>^%e-)+ot*~F?5eCl*8e`}3OWnRpwAZ1v%y8Ddfi?$UfdsR2vvQ_ zZzPlL(hyafBX*{^79<{8dY2deroG$LDT_6_>8-X5&sBJ?)9X%V`Pm{#38C0a#hj|R zcBZxEQx%DC^*ucEdUJCn!{yM8tg@)Yu$#{`sO6_#Ae{&af_FR~_c%g2*K6A+8@-1> zi!EJbx-)59)Rw=owk6%Le_R<^y~GxRN2 z+0g1e{g@2Y3f1{xQ>4-S2bt{w?YB8E{JFS|dCw+FvLPh#p>#HuEfnvy)yhuKN!X;=C*N}e|)M)BAd zX=6G*8#9}pR_&gfmg~dW6gm;|vBm=H2yokgiR&s1(%3BpoOFb3Bus@ZnJh$IlkBj) zt#t6-UQf#|asmfmt8eK!#j!i5EPgcn+CxJHVN;P*w5L=D>D?@(**je8Cu4TE)?Ou~s7u=Bl*UAHZJ+2>xqGuFQi zm{GWt@Dc9=G3lp3XjV)vU6UwL&&DC@n#hqJw`?5Va&LmlHXVWEqC)nIfH%QfJzjNL zL1`g7J*Jfi;%@f%Z22`SDi<;B<^`%f+xBIF*0x2`MhPz` zx2P88|IyeSI^R|Y3Z=2Ud9!Qn9(ap*ZKKhIIchAxp*;J1brx9A1BTWXUPrFZo z*A)>Ed!4dMHjO$DXw|06Csk3{DpRu|&tn}&zuQ{BCupiME`gN1b6GSs>~G_w_t~%WmHmBIWvg z%M*ru6*MB2K=X9%dQS~yZf*Cl<`DOIGjd=bS}M#@nILwxrH+{LKvhaM9(q@Bknekv z1~3nz4N!ih3@l0O3LE`gJ$Ch?E{D2M@*#m=AC3Lluyw~kuAc04S8o#nWAqFANG;nq z^Sq@8WC*!+2(Rhk8mf?N`Q6Hry$)x+{Gvyc^<oR8_h;uvP8*R_V|D zmX++vR3V4!O>d=Vo4!A5m$^_<)PB*`$h}l#v+D@*eFlM+TEf@ zbXCyW&P?rMm`;IFxdyn^@j?i9-8W1MpACQ>s+$?KACH6QpT$Q|Vah!?tnl-^@Cp|^ z;d-qMQ$prSIx`NqgP^!!bLgm-vB1E6urtp-^_3AvJuAK9*7@}PPWJ*I0KMhAQu3UR z(sxM{p4Z4Tt8R^{W@VU!pLa-~7r;O=|B*qm+b4rME%nMvHc^rA!{zK&wXs?6Kl?~I z|IX7v0b_@Zj^=q9b1(o!+y5c})Ah&hyqW0;my3Et&_16~$BZVb5Oh~$v1Q<8v|1e;nEEgL_pOB*_m^ejOKm{QnnvsR)iZ5TbkSs}M=r82b-kCFUr8dAA&ce)_%)#D+2csP-o(dhja=54oUNE?kd zZBAXARfOWP=k-S8_RLY$E`xGHnjxo-WM@ObmoGetK-0taZYu0D<@Pg!q>Uqxq<@#^ zh8v#5^hiQrJPl${KB~2h*xJ3dpgsVG(q*yS*+AVIdpOAmCD{%DlledwMz^`Ww(5_oxP=K zYCQ<_EfJH-EDniiD~Pq&Pjg5%1OG1MsRGIJ+&9Sb(_0S%G%fsODtD8OGdI22qTGHS z4wGnL>drI|rCht7BYg@HUYRJQ=HJw1SxlF-E=`mb$VSCDXj%v zHhr58?9;Ozpcum^T_I1zdK(0Ua`k_M3(*9?=^iTkE5!yn(>T1DkfEx z(oaG?v8ox9w%3N^NU8ABIrr2ihJk`ix(7D{?%9r%zuPW zC@6ez^6HUgB!BJaV?Ar59r6%@rhJi;WLn16%E5xzG6SOp`tZ8N`_L0U1J~|!EJ>`3 zp9WACHc!_4 z$OmJ6R=&Sn3Q?=T{KWp20sYFHcua+favHATIglNP)@fF>M!lygPx9`dryg1z!8FuT z)G$Lw-Vr4`H04JE9$Fzg#bD_)oqjJJAFLNpjpO#_3U6QbP(e~iNMaf6Su&x*XqI~# zXjs0O+~3Q11mBY#RKx18zEQV?&*gaSzaQ&52Ljtt*LB|6G5@sAiAapqdmRBG_(_%f z_RN%~v?Oo)@(jxIloNU#3V+4v2s_D_Jfiy4@~t`iz%Sn~xZ0L4ASv1D=srV`dADRO z_U_oIko$Yq!Ck1(127W(GnEV%X6eC>VCZwQ29sbBle#`UjI3svXLo1rxVaxbSn!qf z&#&dx+@Q9ELpL{jvvPGjHbhs=SG;e9q}o-%jrXYynw3KuyD`Wi;#L-twgQ(!EpG_4 zW?Hy(CP1AI%n>CkP-YP6!;2w=XU^{fjjFY*s9$zn2Nkh1M~}Uz2=8hYU=m;0HOlg} zM&%-PzhKW|Gg{aX)k$Zc>=|r0iv`5w=Sj-_+>-TPybF9u3!gb*j1`$wvDF!VGzn|< z`X;*sE_2byJyZu-jeBI3!09+)S&_@PJ12M%yd@fQyeiTywi4Djm6yhw3+uB% zR_E&wNc=d@%{Hb8@6}bcEE1+|Ss8A5dL^D4c`^X@Dd^PW<*c~24c-z_AKQo10&Q}9 zG0bk3AcP~^MGj$qj?BCjV`@Y>b+oEnH&BEP3}rzc58ti(FkYqYLY}O$X7joEG~A3; zdHFsJw-OsQU1Y#2d#fEJ>#T)c-UbngVtENi6Oxc)VRGgPsKH@>e{oGdk>WvGzX8p~+RJ3TwptvD_biz(H5$ zJ^rLz%Ifn)8nT+;l)hZ2$_pRK(p#syRawig*mc!-rCgB}N6inlt!%a`0o0&9{E+VJ z{fZZxI-_RWd2U+`8{qXku7_~x`zPaSDWkL1VZe^#A38)m{zI9rv)zoTu>HyHHBjs}Ee_F|o` zS_~B0;k+muzvSIbE2DyC!6!=eLC-1Jvl<6O(s=8}zGZN5cfOANENNq3S8|!Z#fulx zO=G|^e4RJj?`O%S{cd}ZU4{=h``iqHEpI)#C>&S^Lg2tIdsi)oO&F9iGl`|v_v&Eh zN!qzamb=OZXR1vt!H3>AxQP{fMCHPfy~K|gjn%e9;vZ>GWQ}%)5H;;bAVEHl5YveG z0gXP%*j}jDO*5T9u0>jKg+|B|Eq#JWi1~iGXrbn?1nG72cPhOzj!9k6+c{9~M9(0D zGF@T~*o~Ye-$D=02)~^~i*9Ig_+D8^aYJ4o@9iwfi?1|Dqu5ZzU`mDBK{D)?Szr^{ z+JiDU8$I=GzwIX4M^c`jL+L}6eJ0OU=GxQtp%=ZnC3sR!dWED4l{&x%bcx&ck388K z3LA60X|LCNhJ9rc_E$ubdm0OM>5|uBp4|r`Z*O|C4q2Tk;VhXq!_+OxA%w|5Jjj68wFxF(wcK&;Uv0v=G;?!+u<|<59bPwL zz6(idoZ)a2KJRkTgR!1=VC*mbIqmO~?2FXPwoc>LcB#p6-FhTL&y@%m`fNuE+{vm+ zO%L`i`(h+XU0CY+3CnWUr4k{mNMDaFiGArgbgMo$tUu)EK-Vm~Pofrf(p|KAew<&= z2kwO+dxg6EqL`14xkET7l)Ujvb;Zwsy)`{Z@nX{#pBY(N$z5!)5Y;ko0_Rf$uAov#}GAHF;Hw*rCCVv(Cb6ru!dV$hr45TX9GUOi!;qe zlk9!2`I2H{d)!kyXUFKcYq@%u$xn<%*{al716h+q~b z>*UR15aYBTY}Tck>Dt!16zb9~Zmj1BvRD`#3pYi7)UfUh;`b1s+t_q*}hZyyn$RkHwe&7 z7>ThBrtIaieR`QXRbtv?Ubm%qO^`($DEmrtwjsZEW=xc`J+5%AFx3VThbK^uz6?TJc!%Q!b5bslIV#sdSBx z>gwh@4B)UKRdn`prziIGxzyc9=P%-T)7Xl6pkd&LkMVN#Up-JU#Zgk3h%d!f!KQF zP(iKdR_$5maMK}m$Tgmd)oX^-`n7uaW@=Qew@m1>kCv&KQ?X7lp)q=;-EHj^JB;|S z(4+-HkVY7u4FYGBb_GURh8?8Qqz|%uz~zOvJamhL_DEcx(#Ioa-=l>w4(b_KKM z+QO>ZgX7@Zed5Z>ik<27fj#8XGviig$(HJns}MveSARr(mX&|MUK?&MiXpHZu$m|#Szq08E>Cf0fw zyUg7zgjbd04^mQ&pF)W)u6T7C(4-xa@41|nLa>x6OMTD7LL7P4I7t>BY!V(qJ60md zY&z_fg%R{qK#7@dbc|)zdQq*z9BSqJdO~8Z#j@@9+ZIf$C%G_REg;eClfuFOTfk{D{GpCs_gue8cLiM7xk`2nzPc26y^7JNY%DjtkB@^0M zQyX{rHS}l-(?8UDc%;mQ;4OnB*0R>vJc6>x)a*;%-x^d>=ao3^w|Kbx06f%Z-)b~I z0F$^nA)ZtD?JUWBN2?J3x{Z0B?6PDpI$KMM>t4@cNvzePr5(>-gF#JfF7tT z_X=ohL^~4vnyTJxk)oEftXlnAGN9W)w*ydi)h`Sp`Wt2Bx;Pek(VrJnQ>jP!OS*&9 z$f`Exyi#x2&&^plsS6q-LcQ3(_EP&&AU}ghazm9gRx+79c}UHr>9OaQdcFXkX{0e8%;lNRT&o%;%2rYoCO_HR-nooz}nI0mP|gF9-~!uGr{Xd z4+P4ynA4v5vxE+D@u}03(lIw?ZCO@rF)B1!WuItj9nxyg)V7VDJj~R#_sg-lbdAkP z3R7$~F(2yBtxc3@e_ThT0hri3l?nmmv z-o!u&y@uyfd!oVP>V!pgX|x5ALk-v%^69i8tbuat}=2m zn70>?K@oDJ!&-D73$s}TZ?CN~Ky2j1X8Lc_ zvoooh&&<0vO2iO%bh8U`wk4C)&)AYqFXvq56M=Wxl?WbTw6p-wTAQt3 zdCMc9$zCDEQ>Itp8rVl)Z^|IAwYh-Orr@FWYznD14f=MLOv61GT#a^T!{>2g%Qo@l zDe2or8$|dby_;I)da=TiUXOFjlI5T7OcU4oIUbgzQ!>zXy{XaG*Jh_c|4dti{hgDM zp1RZLwk5r)tu|xv`B*@kQSPkX5am^qfviTlv?=v8;a$Z{+FQB#KEHxg?D*AYlqppv z<>c+MG~Z5!LM$71Y)k##c&w&WZcwLTNF{p11IT{16Mi;M+o0Pn)KRKt*&vr^w#PAP z3Rs6&$n2)~Va;ZLFsusS3u<^jEGhRC_QxF}O9_mb8k3 zwTh==*ZRy$b{1@=Xs1JtaM$I8qri) zn^@us$;PObB-_;CO2_4>t@lFe^w?n9%@&$tGYIyXR%AJZ1n+Eh{C^q5^@og^bEjh?(7`y2} zTWemYn%5YjdrYUKKwIJu{%(ryoI$!e(Gwg^+e_nIccH-&ZbAGitOf}gsy-?bsLJL= zwsTbgbRHF&g%oqnkeVfq=u>$PfhhXIJT0_buij+=0Q%tTi;f*m&`prYf!G|U2oO8t%;!o(*$3kg*I|Pb zbtg&~4v?^!997sMI618_(ae2VAc*u{Jx`dru5h=K8w=A@ORB$AO4`y7VHjAZ>4V*~ z&+VR)Y_tc|*6-0iq9G{ml_ZN)Z0%63`VYspr`u{(#iy&U3X^1fpWYgq$B%i)@E#1jsP;6p zEqd2LB`UE)7OQiC}A{?8A(GmAIB z%m5%#tXGJzTP}7=c|7#YHSB3I41rvU!Tz4f?&Xe=r8(TCJTvpAgNWm`FUJ-dE#CB+ z3`s6lK9YhK0g1i1`8YzdM3m-%U5!Kf-k4^$;x*0APCPro>q%Umo(Zt>%NjCM^LETd zR$iV9cOgu{R>*CO>~&PjCr|_uLr3gbu}~q;1_N7`Y{ihM-r1(V+F61tMmVs^Akh#~ zxvOuf_16-JJb4CaF}17O=aMTC`v`wB4$EGxl!d(+tYK9#7&2{^1N%z*9LG)uuCrhg zm1wIAyLQFqBZlgYD!eT#8HWa59DB)FA`o{iK(f%5NMz`z{%luba4b)gmL(4XzuC=M zljWd95Miq#6JaGO4#9Y?t(lFx_u5;HHIolVw$@C>SS{l>&PZ3}_*<34cPpj@8pgBA zU6aLx3`3Y1ljQ?${Hh8gGVDPpnwu*3&8YbH4ylWcVpxW}kIQi_ePBi*9kA-v#2^sX zNHErCsd#iVphzUrTBsrWR51sWmn}^P7@fUzTtsaZGOHHk0 z8CJ|AoB4-{CePqUNb^?6QgV@!>Xqt{6h|h}ZXT{c*>_fu^-!&To$(@rgsq~=sM$_{ zIKkO$()Qq8;LoL+2b;?F0A8i0u53WMbgIhso~(duJXTNq+@=*%UIKfS0(pA~&kc^R z`(;>oMt4OQ-{d9sMNcms?4)#&!|ZTQPEIwunlC}b*uTnB?;Tky#4E-RAloyudgR!JrzOFevs~K359p47DSzEFtaYU{avv*R@ z3QIN!$tH}1^dR7uy=5pPEQA%VJ9Q!5kb|p& z@wIZ&Ql?e$mPr-sbMK6?r+qpO_pla$q&|%qb*@X=w!C^zV)pO{86q;NDAE*Y!DiE; zj!M1$-9tWl-Lp>xEORNOZ@BrV(L>6@x-@BI)KHSn%dpGsXATJ=S0h`$(Igjs_umiF z$w+R3S{aovg9nep9fwOS9X=GY?Lh1IrbFtGE7RGBN^I~&RWUe8uoWQLr`1f8zh(8L zxBBcY<)xb;(EQkW<29hM&5bGw#X-!IS?Oj_+Ke1}`oMfN62yX!Zv}|BQH1316=~z6 z0I|4n4iXkSoO$rleA(+rZ_;y+Np$Kb;T75msMt%pq1@7XiiJ;0SVtr^>Z-v7Xl2qBCQ6D=|$0-W?K|8x&udlSz?nExtW=wsfZj4f`+lP8v+wKvE=T@;} zaIjuW_NuI|nw*QbByc|*QQHclUT>dhZGA|2eVsRyzO*u(!97%csYzu?8&#rJs@qVl zt|qIr3gx5{u6(JQG$L*vtL*w?fA0C_uc}F3m6k~XIpQoWz%4QSAjcyM^%BxEF3B`( z$k>`Mgc!^|AFB!3gIt0-6&9{Y-75L)ZEb#B`Ye2I%a^&0HLQ8d<`j9xjeXpn^qL2+ zt<)0Lu;vidSkAAdyP(XOEpgzT9#>GUVykLDNy_a!d}@a`oi3|OWzWsZ&-GYEa$cjd zitHxG%5}Sd!7Oh<5T`u~%V7g6waB8^pF?+eUA(u4{E8N)Yq+{lpI} z$8G3Shc1V|59gbg?qAS6k!AQ<{S<*#cB^hu{ncg?Dy-sgK#KjJr7K0A*ROpZA-x@? zvC~ibTKtsM*P2UpJbb;KB~9rkkP_~|etODVQle8Q&#Mg0o=X3lMALt=qUoQ({67?U}$|(_9{2Ss2(_*t}y;86>7u# z+`pYHsTX5?wgSjYP;>x$VN{}GiL+84g1h|kSCq~=Fif}(^Aegih9A&>2` zKl8S4c;SvTS~x6IyT{Aktt>>mtwVJPEtTL87w)4Rnov_fG%ycCG7X&`ZmTtLLdB+M zZJr&-u;;Y)Ld+Xo#!2l~sO?vQeW;-~9hlsXA?^}krkXfY_cbnaZ_VMaX+ev|nO0Dk z2~YRwx#z&h@@(;it3cJ$p52?+D$kWRIOT@1QhrcvGB`gf&wB8(>P`M-^|LIzG-uMF zYE23NWhQ=n-3<%lYUG~A@LNukth#EBI1sQ91mVc!ixw;|A}1{ zuPObgogt|mv_qIdVd^pu zKpP&1doYg#Z1R3q=C?Ywfe1H#q&YNsviET}_qeXJksTa4@J|hIn5k2Utkh6#rAMsV9%T5)$SJujm==ic z@N9^-X%Ne1)1V?))_Xoc_Q5cSj~p_5zYjCpn=5UK2c%iiOR)}SPN+ufy$m7Z-Cdgw zAUS&1bmNV9%- z41)#~V$9%kpOV`F?3S6x5u$Yn7m?+5x|^6tk!lkYnAbLp$!Y6Qe}>((>Y1i)b&X(ClJ|uL_zndJ_P>D&x!;k9nXj$>)5ux zQX3~=0iqi7uvO(eAt)DoiZ5>(g`3$^w!99*=GNUGhJVLg9`jTj5U&4Hcq5 zJCWS)SySx{mpu1uP3CPJW~d+p+F0aKTXRUl&(z3r6_8v0Xgq)}mow?xfvt~DmA9!& z+^j=H#kkc42)nh0B(siIKm;IpPJ>dZ|4?mFj8uvZ?)w61_rkMJOr4>Xhhxy^P8VX+ z*g}0^X=ds4qyW1)I|sFujxQ^RJP?w129PGvrbuEWsK-Da-U<+4Z55LFx7wxh;tS?t zbIR&P`qiY-?y<7_E+wbY?7{*HULYaKV_F)d4~2U*eAQz+r62)kMC{fN@W&p+3wI<# z&Y?Z9XBLn{Gy>_KNBXEOAeeNgwdoX1EYDzVqP3Lh!<&5~S3<@fj{TWmh8C|L+s-;x zJvJyrWyxMYEt=k1&Z9{ry+*rXm2rZ#uN(k|%X2urhvTGMQ!zo(wlVN=;^Y`NPA(7w zt$<>Pg|O+&{NavAwp9e@o=s2s%Y9O1Z`jVcY1?MQ2W9O!mq52eMy$QDkR-MF@T9>P ziGn@s>O$iI)poUE;#4fmjz5bBYi$lcI!SUybsRqJM2nwOu`c=jshVW$3dJxD*`T%K ztXuM(4c+Rkj5!}|+WDVutaaOw`NH0BLY||n=Jkf}g$@=RdG!$NShY9O#N>Ta^O4^B z{F3EJpcj6VRPeY!p z*M4sdg;H=wabJ|SHnGJZok$_&(D`9|0PM22#O{=mb*g0GETK*>>}!Q*AGlhb#^hOC zpv4*HL9v%yVYF*D6fuc-e7V!!_sVgT99n|=3JV>({o%Owgz>_S1}55&=SGCdCK*2K z_|U_RLk`wU;ETkYv>Jx65n;Mbje0bWNuS=tub$HGHpr(ke;KH)odZWTlkLH zg@{SL&4C3$(-5A5bad(x2&B7_z=O*3S76I#_}x~82WL}RJAG%7mnp|#9Q zq`5QwcIT}wjRmtKBZ)`rOqslwlH%>LX-Q>~_%w;OAhQ;Xb1|>etx})mut&IGwKiR_ zKkFLl3>`fhgj(TxZF|so8N?M}jh1(NeC@nuZ&^)hR@2_H8oq>&t#fy8Cqk5Y?b8(XU$yjNEBbp8KFtWLC7QVBiWaApX#?H$$+36V2Wj`B(6Qq7JCdL@u z_N2u`_5v!)hI2EBwkB}_9~9$cf!|8cOgJjG#*f#&*OZ0bWm=>IG#gzyJ=5@QZTGq5 ze0Zin025v)>Ua;&LGG`}i=90S!K`gWw#PZsvu9N_x-pWdVLq9dX?-p;PGjJlx!ESq zOmJwz$H>de4ygmiWy>MvjK@rg!aKXUanqBPl^JVov2h#fv&#b+!Ws>nKHY2oJ`quM z|12vY0wf+ilfng!-`|dUma!f%51JS3CVG;kOj)95xnK55ayN^N-s&?exA5HBC)-eq zU04eT5%Y5>k_gMIap3zlkt=IN8LFbx6 zhVAigfi$1s3$MSUmGaBJoJ5vBoCBn*wrC>I<^xHWKcf>jizn^_SS7 zJm|3zYE80u9z14J(nBw3lFeAWgF#Tp+%&q8$JX^N&b_MQHn^Q786m55l4C=)Wjq?D zHrq-nH0A3;QZ=kAlENkM?h5`ww%If@rOA1vy~3ODeGMhmGv!jJ46t08BgUqs zfyU!n-JPY{=r8P!&YCsO8el_*{W0*ROvxS;RoeHr$NsEphOHt%@?>w#(-|m&If|8R zA*uG+rZm$}IZ|gzT3D@xs*@5Pk*6uM&&U`)kmu4=NR6FSXv%~}F0<=1M`LPA-BFuT zJvU4j}x^E~}TX{!s(<*M7KE7k2Lva4VICxiWjMMQBJCMZmJ{ZuV zxlC%5(S0;FyIC2`MvaFBVUK1Qm{p0Xl+8v}o@>FODnXq;v~_61&B?yfHVc!|RB8xl z?7&dNkxcLQe42A-99F6Yf7o`QK{m!oQ;LVNQ6TfzHunH-R)~YEWjIoMj7Zf)8W4h+ z#3Ym~y$M@wVu`d&a3RoSDJ0M|eir6ROQ^-w;eCQjTwqZSZ3tco($+yq!iq6_XzZc0 za-C`Gn%Ye9jmTT~=m%`XMv>%wWhPqNTkW{ZR(cLuwee!iVQh>|>MT?@vQarFAt14b zH8`)}{CTod@mGTGKPEAtK}-J7vXWbj>Wsms>9b1RqCMU$k|}n>4p_)*vQO@el^!P# z-#u-D)4a_p(QMC>$^6ulWo|m=zPGkjuvaL~e#^Oy4fTZ7=Bb*&f@0o97))V=czmFC zZaQNdJf`qiomce}a(chcca9JxcB9cjI6?S;bz6kDN@aFixo%}Iywck%l`YOX*O`UmpEzu;3bSzFOFl*qcMCoavtjJz zhMXE`?185d%fr3t#GoM$?AvW>qC0X@P~5IrzoX%SB4ZWeM~T~aI)GZFRkk5;wo634 zm#E^PYb;7v$cKQ+>6y17dsg~wZWqeHIUDlOvrJDOBtd^q&Zca7lIgH1!1uJt;!uqT zKH0P(B(l|9?0`%mpkFG~_sZhh*mJL}lbcrMApZSwoHi!YFDTvc@!a;TE?rNR;&GK} z|9W6>jYEh;rN;!?M&d%Z1+)7b*1)aOFGu0-SL3An0*#}DaPuuM**mN!+)zsZw@ppr zM&*ou+bGi60y(g9zcdvhwhN|IfdR2`VH`7KsGmI88pi`^K)JZ;HcFQ}OQo1*(|afu zFttB0M*0DAM1%J|JDJVwS@vl@>SFaZmTTuy(u~=&oS*J2PNd_i)_}!p_kU^ zOoN(w{BVZ{JrU&GFrMpvVJLdviMqiGOp;jOJb0?`F88`Z&K8sw!=w!g)vbY?UYHW3 zRJwIPMPH~Yues8*zn!suU8P)MXGZa^Qq6ByC-rDo>q(qD9gCCWJv#t7F51G;G3Z?h zc@eaUL(b?1QmKj+jJj+ef`xZ#J%}vmg6ry1$J%5kkh3RuD@JnSoEjNiD|(0REO*$L za<3@$twOZ9L?nBOlX6$Ib@!`cPp0DDSn&LI|NpG5fBnn(+MRFy*ROwx-*5hve*ZW6 zUH|Pbzg)ZX+rOHf;rDF1c9)+2>t7*pfy6KW@1OrUVBh@HNdC>&?v4m{xOR{8sLtR1 za)c^=`6WM}yyD-N{CkEPPJa7KByJXK_wWLx?vB3sKYvT#_!0>Ke~Y#qOaYsG^S4)P zcMre$CnV-y;@#Odf4fi5oP9N;-@6ymk4tX+6@6muE+8ZMhkpL;{tUm10|Nc66rfLD ztldM!-~7|sUHvZkb+1jo7+O5Uft@E{87i+gJ*KS>{-MU`8 z^=|Ff`?XtNt=+m=yY*r1_Gp*>UeMo5`g=uxujy|>fBW=zK!1nyH>JNf^mjym$MiP< zVnCh0qrbQGcS3)s^mj&obNXA*-#PtV(BCEfUD4k){k@~V_iMLzM{BoV(BDh?dqsb* z>2E@R2l!8QPpGa5)ia^@C-nY=-k;p8-9DuJeQMJ_wSxxl_CDqBQ@vBXOYj3~(*b?^ zfXcri*df6Vsq7(@JtX)M!KMV8QeUR@jVXO&N_9->8&i7cnDS@zcSL25@kj3-)4MZz zp3xZ0=)D=WZ$|IV=-nCBIivSy^!|+ApHcr#>HRbMJE3<@=>0i8pVIRwJ)crtr}XYA zy|+L)f}hd&o>6*E&vUAOj(6xAb1FLroa&xa-3!WF(AY01Z$Wh|==%%QL*HLenFY$w zSS+Xw7gYB-)pt(mOM1SdzY9uVP#v^nZeLK{7xexGy?=o+ly^z}yQI8J8pBJJN_VqT)#lmE(lZBF9;RZuTb+9A;|jG3@t_1UeMB+&=Q)` z-;Dm|^mj?kdjUM3&>A_Uv3Wyt_lEu-(-5WUZ2x+(MKqMcZRW| zny>MI5j??+(U<46tky?_Gt|Nf+Ca1S6CxDPX@Sw-b1W44&>;{T2uvS2$D|YNnx3!e zZBR`bB}z?S(&y2}i+!q;CUJd&R$ZLXcd%?mKU%x}Bg_u1uk}+x_VpjxN{8CK-(DSAOaQ*`VY12@CuTwo%ufWHS+fnFsCyt*bxzj2_fQyhG9a;IH7tbgpdxVPOAVzUa4=q~4ZkmrXpzaya`3%E% zMih^JfIx>pGGtuR%BCM+G8Wkccz8jBM@U6I+r{4%CJ@b`r`uEN>l+%EODZyYgO*-m zrSZxI!FfY{Kcc=L(ep9=odY#6r!;u9G^tSsXvzVvJ1R&`CdA&QT6fR!3E&`}j*hV= zG4m5l-R=S2=0?zz-<4f-Xe zuc@B*K-YbYFDSr>z|>BV2L74j1E3x=nlPddbD%#)5Km|5z#Ltf^Wfp>8q{_d)bu49 zih<>|Ps4SCd0~QsRj|NT@CF|zI!Z`RCFe(|3ZGn{*ySA7R%#qUk-yuw!yY zv>&Wb@Qo?$_Ea-I4(fJ=4S5&DpXxmWo+V{*~#Lrlu#J!Sw)24i!M1$l+a4zOQeA0d-oIz+9bH^3b5TZgZJ zgS>39D-#EI0A#-8rFMapv;dA#1JACorD2D|;Eq5e=O@4>a55(tjTx|m`hSUjouk7T z%|qV&ra;g$tbGvpbBy{i*2D#VuF$3_*3JU0em4b`#z=ku_wf$%hOq?|x*DenxRg9oT;f*C!zMp%5Sj+n?CqhgFVHeFPH2;{p$%g^!s_soA1R?KNNPr#|nnO(u=wLr(`z?%s; z<5Mbe%9-!bc_!8v{{>zhfyD1(cch=&2bg|L=j1&TUf$^@KqW%Zn*$6iIyPqlL~Wm- zWe3C#&;(F>PHAP%FPSyDL^F7y9^eU_3UiwDfm8kfDEkyl`VD9yD98w?Fu|LrV5o0^ zcT|Az6n$bm#+R4b3@UpPYVegp~R1wJ)FS)eQ0 zH=Q#xh7AYo7m88g-Z?Gj6}dx!-8AoUK6-=D7C8Q~XV@}G{@?(pxeFOc;YYq!53w)Hu6_&MS8 ztsf8-{DNR3Wd0?;_ZR5FbE*))(R2I|O}+h`NX`wtdPVKng%q~?9v`KjS7^|4X7cI# zw|7tQZ~{D}qBk#ixl;$0`th-~N)uSm&hW-tG_e=WjS3o)j zlazf<59jFh6$FJ>)SOoso9B3C7b4i}*ARzZV+EdqSTSaR0|xT$^QOs9$bAW{nt`96 zGWKD=IUV5%ocJX%wls35Ak;(|Zsx$$Yb=yg;39L{^m9!@DAlx!zI_483aJU?>p2e$ zjpN-{GV!}i6R1x#DHwmES$8oi)U6ZV9l@3Y+t2W`AOVuvO8q^7$oche*4DrN4cJgZ z<-0E!1#ce^M>YW^K4d(AZ~(NwL>nf|{mq#uV7~$ioP&a0@P-XSF#^ByhG8JOXS^xC z$9_oTvX51L3RdGn7S$OjDRxY3W$!SOQ!Mfs2;TyQr_3IKT|GmcqkZ~0VfNz^d=RRd zfVmz`7?tpJf~^JfaSgWZnk7jn3~p!%-C#>NM1QU@PZKcbBN9f4Vdvh0)Z&X5z}^W2 zu50KHZZL`%=^0b-_e|}HAROZRQ_$v1P|EWK%He5&4e=5?^#tQ_HDYG@1aD9~XJE@_ zgo88eYKP#p7T~1kX!T?cHUTo_WW)o7PoQI0U=b!XJ;aHDJHseUu#Zka;%E4oKny=Y zL#Gh_rogHxOVJpG>6|m@jrWYlc$&}Nfr|rLprHqhxMQD06na z0|Ro7EsW)8U;_k(i?=ks(mHes+Kdm!AkLV#5%YWRu?WDmxISS9Qc}=i% z&al=l@a_UE_AZv=0rt{kFn}{`%5!2CK@wjw34oll`xcb_ExtlR@adOW!5{-5FV|pW zPBDBJ;8M@fzy;RW48q7ISb(qpGbV&d_}>s!JcsJ=Id(4moReI=K0`kyhpY=?l@E>E z6?6I^l9w#<&4FgnOufhI0%Ct)u>)+;2{8T&`|>`jyC&I`+6v}(b^!!KoA8OlYhD0Q zVNuy*=qHa~uigIUujoHE^$9OLk}VH;L4xoA5ihW7zv78uwhqJh2FlN~IS4oL4|8-F zExed8!v)#_8SiSckI`Yx&MBT~nOuNjI|74x$m|qW9W#0O)ES8Se8#BG%o)VK#Xd#? zUj|=vb|lSdyx4kA5GU%nR%V)Z5=D@Cox0 z*uSROtj{4lUESc#-v{SJX!!~x?gpgel=mL&&`0RkWOM`;ntJ~;+Sq;uKH-qi;_ge{ zNpAg*_{x{)FW3QW9utUG2iJrgN7#jrG2b9*rzDsWDMz*(|WWFlq2(Q(%@i;W3|6M z$F@Q9cf=Y6;Lrm7emCQ-61iaT-!AAIyXfNx+}SSn=PNYm7$j|h?S29U-V6k9e*y)` znjbO=WAO~;2wIubS6E|I_2nyOFXwBw zen^Xv{(guq{E(L?HWa2~*eyp`4bxLzd0abZfO9wpK0xP(HXlF-dj1NHgazjhfB`fB z2P~`+2IGE9ZWYcNI>cll(JW}3f?eJ0bY*vZIf$g8ZOYT8ES^|4s5~&hGub$9Rk#W z^*hXkfrcJYr{2H9J3OtlT&}SB%rT0Wl=qhR80I~um{Z=5k5B`&cF@orL6}CRufUaE zLc@EBR$>)j9D;0sE-o;>$N1tQEr3HTfOkNfmq3h}sHDNqf&7o4!JUB-nDbnK@tt4+ zO+};y7NH@R_}~?ED>uANQJ>yIKeG4=NWpXlRO1vX8kWI9XRd&{7oam27@?O~cIU6S zmoON;0q6oh5PU%;USUvPV&j>@TJr&mo>@IMSD?3GqOj%`S3E@6o|rpg!ijD0lJ#{w zAYgzlMl4NSpl(p0H~4{a^$6&5$dkt`4G${J8r+OG_+eEW>;zDXfeV;mJ37Rg=Apyd zdBY0BLkPD}y39YIX+WV%mT{>3DPi03D)>Wh;=kK%)L-e``}g=M8QZ9 zhI;A^aE7NJSayBMx)7)uAb(t8a_3-*dG`X6joz|ig;jkw7^ewn;}tfiGq8cMgF*!g zGY3=(&_*mETEe<`d=4Ek)pE^dBdU1zh9{4#-&gNg5r!=lOZqi% z`xuMk0(|f#w(bK~!n245MF7a;HPrnJLaN(eK|a9Gdkn(WF-S6q=JYiRKugA7e@iS2 zG!473X+g>#VdsNc_Z5L(F;9UBI0n6VMc;aJ#T1mJ)>9aZ-x9*Sg@yV3do=P#7`Q2B zd4#%%K)->m1G4mi%D8`uwM;|w^)KiFKVSa>Ts(g7LQV1lV*Ot;-~QKNRR4O!`}kjD zINmS=|2Hs3gAs$k{|apRs}TfxB3tzI6R;UCu)fd%=nP)6@lu9ifh4SPBQ{D-z!LzE zAy&_!$h)T9YR*BN-v1v9Z%%(6ntzF-~+Ym|@)oIefVK6o>b-{%m?(9sFo>D~h) zXAmy1)g3HYrOp&=m&FB9j(-6P55*|R$O!w*J{ISU$L2@ibPm?;?(($UdBu{_JKm<> zfw+V6ELa9)d)5VLI&EmrVa~wMYb>`*>}X&A3Mm48^LH2(SeoCV0VgoBzIcsHdbs2V z$Q!hEufN9@^YyPFg0W>9D!3C+*i%M0Ak{lak>C(dAt0Q-1`BnG<;&_hD5YOBk%kHw zNOlOcn*nL}VWB^IkCls#qoUWC_mQw0*kB>hLz2B%u!0G!#fbScn%l`&sA2(H07W=x z#(c^~gEx@tfZegZQAVsZ)2asr;<@CNhB4Cy(z^;4)3SbfhXLoSQW zl7(1-tlOGxjkS7Js1O4^j|R# z3EB(G@eMW+Xm}PEm^%1_oI>G*J#zx>`Xv^{oYh1yP9M>{9IuudT* zU&2-5;w83LY{1MY^A-fy2&8QRCyEnFoiO~At)Xo1Kpm{Sf;f5#5#=48`^#8Jr)pD8>BMF~*JcR$%$TQO+@-S5xSsrfh+RD33ZPSO*tJ%#qO|e2@Je z3i|ihN?Eac#6tyP4aDs==JEmp$^;w8jOo?~2y5pov4OLmg1lj)Ihe8061F|ed!SchO? zjwh_1XKmOeaPI)5?g-t&+Jx`Rb4b$onL)_85@wLe8rIeUODfPMpMFULDXOhQP{N;J z_nSh(zh-$2oayBW&px&hC}U1|_Agn>0e)qlcPc1IAWB`M$ZPBfuScx#1fjrcnu2*< zKu0{CU|qqs{~DUmIS4g&r8&s<)oW@zJdE)3dc>R$2J!laOe{rEY>#`+qv!3oF+xQ8Q9;8XYoyn;3tu1x1F z2%mtRIpB3kWzVh{A3>0@R4(8Z@+EMNb=+8BFF;=3vk`h96bH2P1SIYQSd0%KYS4C^ z0egRfvU4Er8@zA~G@N2z{~-wD3}ZF{~WE`j<7P#m1Wk7@BGdiDVZ8=xAd`{D!ZX`zFg zu@4ROQm}v@Vx0FO#hu{kEw-97(B92&uZun59k#9us1d$|W`y|u+yC`{TD$kV z|M=}c{O&)3L&x}o$S&Asa?BDY1X_4x0kvkJkAPgz*RCNnp287k#12LK*kv%=5W!!< zRdoU5HE+!$cB#TT!+t(HXT0a?q5B4LJm%dVvwe+n*Wg=@7R)k1usR1_0Wn)#v(}9I z{vLeG(KYi2;IvTbK8Wi18`!LYv5X6sEDbR0PCb7ECIsa2J@(RfGnSoSqQTg54w>b^ z57?tiRIr)|a%Kynt!+8k(H1;G;zwIctGQ)_Mu@H3#`Wq?si?6Z$K#vb#`t&0*A^9WtLt z^2>kwC1fO!L>jrxcucE7c^ng(G717sM_ztAA|MtrfJj?%v8IFBXfPhD0_nAXBMuMMYe~A;; zw?H+HUF`#Fx6XJ4V9RCP6#Wp!7w*wFtSJY3gn7Jy`_}}`v!?t*=L(T53JHLs!V0!IVg$T?)Xn-RMKuoVWcouLRTqHZ7@L7#ledLZz4 zpmc{=!gKr_uoKUeFm(aF?+Be8!O*i{*#O=s@3C*c#jdMj6E8Q{t$+_IlP;uZ!x(Lrk7smAfQ#FAy z?JN5DS0onWZAhd@{}hUg3lb> zpZ}BzA@q%`yoUPm9D?Tc6>yh*iy?^2Pgqa{+2c8ZmU$mbaRS7+#(F%2jp-e4Dd^uZ z*7rVqLFW^uWe_(P?6!tQ4q@ejgtprUAD~{sQh*cKA+b}hKsyeJl79OO`uh$2{Ud$* zo4;GTb0rEJ(A7hh)qp*Vo5k9lZ-0YAU;k%lD8MR>@ObCjU*Pp`{uzuNbmmwIZ_v*p zEaDj^`w|=E6evCeJ-^1jHsT~JPtct+;M65-6LV~1=lsN4G%)x_*c}(JJe^*1kAdk} zS#yw^Q|kMjDUQS2?Z1GV0d%AVe?^1Ip-7A`-(t+M6VH-{+!2x_yTA@!Loe)8=^Y&L%nzj zmjBN0{*dN^#s?GdUud-c3y;<>sJ=hsZ`}UfAM=#_3&s!sNK~N0_s}HF9QfuD&Br~I z<{9`ky@j&)MYo# zB6aT`hK*Gh*kmC8iOY?$eBSBT&!{{>j z7yR+pvQmCSRo=rd<`4C7`WM_8jO2eHl%giw8SyUx{+P4>gs1!G+?l)hENlsH*KWU_ z@>Kl;=2lvRqVylF;SWM;y7Rj~1`bRi$DP6-1oFuYURZA~SU>gw>OBZgknc~SlsSgV z@kID6Rz5<85*-_RsX;LUx3&@F@@qEg9Y5_k!g4DGOj&t{C;7*|`z|Q*tQuHo_ z^T|(OGWj)|On!}J^=sL=ehumc$Cx9?@z;C`g%31=$2?~3GAx4=uy|jAn>m2EdNgGR zy)S9knA0DTiT{_UcUzJpyV5hW6PY!y;T0w_64kK8JxbkplxdG}j|dMx1^f`1?pJN< zCfRB;j--*=rfRHcV1aCc)l^jxO&VlIqPooxz_o0y$kL@onlahD#O&|eQM!OL@1atQA*Kzu>N#OQ?- zwrPolyyJ(BwlWrX!Bv~qkQW)5Xu=rQttjV3m7!elPDY)DNwq=(} zs^aFLU@5IDL}RK(qv=!TO345YoQO8V?7ra*k|T^gPUf%+X3%vX4Xg%ly&8jf-YSZp zo(1w}t0=d_pQrK6E*R|B+xU5Ij7ohPo-_jt9B2GO(kp}AQ;ToGY@37Ua^1$ZbwIEs z?o$G!U*R$a!{@TvLs>;A8W5MHUW!X=T1&bEMTNCgn%k#@5ND=SpYJd^nPPa8DOg4#D|iN5!GZ>Z?0|wQ zT>V1u4Ou)g3>D;|J@W%AvgM6SXlMCerpE}sK^ECP$)uD3F3bnb zT+*k)+ZG>kv&ExmRpR|gl?Fv^A>dcYhAc=Ey|~b>M^Su@v}DG`p3y@s^w}0XzrS5; zBK|ry55QoS48qL7_enJ$Q^Df5zshumGCt;heM)%RhvuofRiAL8M~pZu>{uGn4=Qow)~K(_3k1g9V4+!rSn z$Q;gt0J{Fzp17Lh%d-R$e9gvWj-4xwBpfK4ne=_<#IfSA^hA*>-o{yrFQYD6C+ zFSt|bo`t)H+p94Ge+E3KfnL?3t_zT+Mv8(7t*nT|NFZ-6(ZUD@^sxqQk%P!(olp>l zOJTfJ0+I_3_`#GREWiU<;ydDa$o{U7bao(0Di=g_8aSL}iC$fVmC_Tj-13fFv*D;a zkcD^4NT9jlEDkpSq63e*;YE7TvKuh|4CPxK%=;57$iRL{BMoQl>{!mNQ;9d9XhnWP zM6u&M3IH&hZcKe3tGni8Q;LZ3ESIQu(tf%=^ziB-<|SxhA%X*tj)G6gXTICP8HR2)OxEW9&BqK>12cWk!QudAY?k@i1 z&o3_joL7^+FVUEUslCdVlyp=%0g_4@hYUs}_s)DXPV1zbW3qRHK%J~~6JsTZ6Sz8< zmqz2wA_s^~c#Wzsq~Cx^BQJq|8$iC!fKJSzBZ``tBqRDx5LnZXPc^f0D-VzqyPZ}q z!L=PHui~U8PTWdc+CujwFvgv?xnuzp6{DBeN;0_?6-JGb{!3sAoji4D}78e_*EEupk~o&#LL} zJNj~@*2qo*GxoPERLL!d^%HR)xYhgtrFZNm1T6 zfc?G92C?)><{=SuJ*j9ttRW&Yr<4ZtSSNEkmrh`UF+o^7wq6c)?PB@gh~$J%duBt6 zM^mN}2$*I>lD33=^Sj99k%-N+DFm^BGr_pu5UhR}gfPqTQ*`Pl zm`rIzQ2ksP(=jOmX#g3n!7!~cZ!_Z*7}&GR7wGl|xAO*KWJOv>GpKPz*Z}J9#NUwi z^!{j@5CV^(lrI)Yl8T9joeHO6#f^8s&^<%gV#cJ-^3+^;;wDB4q#2ABOrvcpPq#~?v-zKR#%!31_Xv2WsF!~MPS0SAqsC-8ifW!=7I;1u+ z0beD>5-QA}AowMplRWo|B-xwFKEhUnV%}R*MD8O3pdeh3g1q+(@2ZfOf!B$LOP0rI z3bc_;QjRlR=o>m}&Gi#id8*KX6}KGLTAs=tVEDD1;tj67^B8CVXn4eItA$LJ;PUM0 zl&zF2FR5H7{)>n20Ha;&G-L0~9q3wwuwli+sq9qIAUF0M%K94{5*+6RxJ{NJC(p#@>*t zxF9^h;pj36hQMXi=6{S@6Op2V8 z?PQb!V0i`^WN<4EM00>@$YnT~e2eBCRpnJ(OF1T8y~({WeRv8Xs7dvK96n~0rmuor6tX~&qf zfF3QvU@{)3gk!~I2@*f#He z6fWg3s)i9-6LFRjfmx%)a^a$tnRl!`jF=l1Z^1$>F=bQ6bcF-ICA?RVKh;6DC=qxC zOJ-Q3OK8QBu1>M@lcgMaO{Nt?0->L!c_Uwwh8D2S9;vDx6sP9^TA>qbW>#=fcUkz0 z*-QG@M$@-KG$G)W7*K|uF*1!a64g;-fi&>1O#fp27gT3hY4sxk1%Hs^TS5}|SatM3 zFRV%cs8BFsI>5`_F|0eFC*1!+4&4^JGdR^X#vT0q9+RHg@eH40+LU(QppTT$Uq)RSDITIh| z{ScI;Y1B-k6|(6V8jvBC;LqgLk*YC*3&YmX09YP7>qStVY6R@UhTf8#vLf-XfjPui zJ-wMS_zkM*hB9gSGrAQSbZ?X#83I-028*b-#tNG0rV+IWJ%9R~bwvL>3+}-kxGV~0 zfqT-1C$-$Vka5G?9Kdu^FrC7LsC{r+Z>cv0J`?2W=5qw$5%88egJRXvNpf{+wkv)VO@p$-NS@g#mWu1tI#LE{hKg6R2uyAa7SFK z4Eg`<50i^O`Ip#+H{q^OG>{vedAiv7x%vk`VKQ3_EH{lT`uosbtO*Vsx^gzR2deEwOEt6eT;02Em;zS(LX0Qu?jwB&5AXKO?J)7EaN!L*z<&< zQ{bn*H(0KnN?xdzJ?C}k;mV}7$bd)Ho3~`KB!d`8n2o7PR3)2`XP9KQ%yA5GnZQ^w ziJqUO^m2g;&?y|%9iMiXqd78k%b@K5RX3G!YHIHAl9Hgo_1ab=8WCb@nUoPy!19CG z#T3@zFA-ua$k)taS<4LNN`nhAX#Kve{4@Mo5ej;*h^3>9f0HF$IZ@FXz*Ift0-{*C zZY^;8mN|03J5S9ajhsL-9S}POxoeFjSfH|u(557tF#$TmDCU<$5CzNKG6a&wQDPfc zshm%6$&rCr zlxhX7hA0Gn@yC~8#{c!j)gNDmV_4;DJb%#xE>+pn3G2d7czg-^Z51GNsy zM;DiGp$~A_AaWPso!|Z^Q>y+G{S8!fXOTsVb22UHpk}KJ_>hzxOsC!9;_8;WTpq)B zN3+toRS(;4YYiGQ#ttZek`YPG99J(xT`8!1xKKG`-IeGjBvyu%a$|9oQErE9cf9i% zgUj3*OHnW{JK_Z$>u}3T%Wy8&++gjpAezxJb;ekf$$qlT7A;fV6K>jqsioFX!gNg# z7bWxjz?`bhe@1g}nFTAlw*@`ev)FD_6V}kcDoiNfwm^a{OcM<N7C$({e!8{8bZM;0OQl>mW_OM$7*3w-;C6{tdcz2e$qk?T=3W4ZR-* zAuSa8GN(y}7m(YMiiG$DLZ1!`1{oKCMg3$eFDN$QP!-phi(X*ll%s(IUS3bi z`~?QOC)8JAFE5bpBldMAQV243(Cfi1*kY0Q`Hs>N_&kJJwFR3eI$<$8)oBiSuIBlZ(qg{2g5ac+gwn39O9aSzsP5K+P7^ zC%z5K=n<(COos)95IL-PwFF0dfkJ5wXQRFM82EpRHJk?twB>2zKD7G}pQ7lAXPNs! zASkuonNBL5w~lVco_WwCID$L22zJ};5-eHDtV!5GS1<5I7FZuhKy7yNPg4N8nhH}T zy}_ccSwBlq03Qo*`H&EJEk;f>J!O1LO&-%S&63CDugUGMfGQJGL;na{V>@)AW4ZNO*WqT1&~{xtd%p+5o)HKf+I8W_=4gztzQxTcOn ziAOmF@$&?dBvN^iitvN8aL56v3f5s~7z*Gv!^o*i#69X(W+!^1LSr3~ZKY`_;8l&K zP0^XPxWNVp+bfii2)4@FUciAfvbO?mtH?8*z@HjApaW()(hDX2Y@bTLFd`DVa)ZFc zKhFtVq&~K?jRl0J1I7g$RPNID{n?7TZ3;Xc&63=zl z2QmNGi1E~pB^G}W0%ru%;HzJL`&ZD|P)w<`0F#(YIb9e4D7rGdbFe~j*am1QPr~xO z`r|9Sv2TAAG{g^rh6o3io*L%2;oGZk|2Et+G!AtW+7K?j`u0cR_yOO9pFZF;Zdu{w z99e!Jczc2#_{~W@g4rwar=M^LjykGTz~(8 zz4ZZSg?GLVH}tfZ-i&55G)ZW|2aFOOaL~L|-Ltj}ld84bEg#{}29;H|!XFDxqt zrzpp~UHJeUg=#WY7T*!x)W!^FbjD`1IuuoYaMTL0tyRo_#;!x7jAr@3YC7_sM}m`i zSq1@T^=TYXvLYH}V-LTp#^hKi>X54$pmi-zjT*l*PfQ^{rXZ3l%VS{%<+G(th;U+z zuW(#ykic29%6K$#Yq2tzfrg_|d8O(@omdzE=(+-4yW@%sAU%~Ps-c>T$OGnL<*adp z)`k2eA$;tHwb>=K6cc=7Rafl1E%11a3~ff$3I{dr&w8-?^k(mT7TW427^CxB+*?2qt>K1_^K;U5B$mm8^R ztOBw|ieSuQ$%p$qL(Kt|4Ct7J8XuPbEVGdNEf~)Qe(4HI(!`QUryv#Iy+V*h19scf>o1qZ@sQlckEa&kUy6!bAcbuw=tARTNyBqu| zW`#V#=)r*2q zdXn-J(nFVFrcnRmQ?9EnuCv%jZ@;>D@b;_F{P#aL9zxaxBiSM^Dv*H^mvOXyCgi6B zs`>^CmctFE;T?&>J>_p|Y>XWM$jlxnfB0!=-+Kk9a{aQVXo3uc5`&N!SFiVDQ6#M) zWw*#@P+F&y=n$CP<<`sF<6W}}UdV7$aBUcc3-m=Yj00$ttfq=pd@_e>_r@L=h z>7C5wkyzJe)R~7=1&Y2#(4|)RVmE}_BX%J$5I62HQ*UTaUFpx@`BH@a2%t=1{{)C5 zD* zQl18)tI6W{oeA(nM}L=AqvPE=3lyMIDgf6NubLpJDgj}}Ai>Bi5!wg2uY@`nz7!o+ z5JlTb+mlBO@p>fkoic_qv*Tb|A}hb4e$N)u9J0`ssv5CK4S+(V7y$%hqmKrH28p^i z5F_v!O(uODTy*AFc(==98NS#MDoJ<*0}(8^p5QS8GebP*_?35-NI^>`JoW}PebCAW z=+D_L=P`@`Qi7|;C?vwIvw#G_0{MUc=AK`t3<26TOrX0hGpK#*;l6?0e zUYW$o8J~dAGNF*68_6>kr7`Z$1U*PjF`8kSU3&8)&O6|&u4!;mTe^_%sP1%&*$Q@e zi}Xo0VJ+OlkvH>?Pd7ju*`6RJAT_SYLy63|f;~f9T6P{jdy8(*(c}G~6D^;VoL3C& zgckN}Gje*t6Yz(*aYBN3Pa7Jj9qZgAX!JG{x~L4)BZye@BjJc6&JJt*wpS^Ht8SU4 z1FAT|7D_M|QsAW)=GqOcwGHuv$5`knt_+&w4c2%~39g39Sx-{T<$t89yD;xb=3r*7 zSREa(D)GBDN!A4s?MG0Zb}Y`C2~hE-A4`;`9b2-jD>C>RD7HCMtYbbWQqDkC5;i`% zH-rK?ibY%>jKP7F_C^44`}OmA-(k>NLYzskgS?Y-gBFCZT^nOSP)Q&$=4lCQHvc%i zp%Eq)%bjMC064V}vnH92CM{YJlv|YW;02I{1D4;Y6h)||pvE2F zCG=EV8_#F+qh~nV+=(?iVMLi}N}_)aq}8~o3ca(jwDLion9nlYARUcYBxF6}j_xR6 zQzKZB(-~ID2G_U8GEQI+Z6sc@W*cHbLt;(^lGVbS0L(2oM`uI?_|R1(d|{=< zN`8*!80Ip5)gV=gH>jAgCG&hIAqSvtWOI~_h14*WkUY;M{>-W->?O+SN#aAuCG^e; zkzZoI?PyNQEhpKiZqq{Xpv=t&0MZJIAXkK(NAgY%%<}L&Tw=S7fmzVyq*bd3Kxtpz+ z$3pSB<}vd@gg|-*8x=6gDke`Od(bc-$YcjeXF#AVsE?K2U`a5^Wm%zHcb1qS`o1S9 za=Q

0{oIKzj@0(527*Kx;Tri0gz;3DW3>zAh2(4FxoNIVeOUgK>B{(;-B@Z*U!Y z3f{l{CKyHJeKc;+gJ?^rOFeRB3sWRPlO9}>S`AE%0gaaz!k`2T;d!-kd+6yJ={Hl~ z@BogKi`*a;kIYxxj8=>S_Z-`zWNPj`p=CrenHLZ|BVl+Iqp~Vj^{p}_`D4mj7Uh`dsWICc{ z2DnO9EMpGUD-p`R;r137QYT<4Px8;Re2%zx+ESUs*RL$PA7r$<3fPIFkS zH@Lsl3c-M%g08vFV|IT{tJgBc3Zocg3mLL_;p!Np!_8}ri{6)NqW{yuaA`#%MXb-_dm2OFxF`x*3S zV)5P3TwFJ?Ulzc-1?|0Im=~+|;<}3YF+H$HO9baJ@4g5k`?`*K+rznJ0y1O_6WE7f zcknKc&6o-AXOd2SaoxtVXMFYvqF8}Hes2_O5$i2{8gs!vMHoB`<5_yKqc7Y_hRSH+ zA#4CqK(4>V9KLd9Kz1EO^awEo9XProdwHD<84g7Syp zHM7D8kJ<1;!LD+rpQGUK!B+4NX~+Sc*SKjAU_(C|?X;{dQ7Y!&i1(1toD>gyD~3C2 zw&<>oB&%bbQ+aNI4aDJw1y$(ez@4fIX)sxGwgI~bT*I*`+*|1$X(z9Y;9Ej=&uqCA z1}q^`HK6iQibp9vaFVy?KUl~GnKxLr4f|j^8go^N$ zaWpK77V*2orrYaFZ!`w5$;jn7T5S%N8;#9PS_F7_q}_nq4eRNS;eSloQF5EuH|F$f z!W&$|FlJ1REmrM4?OP7aOp0P$-iLV6bZ;S^#Eb-xqMgPh)&mjc8th{i<}k@w zM!ZoWc-I|B$?5a3Odms6$tX_o3ftl_K!2Ff2Sa_#x0ON}s@G9sTukUCa7&Q3pwQ;g zpc6AHC*aVav^#T<1;J#6@F|yMgAvg3-;L}QW?1D`6Ii6XQ8TyY8ECn}YmaC?#Eej8 zOu%5uZS<>@nS|%9Jsxz+WsL;o?kkl0BPE+bDQjTIgjW-z0ey}8H&(d8jDaTG0|tzV z3fF2NSnHg(l1)P>?V;5`#5DcRjCoVmab6zAc#$j!V$!C=(m^YL$qDqsxR()n4k-$% z0N>eQicILRj`Don6T}8sSnqn~faQ9Sq3hT*x(w6+{t#CgfP$r&>mz8@gkb}h3>*bb{mz25t&z-mrr(j#vI(^(Ohbd6e6AjSJggmRQ zy46TXW|~QI)1aWA_Oib$J7o?ubE-6gt%*)MO&1p1G1mttu)_1|!Oss?k6}7@gsuzc zfQ5utmYRX^&{6OFh-FeSnTR>CPHG;LxoeGiPQ)t~jWK+LHDy8@!@gDtcV`%Y&<+t* z>5X7?l#ne7!1|rp*tBOtjSRK!`XiF{fV5d2TmGBjC1l9L1+H9C$_AzijpcPDKBlr8 zxfRRffF(A`xdaj(Ymv(^ajGEjDl%?MGdSqRnE_t&oLlC_#F||p2kv9Q2iXkr&=9Dp zDC#gF>U*YLvlekPBuy$VuD|(>#*J5fedcUiD7ldq%wE zoE0l2Vs=2q352`!k%1+hA$WIQGQlx2HE3SBb|hCht`^F#j`cH^koW2sAuG zc1{OOUS8o zy8_(y%&H0`oiCU|i)d4$_aR3w!u-<;4*g!8`&|fz+DPHQS^U*R(9r4~c5miTrKp>X zh|=IDfN0*?{R>%1%_8phWEE2&tA!y*_b~Hxgy$kyEmvc#n?#ss(Ft#}5Zz%I1EvXg zyDnlGvoRX@RT1;)S*Im)wnpl9$_>1)KHSDcahy|2hQr6NgT|}FM7l2Hh_zL`3v2Qi zygG}vg>m19$M5luM)fI@Y{t=FTSZRd2p;nanLVTTAG?Vf091OrWg_yTofy*$cykwK z-hEiN_oy|zE>v{I@Q=eG#{br_@M+A3XXb7x)_NbFe~)6nUl0&COtDlO^OJ31)|f zMg)Hn`YiV50tI~o#J6?>jb;(2$Lw6eLwftA_d|tF!2-}5g6T>~cwo#6D>D%7Cfp$a|SYq$^o|xE_M+!CZcD1J2U0GxZp{XS5DXXyWBS(UigR0Jz6rJi^7b zTn5Q6^Nh3gdv1)e&dcsdJJ}J>eE&0Iqxd<8@LsLqk?#ArPwd$Ps7TGxWhM(1CmMJn z&w{OV7sj|;>efBRGUPN2;V}yfwLRC?V9b-#FHNg8L>@-|^c4*YPJ5!^KB0P(@a5G` z5Fkfens#8ir$@f7CZ}n z#nu1y1FL=gCBvCx$RF5^enm(VRE|y8H^AE%I#o1-fRfp;_&%(oHA=LW5D}#Ej!AIO zn5-@8v}e+TH{;i?pu0b2B86FVxkYx@zz;YWsd+x=_mW|%;|6*1z@e|=YfeT1AsvpX zDZfI{=u90Tg7^i(BVp#GV8KP=^W9mFdP<$ZKJWzUq89z)gt}yp_;LI>3Ma*I_~l4vI)IBgiBiNKyO?PUpfcFV!5*QMfR+|M_1h z#^{Xd1$!1O)@^2XmJeV-7naz>4Rfzb)L+4;L#l0V>L1FDRKl9gHBMguu>(Am_^Gw~ zW+ZFchSsVe5he$f6Bwae3}dhEWmf}pR9IP=neUi^8%+FGOaqKL#mvoE*b_!Vf=Roh zfUsN0 zdux~t8B(q#biO4fu#H8f8D1{?NcnTC6;CfAf=hQ1#catd9nTGx0Cqnmin`Ft&Q)Vi zxGlWS5ldwOSbjsb9e!u}V?uw=T_Z4B4=F`pI;0*Rh~+u>?}kOQ2CV2Xs`iNFE%!<= z)sBQpYo_(vAp72a;WB+lZvn>T?ydto9L@+f{1=+kFG3Uk)qmu+x9kFR2PU3`%dZlz zzq1B0t7iux=@=xMMgBjz_>(`oxcsxw*U6uS6T&jOD#&QNKD{8~{b1*gfULE~a<-{k z@R&4#uBBB~ten6S2Q{bwL?&t7c;cmbIYI|+!iyDJg5gxmojfK=6K<7PN2>h>mdJ)H z5b>Ni@` z+bMx$JXq$3$aX?huHd_kwVN5Fp)ehb0DmMp0A5(?wHFjHVzg&%F}7~7f@#wr*lX)G zz#$y*-$xN?y>@hdk0(D`BLU#EplO{Lw4o^~hRwvC?!%}vK9n=34^z{u6gegg0kLF+ zgqzgZ6zDjvTxI!SP^c9XJf96c)34~sT#yKQ_r$xlf~Pvr*zh?9z)Vlv6;f@mRym|K z3G{~Cg%(+@E$`4AoY5dK=0;Nyu|s8iAI*PscM+yefw7ywP|I1+3G+JTWkx`jqj_5N z=R-qL71;+6vB;lH@mX?6^DSmUW!;v}K_Ny6I(xM8x#HG8vpjw9AcnArB_FfyoMfrBQL|Hkh?*l$zX0%Z-~1z!P@X zXXL*JR@PJ+ce7Fk+TNYR%v{1-TAN0S3cX2X8Ne6X1T%f6o*%|hM(3|FohCOC!gRlf z=Fv?CjTk9lvMpUP;waYc)|#`gBurj53N2HkmB2EjPaTLSZpdmZ4stO?&Wzhr3Z?Wi z4lpTpIPW>u*?@0zU{re(8Sz*KE5gthEoICKieK)~JKuBn1mMA(zBmHA?3gMUHb8~s zZJ2tSFln%TL2;?hG=!hEf-z2jqDo-81A==;w>6zX1eO*Hqt&P+jbcGX%JhGhX|AL5 z#biXJ^uWa1_^i)bq>y#O7_^cc9cEwgFnD)y<;?;h9D~_v^+jq!1B&Kg5hXfyLBdLd z^4%jZ4&X(_hIEj}K|3>JGbv+)GVz3K2U4aCj4}8_TZkg}ZZAioR%3y4>3h&5_p}|n z!#$@kzW2x$Ba$l>H&9RgD4GdjNCN0btJ>#6Dv$R($^`9h*(xpIP|mTqAwwg{|& zrIO-2wjlT=5+oUndeSrSB98qT3{fHz+Ta$+>F)th5CKH5lVAZ|rxt(?3jr$-@cc1w zKsqU7n7IV1*Kywv%)Kx_f^*ajmi+#d83NoL%n;gX1vu1MidQSqb@tne+Ay>I5%>beL7<{NgFlF`v3S6F6Bt1?Be`EF1jy?Ms~2e7#O;{9Z-46={e<{8YHE)se6J)4i^1srC$v*E z?vq252LKfm_&cy}C})vS9w9+p%y0raAA0#H{G0@zE;tYbxSaJl>Vr;-| zl2}W7H>Axh1cCO<&90JcL&h9NT?%`uvAVRI24NKpx#4MSkhmchabu9*020-w|+ zfHPzAm=@_i*Ugk`7vAvnbCd!`Oph^|>t^%91$sCQ3-oeNI1)bL#u{c;cBYi_KyBF) z9XrZltF#%gBrUZ-)NoQEOOC-396^95x_CvDWR*z(q&fi|yJ3*0l)5Ewn#g*+XNRO` zC`OF`9i!1%2HMC7M%a;VoweX`;|4mV!u=>PVFnk1$RuE&=Xag7g~*n4G>uhT%-65tF--gg+;`_u$T$O$#eBgxsE;VIgHF(1BEukV)p(Ayp#$GRpw%)L0-~MxWoqvA&O*s4O@cEk0$;Ai!2cBek z`XR1*WMkSVA;z~l>WYj1+ zggLNAm=ow|EmX{ZQ__j=u;$A5KMwc&c`Vh5GG}$4UJ;T2^t|~{wiO9D;un2!arIxm z{^P6AR{wm!k)*tDe@H%FaGZfL3_>gOwg$gRFn8zY%G?Gt0KC`{XJj88dYnkKLM`-V z(H4tTd59JyE;WLskSf%f(Z-pBhaeJz0r`UIUwYS@@;5Z4yZAK z;gksHqkFvjU+4)3>%&_P)@t+gOCv;N>6u0pfb~hGq^2Sez+?fiN_ynT2A7ZVDYWM-@h*1;iM$c!mD+2Sa(XZIz0G(a^mAma2Y1~> z>~|oR1Fx6EJ(=9~(SljH-6>-6z{#gKj2~jEbSoyz;Dzp^yIL|DwZ4>j?HEog^m(me zOO!jMxJJb(je&QVJ4I*FCpx&2C?Fe{9CnoY6qM2BjCQfRnPVHPtw0s7`R_=VZLOfo zylbIsmY6Cd3Zr#xphq{g#1H@_{al>0hPR(AIK>zqfxS|FZ()C{^QRKkASA#^zQd*9 z(BgWoSk|l5>d7_B8tD$hFuAw-0~Qx%_cW60$Eq0ZUqm0BmtiXG3Tv}sSj2J!ALCSG zHR6izh`biOPlB1SV`6?E-LbCOJLbSXehBc+Qw}X;11zePe`vG=OY6NX!x~s ziwy49x-%f=%R~sJCUkVLeuD`Mdj$Y96{BKJ(%=kJ@!gMre>nzU2;n3ib!U-Zsu42% zT050$IRn`ic05}0;?2NSqP$ta(`&3k^M0zTdqqm~g31A}BiNft7k&%UP9Em`f^t;?v(Hm^3 zag<1FkucUv$Ni2n;=tFB5r@DmvqT^wI75!s81ZYvU2Z9hOsEi$vlLVQTbjYz3Zuh@ zVJusMRh=8PAZw47vSp4oM@hXzqDM)5gchl(kdphArnX*!0OmZMolj~Ol=K;a&`FPD>SN``PX$q^Y3+T;9|op1;A3FmVK zVq7CpN)K4XNiN3#Lz?CflUX6?NH>2Rg}$NlYt-;^<4$wLGz^ltO4HLzn#C!QlPa5q zYA-O+CnoR|H$<_hr@8;gFXm*O7-__rf-~Aes4G!+O)YH8EGb1+o-+BN*4-}XV^%jE zm;)VdG*)=fu~cY(2()W?n`aCX<^xvWWLOBNxn&!ggbDy1BBO%iyf-TkfUibgjd5Fb z@Kw5LE{u&Mg7k=ZnU7*7gk-^>hZ{&+oHl}_tQn)(t=2_g(P~+1WQCTQjZw<;=FaJi9c2V}VB)cUEU~jmP08ehYHwlTg;n#u#%D;WvWM#-tIKlWB|;(HcpQWDNI(js?&S#>U14O_KP)7_RwYMaS*9$;@<`Y0lc+Q#m zEBD^H)kW(hFgk&<;k?4M0|)~p(S)8pfBU5sGQdJq<(5k@z=>chbML~4)b9R+*Gb%? zCwX>{vff);g<41%N@S&qL2jgxWB~^N9OY2hf?KXIY=##IM`~a`4MxX=wMN5K#K|~$ z&^?KfKm?=JLE%m8uqY1ViUeTy?(M+N3wu0sO)IS57Hx7w#vDf@f>_Upmx0bbgo%H- zbW+3qpbIAi>5BiB^uYJymgB5&RTq%vK|2dUwNKr`^^=$h^$A=OPDl~UIXexP2Z@}7 zBVa){pc&hK2grb7dN3>lOQa+3qAb(`ZqY=iSPdLr_e3GBZV<}G5^GeJNM5Azz{x!} zJLXv~+jLtf>@y zL~|wvD20`r;4_cF72v`G<|La;g|FRDgG}*t?WtbDLR>YjD`CT}nzN1aOpdLw%>+gELeYnvG0s%#V)3ybUSDqoSCB$e2_k0hArW==6fgKqAx}^QvgC zmJw6G=DGcD>t=j(L<(R3$Rh0y8qahog|0W0C0b!F-dVT^7`!L$dE~z{RG1Ps>5hq& zP9{};vW*LLdvVoTXfGYkK~sDC6Kp49$_;YAD3=#k70~%ruP?I)Vq5E@A)5<^_#PQ~ zhj?5uLGCdei=77f{^D|rNr$)GgV-H0Uk`?)%r3=(Und4C5P0~$x4C>QR=J3PyCi}u zrAKuqoP9URa~}$7b#H*j>FX^QR9KuH3aWtkdJE7$L67gu#o@6%0f83$V}!es!sqG2 z>lvanI|&{+Sbxfv?Tfgn)=z?~;vYg)L0Y+}J_7^JwMDoby=uw?oF)k;0Pql;G9OQ$zrIEp=l6zg!TFo7|;`ryf2g^M8;x%0&u zB4_JBd+$fQLJ4;MMtQmS^lgm7eMarQgzf=k3$B8Vg=|6;;3LZz_KWx}$w31gotyZ7 z!fQmsYwF@t;9wCnC_4&&3T*T!<~D!;;i;V75F~}(m2iH>hGeHVYwZva^zbT|dstVZ z;>?<7K@}6@Ws7n9Vnh(sm}SoZ><)1kiDzU<-0H-<;Z5t%1i8M!zQOn4%5*h{2N8}4 z^4h&zC=tb+{Yb9_f={v&4&29gLoKlF-VCT5x(hv*x!d1=z^a+h`~#^KM`m+7hcVb` zP!++V3HDcTNeDXw3kRDP5I%gdien6N&nY>p_BGFkx^wzX7rHV$vWChxupkNwXO~1F zaz=Krb_c6s0K@MnhM1qezPN0|1a3(Z`3MQTK;tfPJX)xLE2bI|j}#?&aQ8`xn=+bV$;i zA@!_r06zjh$Y4wiZi{PyV>a%~kZt*DB_EMEID4I+eoNT~=ouUzR77fasJ5Ja(RWKW zU}-O|PhWU-hd7(>j3Xu~3^jVa4c}g6MvGedb1SFfxDK5adaWgHbp*QV$STR8MmDkx zEYGida-Rg51$m25)sq1LF3iN#$1UB1jR@rp4#&XWgp9e9ERT};!fj`Wf>2?tAT_UaV*#9^D%dDjsS02UwiWUEnyEuP>GXntGa7zp zc23Goii|gzb+XN3rcF$$ghHzuQkv2*t*@K(TqR6(%Y{61jT>}_=oq=#z88vwAdFTi zw`nB42f_INe)>-r5B~d)|BrC^w?7Vt&z@gA_<#QSc^EQ(`5!+E|Nrk_{htUI*3S#l zrSkGga2Z&SR|z+~O1Qz*)}j5wzf1Tc-0bSV{qFA&6_ijryv49DP_a`c?;iN`*iGroJy z=Q)Pf@O$393inRlKM%LKe)sDA^Dq=kzPoz=Jgls647Ll$HOJr-hGVc~uft~^`u;g0 z;QjN`AHuQ^Kh&We;m^Pw!+nDv#h*82{L}G=H@Ql8G&miIq^>$XuL%lXWxhyO_}PMW znaxh$Jr6IwR?w`C3-0`N72b^n@#fZJXipkicX1s)6C@0GTZjL=dll}%AHFL~E-ZVF zTZHs=IMR;IJBn!TXzf+K=I7ehG_>!!I=$qj54>TJZ{bnlt2eZ*@QDSl8}94t1)YRs zW^AsT*pzQ^;TgO0a5VPSwj7IoFOZXF1 z?Dgq&#Ved%A6H0zLbTziGFyko1a0mO-ZZS`H&gDh^4M|=PU|&2oy0#Cf5JqIf719T zi+}3)=X}a=@d1BS`;@*q{k#EZ!PKYV`4Z36(ma4@r#G@pki_`zCH_~x@m!;{NRHls zBH|OQCGFi{0fK~V8M61vM(71-l;}!=w%wUpsx^BscmytnA>Q=CdRPj-03h>-1Y5cX znIG`bZz3qqrECh5V}G^WIP_^)hgyxrK)1ez{W}8MZ^5~4fM|~(-nFT;oLJ+mo?c^& z2iX8|>NS8T)HFy!1x1R>NUr*s@VcP&dz9}Y@8Y$gcL!|QLCl(g9?ZzYR2<|y0GNin%|EwW!WnDTr#Kh#Yy84xrJF;#H{6C$kO>m%s2@DY2y8stoH-i zGDlqICY9zxN)G@~j+2;TJr2YpOFZ%($LK)641lIv?F5bwa@eF(+|^J~fH84op0XA) zMk_(XmNKg<;vG48(>aD;6Fr6Qy zhLzaax*%p$kQ99+23lLhtxVzw!5|~>+Jg1eti~fHY>&iJE0omRFMBH{{eq7S1)0KK z+|4^>uqR$-LC@Yu`Hz${hebuSl-hN4j4AqE(2+>>p z40DrtCaLEs3vAR*S~H8{17}6>8^}2=&fPq?Jx1K_lyKFjH#a zq{<3Okn>8!HP+{YL(DIbQ7hy{@Qm!A4XFOiOE!M)TnFLGAv@4DgQ!_pNk@X?kjjAM! z>Bc3rAYzvXQE>J4*D%ulB9=fvYOKgqSWym3{y7Hrw3T!kCnLcH4H&|SJ)_)5osLzy z3zBkB5noqPANM8#W=7jsp*-SHJkvP%g+lDp;89Zq;?vlMqKZW(5MW4!)JVpgPImZ0 z5-XNF;%E_6;8mKu{j~svk)(w}AvY2k+M6>M(R`IO**8LAgxg(*Z$ht3dXpV81Zpd* zVu`xGRW@ab+EXAc!mFQ!3CB%zmAuVyjCozTI+nm>7HegOY5xpkrS_3Kvvoll$HZYH zQaUgWBSu)I62L||x?>r)NQpB{xd5vaKd?W*!-R-$*9^X9ZWA%J0ZWRQzek)C*I~j^ zNjn5657?kVCW1SUQPZc_2YUynhy{(a_h59VEAmBmwd773#>D#wn_(tKn<4@xVEdei z%Dd;x(`SU~JQ>t{oD4bJ4#LY=E6)%z&)n8g27)_=ywMFc$9482#!R?lqc@%E?}K5( zkx2=to9J`w7Dh7@=Pf|KC1 zAqOi?fGCGIp3178@zui(8m&BnORseTJKbht7L7jj>!x!4lwOFy9OCzc^-r(YjuA_T z3zH@a?j~Agz1OcrMkw>*<7b*0nll6Z*owp_HTK3%as>Gl=>c;Hx^`y9Ad75vYsR@2 zap@UW%v|vthpK06`bmJl=I4|rp-*2E=-XhFOzxsitZ8C0Z8&>lss(F#TUc!h&QvMJ z?u_2L?kf902KZ~B-qTBf>6at8nQ%tR1FsTa6SOHG9dddj?S04{43W4_Q={A3$=VD~v)51-Pj8sG=fT)|O)rWc1qGJV zDpo3b-HXY^B`zU?Wwyi+amuR$#ra!4_P#@&obwQ1adF!F=N)|Zm%f4n@{AD!T^U*p~z@-ajYsDO8wq+I5&zp6zZE&zwo| z=)i<=Xa2n`JR)XFF(lgf06FAJW*8BEgXfg7vD?z$yJ4=11)KlqBeWFrB1!vEZT+c)myH6aXg+s=jrDg*`#T!7yfP#Awb3 z(_H6t(m5r_y33s;gxT2gdc*Q8S22QvV+5_Q<=V+YpTv_E1YvJXNOBmrXB>vG%)E`N z5Ol*rm)NTZEjU^Ba8wp58S_SuTjv^YL@Dc$*lVsO%ZYgqvzPb5+UR)DfIyzvNZ8n?h_MwQX43jlzNYB#jH$t8Tup> zGj5SOmm8>DM9oH&37{dsY#7_z&*5NyB~&7M>7Lbbc`eam{#U#lYjTYetZ^tt^i%=Q zcQ!3fiV(JD13jadO~-Q+3n&L}IDR}vq6RJ+)HKlM2OBwSs>mYNr1}L;D0M9+@?DE{ zm~5-PqT;n1Sm&w}@DkJ9!M~1SieM-KVi|KtqG+j@`+nXj$->mll+BGn7Ho)Js_P`r zsN*AIs}fDDKxW3$)EmO7iJoJA9CYtjK5-R&I*7KU>r|?-(@V}qod*?C#jplCt;UjVdHq77>d#=FpJyXmYNC$Hl@Z<2dlxfIK_0aCP0S46>@ zD_9GUV>qS??_M2kydm`%<~b7;KF}?IQs>m8^x?Z#5A8}a2%mBT15rSNQ^>n3>R_wG4*%KC^utKYBmIG7oq-p&RnK)kueEAD%6P zHwIG%3=y6jWPhrc)i`*iqfTk|TcdWleuLTn$HLF7|Lgi34a1NMLOlkkj#_)OhC%3- z$?(slMKtlf@g9xLd8=KMVHre(VYYk2F{RYvwTFa8VfQa z#!8ivM-0 zqAX)LJl)yYfv+6uOxOJMX0NjK0!FRLVtdL*9t9vOGHt)BTN*~WIU|x0IAE!5&T=nO zB_OyQY+|W{QYkO0=)SDa>$ayQ*?F)X!O}?+Z-I`Q?TEv9)T;Ob;ucJf#txcTOkv!I z_)4^BO5%K^r8QPUm@mfALq{bSmmlRWwU?^-fklJpdjC8Oeyz&Owak*J8{LjE7w4;# zfVW=SMVakw+b+s)vc?bY-dG4DOdAzvVpoS_t4rU>vOl!X!sEQ*R>8Ln!sco?`-SeE z3dQWkk?gdSo?`UgK|#L*A#LjOctkzY=`COvPzqoIYo9TPibxl~$JmRR$)-2IT5!1K z@RWlbj}?b42X%6k0X*d$`Z*jybiz@Pg8BOHxt{Iw(O-jc5VVc}7=F{48Pdf+L;N#e ze88X3k`FvpM`{sWthL9D$JFD>W8-n_Q3^>Cwd29#Gmo9edm4~LqmN18AL%2yf#HRH z(o>I_v8u)bAE`nmCQr32mgyv}cWuj-_)^eWhB_q-Ccc{O;uK|6i$;@Qh4znLM( zyc*8JE4B&G-~;~nt^F<0qzdHV@;-4x0=~3>QU>kkzC}`Jetd-`*${VDSP?BqB7kcSy&4jgfUgk!P z88eJy?U861Azi&L};4!Sq(qrwh(ymA#7jjh<@8DCa$XDs* z#6-lU*Fx_#JZpdMqgCU@LwuOGYixAm?HX^_NL^{{md0xbhp>rcold$+7aat-KAop_ zc4rq)nq1S9&!3vJ>HNrJ=5g{E1mKMMb=}259&FO!se}DE*rdVd3_f9q)S)3hXk83eVI{_MFqs&*=8z<74*ZdH72ywa6t zi^gw&Q@ZayM}q-R_iS0LqEV$VujS_?0;sNCbZMtg@&5Ty>DwxxR~|Euk^5CU>;0yP zzO(CqK;(NR(R)~FSE;yA=1Y|xQ>RYq{VPYMaypLwIuvKyIoz|;j!yih`c5ar$(PzT zpOtD(voO9B+qS+$0h}?Z22~T)OEiH!2Cs!?pnJTswiySHh2KB&qSiO?>((c~SKbbO z)14oh_rr}JL0#l8S2eNi_ zbtYmPO|+h>=wYz%B#?!VaTuwL<1BVvhf8W@1?}jfGj4D}EbC<+XJ_f>Ud#BUwroVe z)NG|^I%{4s1FGUIe&`Re$MCB+053Y@aS-z!R5-h?q* zDTkuasay$_f~1S$B8h*r+$T-#Nz>p}Y4e*%=p1YwCSq*Zxd+Y^Ke%v?M+_~zj5nC0 zFN#~G-#^8tyh#w{wmLaK3e8?dqbn`r+>5$5s^-KAP-*nQk3I`qcuL+y;G)ch*o!z{ zn^ch6E2+QKI7z!K-W=SiIzthJN25OV{c^e|%!1r9G0dpp?2<>>9+|MbL48(6(fXPd ze1M#MlW3t*f#4+q_a*DKI5#JWlfAXWwK|Bx)!rx!h5r8OCHDDCxig%e1%}>+RcwBaPV9qmB>HFmM%o!QhU3X zPVoNunm)yz8=`0SCWfeb`?}Q25jC$xS(&h%-po$FyN|JlGn!G$AB|_$I#vfi_YuU0 zRG>y&c-%$pSe;!yB}gxj(4%YozOBx#vP4t#R502>370nNm`WswN;W9vqSRN;HL7ZV zD66x>Rw81$vq&SY;ds7vtoMt>fpMa9U(7^%!4xIwTJ8MY#q%}sj zIyZ#7f2XchEa!_xPfYNyC_aTy(*BCkPE8N%#LWr?w- zw02s&G^~@l+A%4LvkQ6fOqHDm)JwP(@1AG6yShUURxUxHA2m`AuJl8M5vwzDql{zwiO^$Osps|AOa{M41xy9GI_imJch(Kcl{F$M z2H(oF^O0z2BHMMVI~x<^S*87udRHHc`L#NCIQC-d>@1yVjrSazv!paWxrz2{SWLBm zCG80_Xo~3^Qw;mV^C4;I^fE&tMV!o;*N>_df>TTVX9QL1nC_z8@5D*$w)J;#_l-zk zv~g+yvS+Cff`R(Tz%DNOI9@6`MDJJsI(IN9&vmg}?eQ-@9&w{fV6yH{p2%zo1g zP3*`}-I4xsOK$bXOl~S)ZH*(rtT>WxRKx$Pp_1nC)&@%Ix+5x-k^@v+d0Mg4eUYT7up&{{~Mb#0zFJx{{o zmL%?NtQAgzD|OdePA)m`F|9}_#XV5Gdnm%;5fseQiu0CFO06GHLo4ftKfbt3Vc`fK zlU%(W*<=Y`A{k5tjm-% zPCRo(wpdC%?20P(tKwmp&+ZO#T$0EA*q!*7+!JzX( ze6FmMLLb!>7##St1O^)|Jx_s{h6)keY$SigT6WTMf z!iJ-iLiiNaI>}ZQSB5ilHW993!8}-=-*g;$QeOUNA-&Es2`PS4#&3Ys;tj&_1CHU` z5BP;S^7b1*jd*<#|1|N>;Gb|=n6}=i;p`!PCijrb8xG;ji|anVWgl;90}6=^U(1g9 zI$oE?KZUJicLUzMpGnl+GHt1uQ8VS&Fzyl(_V*0&mV~sLweujS#`HjhYj24k_Kq6d zvCUn;GLd2H;4@V+)2^PdPmDdnI^H9mPQQT;(32gpbw6-;<=e1cE;DL}vCHK6 zA;Ejdr>xALSv=6F5!Up;WUJlNlw`<+#E2B?@5fXdcuJ~d&4Q>X|5oP;CkSa9Yu;=k zv61@UrfW>4s^d45O+aMahUKuaVDA)jX-V?lkb^MAdYBc&=mq|1BSF4(yBar?dC*y4 zm6X4n5@-YKf2==dybuCgrU}&^Y6{S8;SKJY@BLtnSaX>vB?Wc8pen|JNOb3>oe-%z zIMgRx_*4hQboq!Q&FB@DIQVM zbtfkGfnM8^g_MOG5PkZ4=;z!EN@z_A&XMX7H38HklW(MNRv5A;0_qQ1GBUgI2}TYp zcj2DLB$w>iVW(A^7mr8^A!lF@)v%8lmtj5xYm19czb@pfeU6{x z6gye*U1RF(8*^UCgWW<5+)~tkgF;=VrXN$}kcqLR)?-D|*6D>YhA$`<2=keGKr8rz zE2_&aO(J71rWB}dv5W7>3!7Rik5Z5XtGR+RvW6p=ggHwe|D3kIAPT`^fwp?5&BZZH zVz}P$THgH_6@~8WgC@NmzDsCj0;1p>65v`=&xRfBx8DvDv%etac4Z;iOuPCEhLq3Y z4E%-D7m^80@;zE>A@t>vJlQ2l;A_&4=Tt!g>k;NkPRWQP4WA*Kw@9^=?Tqv7My?6| z$romtKruc2(qv+^S1#v}MsB%$ZE>~H02Be=ndJXH^+z_AS6QZxIRjZ(Yb4d2!?1BD zNphaUmENA6cS)q)#d07&L*@KTv-D@wu|dVbRWB_VF}(lr#bwK0RwQ4nS+Ps^l}_DN z4-KAZC73_fTwFdSVTx_4mSmXx*S~%N^_?+g>26H#X3}L`nlSb`)T_kZPn>?4cN$RR zY=_gy0{>G?2<54DvtdY~b9xS?yj^7R5{h<0#g%RNfr|3Kh?EJeqWD0HW0OEvVPAC| zS`s&!=^>LB0iN@i6`Uq=3tFW39p*~T#yxqErw?{b95(qQ@GCI3GIFJtNUx=3RB&0A zuu^s|hZdI9vL9mMlp&T_K!Vq%fXnasq>qI>sMpNS;opO7en=Ma8hFVEcg}^|O81gm{2{#T)!GNFc<-*4JkOQ{ZacM%ylza7CB=`IGVHOqGJ15EFXQjk z#pM*kqevCPo#QoM1_I+iK#mWcl>{#+QJKirx#^+S$Xu`~Ae{*R1OSVv1 zQuleLv#D3KjLgDMlXKM+7&3N{wr8KmAG`P`xNCiUpItOQF}y=>UpFyhprJs($V3}x zYsO6Jf~9cTVv$zx0n_SyWWd z*$_UZk1`%m#SDc{5&b#cH(O^1Vtva=Gx?uuH+-RnSq}B;9@{x5lW`so@wM2;nK^TW zHI=uUQcW<(uFLi>5Q)^JCHY_r|7<+Zy)-Tbc1_t(DsteA8l69qhW7TSu~~8W5Y7et zn1t`cj1TvJgc8_S0*_@GA4?MK(uqK|ThB+Py`?@?&Xs)-Q�UQ>nrmR8BBoq==7< zmhdm*e@Ny-wpED8B=cx~PQSEL8uhw&s*uyq-oE5y+$eT+XhKUM7&7|UdBgJDIT*vG zi^$JeSPjOtH81Da>j=wv-zI~$;o*Mf9 zr8z$Eh3GWG5Nb^-iBcn_rIf@T3g8?pfvZ6`I$`Vhjh#w)q|?ty9%bj{3^TYI=8MY> zp685AcuXP|1xK0BHRZAz4m-C=yBpQkUobLmL(J0)wnp#Ki95@p)F?s3*^IY1$QndQ z%~pi@3gi8&ioGk*m=F~=X4Q={dOs=RYDP6|u<*ZtbX(?k7gt9%WDhEr-LzkjsEx(l zknWkXhsfzgr=on}Yg0otP&^m}`aO`&SBT8h?`_WS8Nk}E8qJmUzMUutg@D+8^YnXs z0!oXVUeL)@VJa!aRj^FwI~k%R!kVn}23TcdF-yku2#53Zl|hRa*eIbxgPsF}`pOb# zIXsCUThxb#z5i8(B>alP^*;`c=NMW*asSPo?F3f)0^PrJLjRt)-jZ~NjoZ^;sijPY zjz@LAdte>fl~%L4EoaK#kMjw-wXki^M`eKi8D9^Mg6B+8-VV45Tv6Cd$W#>ee z-m!Fs^#FjcD+}H5jC(4oonC+{V5Obtxzh_wXf`Wt*y{Q!eCh9B+3Pw5FC6$6Ec(u9d@@5}@3-KIB#38`wDe0Oui2d_$!Af-9JrYls!`$3J}k5QOw+ zZxENj4Rjx1JCO%pGeB>~8sSJ%KylPJ(6ka2;(N%=KwrLPupHulVE{b>!+!PZ0kTVzM)7^XeK#YSg_7sWUKsl7zjJreA$5zi@KZGhu z-JTUmVGsbCJ*2`7miLOAlfC4Y5JVF0F%j`AEIXEad%_h9L*w!1%=G<|D-t*m3N#&J zJNn0{-1L~BHQkYkL`;dbgs;QuECao&Hs$9i0Q0Q|<^_863Z2}8xrkCG@9>mAj^LFV z!BRRz_dmaXD0)ZU9qOllj>98*elU-3o-rBzSI6?QAiEWNM7;p7{|0N|Cz!!|FM%^K zjrTb+X5Mk<8l=IV;NvcLALPEHBt*y`nESV=(*V#8#dOHY zlaCEw9w{C7xFa@D>yN)VBJ}qgU}g^)U;R6Bz~4i)MtJ>++?T(j*7G}hmVQUA2WA!-!rccK>Ww%8}ut2x5ELj+Yu8ga4V>5zo&cp z_YD5{JzYP@8=oT8@*$IjfB9Iej5XD;Z2}hl2{JB@pn`l3#o`e}=c^s&2_tg|ZoLz1 zto@E4)witUjGP(V;N7>+z(M~toc(SOGlI;DBb2y&2T=7PK0ZSZ%{$!n*%NN6i4vFi z;T@*@74G#dh!dGr(1_q8KB5kLgk;xelKF5@AYE}+n;`xY>-ja}03L8O6X2jX?POy5_Ps;%tY1Ox zdwU`y<0w(C#W4pIkl_=|?{|Sfx8I7(9g_Re&UhvM1qOsnjL+X5394oFo-gQF2Ux}Q z8D)R4N->ljZ14ICi|8Te>a}(~7A}arGXGfMa%>y%ApEIrpkTrm_tA-pQD!O zA$HE$4O$YT6`n9$61?jzbpLlwf_=x(?{`p0{`EEWEl{!wHa=21CVb{E89tvpAqa{T zgOC6E{24VWRI@t?9N@)k)+9wG-Unb!Z&2*w3Aab!wl|Ov-|T^Qm>>KI)c)jaMfT6} zEZ|zu$-fDl3&v5!@MZ)NGl=2%fp^M!Nj}012543%jLtq0PhsiA*N4v-md!wUoc|RBaX8^)!3E#3@>oafIHuPr%S59 zA-6yNU$6N(^ogGE885j)?(wO|-chWgcKJ0m&F9M0eZm{Ppl4xDm-Z7V$cSJ6)35&Y zYxe1w`3BsmOFAa9)qX%?A1z=WgJS)V;o(^RR8y0`X6DoXIAO5K?_lTr2I}r_PRMe9 z%ZPNE3%{j}t>bTC8vQ^FU+N;z(?814{(<<}F=T;?Ui_8}=eK;p-?o1ARNw&3_g7kS zhonk>cu0LX!xCe}BMAQxmp><(`>~{I4h!Kq0qX}yVSEhjJG?X$+ap@|$BAa_e;l{& zTqENTcGkXB@gL}8DrvWt4AJ?`x3tLTjI%fqoBAcR9_B;_#&JSzC-ebT*gnTVeF;tU zkdVA=^+Of3`6Uc9Zu@f&s@egF1oao8sDZm-UVp>hi_r$RdU%wMOgnAVQifkCAxL>!WRUWC+ zztUqAjL#4a1mQknFxMdh_<>ZMF#Hd}dk87`5n?k~FKM?5;2V>-0`t^QC>i8Xn zFa$is{1g8F^hBn~x5vb1e#dN%-!Z~8VVv(nW+6avc&JEODhj;znCCy|`7ikYJz72| z{N^d+^WMHqT0goeZvXBkZQa!opBSg|JEmFEnn9WD~1FeJ!bF__B8o82WOe@GXUfv zBg>ewL$3ME@j;ImgY)Q+cL4%{1hZq__8yn&BarmJpTkKS_=Q6LLht_c-~RMpvFf2T zfdOD#l`(=q-QQx24`0*z|KVw(_^anIIpGErD8S%FmL7kHg?EBI-~y}qfmlI80~rS5 zYnj}?fqol~j1T;QHZ2&?58nz}Afx8``i;Ixm|^5gQAy#qQqI{U1~WE@4}8e#HxD5c z+sS_kuMgPx;~dO->s5IDJJ(Afn$!dV86UrrA%emXL90QP4{R6vv4CiL@al7_uVEaX zv+m#ngv`8p>PS+y0>lhcg!rUz1l9fks{H{}8x~_pJdQWkTq4gV+~u(XnFxL1=`Z>8kNb7Sd%|GF=Zf6>4YJP zWA_*cpJR0udBx%_R=^tW#>lH2bCjf@WtTH812?e~eAeKqaC@zUG# z+Y#HVn+4l(xa3DS6P&=$?{8LYKipJmZwG9@zwNs1xjl0`RC|-TE!>uFYux|#g6E^f zbEdenTRuNLhu??(blu|onSY=9_spL&+=*?*_XtNmH@j)V@7uQ@lGwb*x8bQ{xAF4_ zwxgSM7@Rzu$mV-Ug}I**KHhfRqEGYNi<_xh_HFKWS@`^g`?B!w3%|p{W4s9O@WE~T zjNc1iU$E~#x+(EQwhgEAd(hBL6{Zzm`ev0cDsSKGq=SUt`cglt^`WNH>_ z3N@vgN=>b1%_fWho35G)XED zv0J_beofTus{ui;eUtE!lY@5Vws2dzt$BVE&*!8zCgk<)h~KZnLpyHuJtyn7qw8)v znsl~TZa=Uc;r!dK`V-p5?HUX2wtIWV^Sif~=nvbqT3*+S*J&`qXIYe_R=k{^8|$+acnO9E@;uGOR*Br3j2H^>O~8x#Ypjf zmmcfOa6gRED2zpq?S$u#_-<%tZZr001m?wdv1#>t<x)UnXul`Ndat>7kG19Y zQY}_~5MWdG?SrTALwIL!p%1$3LwLmtecb2AiX;62E6pvh3J>qOy>P4V&;9wF)ce6R z@WCVS!87$eL>ya<{P!Lyv^Cqgzn|YUY!@84?;!@*YIULQv#tGo&HjFGibLz)b-yqQ zx!Xdm&I|38+p*jCY|qqBzvuUUzwfb5pmAc6g(g?C2t&P{kcosQOe-2N4K|sYxtbtI zJ{P08$*7s+5YAf0i+|$ z>CS&lX>|iZ{~E5F1TTKK9hxu(C8C#0Bw&Ss+HGy^082hWOy4Vn#XZ5{!2`a-FE9#W z;9GZ+zd;eq@J82DTt00RxBbUp>+e!pgrR-L=b#K_nAf`rF57y5sG5W)ZY7~t;U4YQ zou4Ae3x}6@^n>ugJ3oQb0;SLr{)g{>`co8c!fum~uxsWC_8(2KE$A!kj`c8{awqvL zeD#@LO*0=lx5w9f#GTv%QQY|swToV&n)Q=ChH5>aX^MyKfGGC%NEvvoKj6!!u%#Yh zJRV}=c4EoXU5woUMvdFqKgPdPeEY{!6dyQ!`6Td#Q6dF75Iz-Pat|o9T>nA+j0!5b zOW?0ktTS=Y@NGw*#YaNhWgG571$zM=8`@R40(#5J_bs&k!s@U2x%T%pcscYH^&{vb zQ?=mvE$A7w^^A_&5!;@Bhw!E_H(xu`^U+$$jx2>ol(Ogk{t|B@$-?u41aZ59;txr{ z>mU&%AqJKJ;*;;q_uhy8T?Q(^DtL~X<6M>wC+559Vj02 zxr>yLx7cB8_jw?M{~Z2(px5Ew2TK0;{}UUoAi@tdl=eiu$5?PL5Ucl>fGnPKiyBpz@uF@@vJ5@%eOdmucpz1?egRB+sGbG2`s z;PMk(c;|~Rz+b*5<&`(f)^_+7tKs9nGCBiJEbIz>jJ=hwr~9B_FwX}_`uJJGNEdD* z8Eo2pjZ7Qs?BoAz-3jx1C$Q)(sQ7mSAuSPKc7%V!4Bmyh2VV9%^f<*E-i|R_uo&<; zyjd`GnlMSTaBdG5!>G7>lLxZ6OJNh`z^_nd@T5M2w3Hv|WoyD)8da>)y)kPKio zlv&|^Q|h&yaGVAqim#VE5qE9)v?g2{PQ<+`Tp30Q53c>-0aamKdd~ay`F$PU9G9+T zDe=1*uWleK@ePchgq=ap(M{N>4VNlRt_~~@FhrUwylTO&-ua06Ln-QKi1~e!JPbor zQdCl|4|ws`qri^ud|ZKedVyqy919H3G`u1ng+bf8#s1o1aAncvHek9k9DG5+*X!_= z(qOvb_0rJ0a7@T2*m>G5UA!mfwud!}@c~bu0S1F?sY??MO_*g`iD;T2GqOZh6TfTl z@orEFdVDr5eojCT^c}uI!!FTyl^W3Fqf(zegd!+?RV_<)MPYU(rL4jdP%7(JQRuxb;(c<2SuikicLL8>^@Jrc-|aO8NdF)=(B z@7f{$0Mgt>_h5r&SPwxC&S*k)q_mR2`Elz2bhBKS*7d?mtp8(xX(?xkLlgljPk4RUh4zZN_@q8rGd9#_}Fr^m;81h3Jj-w#^N}i zvF;6{LH;Sc0QRAK0jBeU+zKecRzi9ywB$ggL65sjZ4|4e;W5RzT>2#+)8n}vPFc+m|rhzNq9$3@y9r>Mvqa`A?oWQ^m4#~cVn!rRd#rd8VI4VRebgdajT zCS1Oy-kSVl$r~(TDd7KvCx<6*0jI!8Vp^!NxGRP6rN&i05%dS;us3{qQh6g z4Hjn3`nAh7(I>T(>S<6CI?$h%u-JQvpd#tW1J2rnBD2dO0)r5{E#~cjt)v5X0gu|S2e3yaqTyl*0ne$zFP&qZ>%JA}i z!XF*;LJ`D-i+st8^etDWmN9NkkY(!6spq=kG2^%`$Oj4$#BFCE3k~!QlJ&q&d})_G zUy!TxBt9xLwUp0kc(<*aA|Y4P6r8c6OD!?#XiMoX_=N5gn<3KRvzCDilKfKkGWDC} z{3OX!dFH1aDt(8^SyDRQ4#cm+u-#ONx!{uGt51SWq1fW*+pfCWBh^gJB=L{lZmCyi zH#;KF+fy-?t`^CJ{cAiEx#ov$O8TSdGgFo1D7k{E)WAeQJ_RA!0t|hdE|%KM~ibtOD_oDRg<8nlqnsOa*Xt$g4CKC8ZB0 zuHlq5hU;?5+$p(IJK^n4eS;~Vo0BBYcp*NaKs7pxTjR{YUGZT;IiWsvaZ1BiRJYrS zg_e|pjI^I~9`KeWm&utaZ%R4Pm?vX$AW;*}oTw*d*I*n-bI2)Y!sNFx7;Tz4gx4Dq zbl^H|PAxf5)#jX)Qf_ET0on`iw}3d_L;v<7my$^^6=qHq1E2X8p|8kRBS+(m;mxL; zznMlgp|llh+#@^b($c3w-=loR$n#^@OD_D##XO~G>v@{$xIV@5`xID9O4F_IiK2BP z`dyM1GExp3u!JdjMbkL|j4PybZF&QtR#ujR2i@`J6%u-vKxlR1^&+W@2jx zd@td#Eev}=tyf?PxF{7LE*>Zie3{IzT6+ZY#EOm(n2uE4Hswfy1r2&j$a#;bKj$W; zito0>@0e85Xu;u631IaSs-lf>FC4Mn+X+8qQW$UYwiTB?e-d*Nfo7DvTy5xnBbr*8 z#V$;YjqC>uOrp2JnrN_^n|4B7Oj?G|2GNImQX>L^h`@F4it~+Gq&?6;pu-03TL4p= z-cQUfQ}(0g8W9^RDbH{by&N41rBckd^mg1zEBAI`XxaR`+G09*R;7@~gVsUWp6;2Za zPS}JT>;|O_rFOta)M3e(1Vg^9?|#JZv?9Lc@g;}_=lzIHB$_D#K=`_+6vA6KD?md8 zNODV!6{cdxVy~te#MccM-?_cupse832*+(4F>$Lz>lvRQ_r_$OE3W%7Er?6&TdQ!B z_tG8xUFtI~s5h>_axS5wul9NQ1vP$fz}3E3zAjv{y?cAfWmCGX*)MeAlHIZowIlG} zx9d?E%kkX*JpGU$z48Mca11dw?xHpEN ze_dL!0DB&B4YL7|1IZSw{B}zwRzoHMY~qN-axA7(TGMT)gYtO`HA}tPh%AVp&nW7J znw*=JfrU(uE#PvZx3NP&Aq?mkm>tRK5`(mLdjTfSuV78^b**}o#K$I_R`?FaTt1qV z+Y#htID%HgaU0J8AHRkOO3)%7zIjT)6y)(P?v?C%MXfn! z(AcqBm*O4`)qtgNkpdi4B%PTP3}7CHDSK-;69CaaAYt@7Qdge}le7zsssMmBMX_Xi zYVD}u=v%THGFiYfr5ZG}&YgPdmSC?G?NBUgs0%gFrW=4#Hx&jKzS+CC=Zqv_v$acA z0mtxf#eXa7F-zN(7Bq$UV!|ikmba%id88Pnaw?xEHiyos!x!d@3o@*88R%VfYER;q zgWlz!OFf{?xtF*TDVOL}>|XXzMW$QX;+jN_W@5Z&Mn)-VQV6(7B<(}rXbt5!hDS@T zVR*y4r+oKRzy(ycj>Rw0tqu{Gj&Y$}NM3Kt%;F9j&5VXD&IQLo@C!7sfg1NQQyuA-6R?H1{qjDrp`Z5UL9bKgO|! znMoyNLM0y3xE-gBFpZceqN!Bx$^jVtOjJr2&&HeZkE9tKC;p=5vNLWZJVYTmH)!kC&jobeI)o(vDG zEHhu4^D}xU*l^O4l{%5GS9+ei0z7nkv8L3rckRdLHrUog3-ls0*ew{Yic7ZER@hDBfw|-YjKChSTQI*7n4EaHIdUCci5=sGZS#$lC>Ur@We_m37PYPE|B|o1t285Ms+7r z$#aQC;jU+1{iJ-Zh?3$Xk1C)5pJJb)rr8%o&su^CDsdE@_9$P_XYHV&sDS1h|;C`&wm7 z^4OB=I*24HQgBw>%o0k66-^21YGcyRgm)t)F3mw2Q*)e%nO7B2D-PRCjG-i1ZY2zO zIkn^vmXz+bO@)G4GGp$g(C@-r&lEG|3*~&Fl2ar5Br5N^GhGD)7ZlYKfo330Bn|Rd zLV&wirOB?n7)ugB;YU+;R@Ao=U{(j{fP$2f&IIdC#ab|DyU_L$9K*j;imSLzC6~h>?NYU*(Fe1wLv(`tuIDwl z6w=Gy%R&Tli&5-=&v)p0BfUah#IKgyp4N zS8K1p%A!9di3IkD5w3`Ic8SeGi!=xIsMfy4l!FdZjNEYTQLp7C*?3Ksq?kX9HSd5e!(n@SzJ{TgsJw7rpP{Jl$SKxGg+F}td ziSScq5^t=%IWUuLZb+;U%tWI)HRE1VsRV$EF_pD&Y9CwbHJ87boh4 zvEH8j;_HpYSX;}GiM*END|~T5UYBuT=&{^a0Kh`%FXlBeAuVw(L}}=y2_#1^r%CFaX+cSc0q4#@| zx*LTHuCW29X|RXGKGrThJh!Jpmn{Vwx_1J<_!5#mm}5Vc2P*y2+CPoQ{$65TvA~UL z57JbO5t0%FY=H?2M$lA`CI}hv9z`pbVS>jHwB6_X*7DU6Z2*Ho zDAo~K=DO@_CUKv&i4yI^-q`XJ2icGhiFu>)WoE=60We&#U2!A&MR037O}q~1d*1~+ zOm?l=e^Nqful156SW-_&rCOk)_>`DZD(QQrA&su6u4_hDP>>1c%%whZNkai2ipBS- zJJuH3QPTHXa$6bEos#c$Y_*d^W%3H+n#2YN0TCJ)cwe!vxt}XEv`U zgoTFm^Y)}Ulw1>~?3af43R%re0GxFAp#>IH;jKijW?`#B0@C;qM%PxtU^*&evIz@f zmOb^qAuF9)oXpLTE3?{$RzFQ9!F*J^avE#(#w)Uv(FL^vY=s(WO4E%rIF)}2+U$Z# z4ZbXZv?k{HOLEo1RJiooDFE5;(K?Ang@g^~ltIK&vj(1FdT^oDB)lXjiQs87BmJrT zGvv%mo&e>equ>Q49FQVF9enA98D&T6R9|r{iIr#3>Cz7Ou5L5o5UZaRMR5={GES6y zGx1O0*reH>bveG7&}k_53Lv+Oq%z*U*a*vLJXP}gZ$$h|`u37!r*&1DC78FEaA@;9q92*ZiN;S9R|2@es(Ko(wWO4t-ZL(}ne~>b6%ISFHO3g$ zQgQ?=sS;Gy@D1r@hzz+SL_$tM1}>ah;rIMB(&}=1GHSZsw=vxcJlEs0#BKmO)58=g z-KE>MS|P}@w6v~mA4Uaz;QW@MZRlL_Db$joUem0cd0J+lJRBRxQFOmfr7YQPIdhxY z!d+PL)sz&}#bus$I7SdzXrk#7tqq~bR8P=arPMO1#WlgAHXfeBLtU85%X*%gFme+$ znHu#+qfjQkz7-#FW2i&pQ_ycu=_90Ge;yv9g@HSj@MF@HXjAn)6}e(0dOUF|d<$bpL~3BS z6d73HfrwHCqe*t?=1q6xT%}VN&;rhYXM2msEYfr2JYMH=ufP z?wE*5QB&qaQ#te?3Khgw+pcLGvXO6`o>NOwm`sC>V#&A2q49_!CoOq%sbpH!EjChj z*^={Gi%4!!g7_1vi~ZN&(+uWg7o(|M^He=6BfSyk8=CrLPqgpm}7i4}^efw5Txz|CZHYhk&~`lV5k z!a!wd(O6pls-(gJm65Blu>{TidO~7qTTYE5A)8GE7UKaqDigMagPtXD8mkDTV-l0J|_i z`iaBmo`i$wk&{C8wCiD_(C(1;7La>T)@ZhHk>G^H8Uua1TuMa#BJOb}jI+~{FS)d= z=rU?qNQs2A7W~9&^x8|MW2p!$Bsv%rT&EnFzC8$)m8Q%gSearwhf&pcgo1(vt=ANv zz+21C+_JGDLYo4Q6rz&_%g+c_cjNSHtRr4v9bo|czwu+#xh2oPCr{)4# zOJI{=@?4ZPl+O~ZXjdBRuF!hgl*9=j&Ug9T@Ji==8O66v9K%)$T%syNAiu-+mg`R; zMGKlLX=2B$Oh>W=Ay)EPL=;^?PJJ3#f=4f}~6bn~96sPZPZUp zC#m&%*^Lv%ctLj>avD>SW)pEt>l{TiDh%q=lLHl(OmkteNM^qg@Try{Wyk_zinfr` zCCWtlMq_TV_N@xddr4^|OUIf=!&}K;zBJ>S_|5#gHHHcDXR znG@MP(sT;La5G0SFI^w1H zQB4hr6t2W7to7`PUSJ|`mIzZJx5JHvqVR*9;Glw7dzSb^A_?b~T2jlXGDBs{Xkq8F zup6_Efi;Q7_slr(iwKzs7QoS=r9<&cr^ys8nG}uBQHZjX7T-4HMvtS zBZuW&R%RLUYWFPu6RB~zJS;sy zL50}FOlI#)D=8KF(`zaFqpRVM#I$yQX8L*}bTBdH*mL7$pKX{%MGjRcFnSgvbtHTW zdGI1Sx!wrM9yKk!ToEHx97bz3tj{mI;%u|c@?D5RMeX!e;r&=LN0tiiE+3mb-aWl` zFWUb6EfqYIdWusU=;?+juA?^XNEflesWrVU;tOK_IWsy0hfLfuu2GTr;SH%7q?CpPw#fHqJV2i)x!U<)#qll8{YiQlc}f{!3+(EbV41>^&;Q0s$9^=s)?i znQrNbF(}jLA^;_U%5~q-X;ckUYdLZs4csa~uuE|i3<|{dFK{SuXbxasFfQFreB~3< zF~^A0wGy4F&UTgE&W;0aD>YgSAR=ZKZklM)tdiin24O6iV_BR|xJc!rPaXD~Gh|2* zs{-bhwpkaO_nIlyATg@Z&=^pNjin5DlFa9cQLfx@RZP^I_^bu_%1|U(TWt^m&85R- z?Qj+QczTM&GO$)lpoV#gYFlU1qlN9>!lSh|6p_*X;_Fw5%&jysUW-5RTYpJ!QkUxi z%|Hz!B(Vh!_}EO%LX8q*%<2fo_jFlLC8c`4x^1IEiiQT3LIcfQ%|eYq(n`%*Y_q54 zRLwxm5R!WVJhX!Y9&}2bd7zav(DMdDSBH$38nP!t{W8=j4Ar5b7T!?L9%@kzH8ewY zVW^=QnsG=q55ugc*cblR7Pak2LD!d+zHD^nTF$SYYQ3H6)47^qLM0@Xh)9j{Obj(o z{CVon(+vhJOk!q{k~t(iGnp>@dExUGo9|<`l#^yQL6?Y(tY2jZwutq&pq{XPW}7o#zN`1jaIDA8~S%yw-alB6ARyoMf${e z=fuF%YA^EXk1IK!42sRaH#+Krzq*_qqSZNws?tuR!p-~GN5Cy-5VVt|4AGqqMT zwGuEjS~#`4d@80%Wjn^b+H+@>MOy9D5y3NgiZTTt&CKy;)_G?eyiKDrv*I^1l0377 zni*!CS#r%B=r(UShH^VWXe+P?YqCM7yTv1_&D2)QlS++Ky;ApvvK%-rucw_U%G^)@$7GS$mO49+!3um>VQZma05?vnb#^28w{+B7 zBjZeKp@;$a=AVUoSQwQk3^NuU^}=hUFijR4zm42xg=w@fjTTMo`> zbeE)#vrLVIOU)`B#Z!7(OCvy~ae~s*Tq+NeKFsLL%n2yj29m40(x8-{-qI_sG`A`} zZ{;Q*NZb{l`))y#W%O2gR7!J>(%iMQ?OtnsE0b(x=303$Dl?dhgTfeu#6Rb5OMadC zYh&KIf&AP6SI&8_#ds>m=+%g}6uh8k#Kf1iopg;%8tEdn9i2upD+9KbSxjYuul&N5 zU$}}PFD8e|15kMY8pWN}=J&NMHL&IQwcys7Lm8v{WoE-9cWSZ_sYZ*mc9c$S!ml@m z?cydDg;==Nd4+FZx>IZ2CWaz6eoEuZB6!+F``Epd!=e#d)PQNDQ56t_M78yj+UutF z0M;J3+5=X5z-sFk&8A>PESWKJ)a}&9IrThLh{Ju*%Bdo=lOYH>(IQ22Id`V98rN8@ zYs}0Wds`a&@EhAJ%_i8lHiB7iViOgB+S%ZsrCW7(Z7{QI6H;uYF*9$>%o|tsX&jB+ zc$k_v3@&-p*lWMuMC)s%tj#vo#uV3L-{^%xY#3$>ox>3~0+*!@tUZxyF>~-{0UAco z>?K)S{H`@sw0k>l`-X!Uo@MW7#};76kp&%5FNZwmihu7ml%faxIJ|{aI1+srKj-qO!_uPiZC>l{S}6leQ5v|ECfX~IL+(r=`|n8E>8m9MKA zCtU6bThWz`pV#nt6)>V&Cv+2|hh4YG^;{#Zu(Q)rFyzGT%rsuGAjM^1U&w`$|D0^=@ddv znvSKvOPQ$O<*~=3Dl(MB5W76e+h5UdqhrG(-t^S$@zgGhQ$vHN(iPd3EkTF+TpCJL z0{W@h^r>Bor)Jj!nN2K@*mdjg9nLF8GVpT;_67{3o}=~W(#hj7LZRM#jsbnOT0KYl zC|jQARXng0;#^LMb9d)l+7?=Nf9TgAdbJMy8bhz<;U~nDj~n_vLp#%kj?5nVb%qwr zL-V$w;vNv4WY=cn>m&|_>?T4_QXXeKW<0Vm9O@_RvpU~C07e`KJPwI^&v{%h;h%Md zKtgSXHMMz8LRcl?=(AZ1={;4r(Ng|S26Vgdg7eGfa*@yFFzljPQBn(|){Ml5^T21(JSNTD^ ziiNx`opF}z$n`i^Gm|T4D9F1|Gf@B%IM$5Gw^RKz)lX9axl=hVr}FvC6k9PSZP%JC)MRR=Y9?&hyG&2Z6e^z)J;y0)HBOdr(5gbgpx z^*W32I^oz>Y8#)n&>$?-)rGpc(2WdfUPfbLXHPmOC2WoncN#hVqnOA%dV z;?5k{Qs4H-=tUl%tmQB(^qh_fu6-C0)UekHd!I+052yd+yUF)6J>cLvQ zTkBzK-G04E(s5MsTurXV-f@MSM2{jsj65#E#f__K$yvd3hB4?dcd|)p1G2VvZn}w& zQhQ3paHu4-q4RBr*3*a9!-v8U6T;T?fuw3wPk6`>JqjFfTN=V(!Yry*#7HEJ$3&)A zW~gIs%YW`@hlR0?()DE;`9~VM7-5Q0{7$K3%$<#SCWh5eN29M~MwS`gO{us`MmEm` zwls>4r@5x;k(+=Ixtr{_nAtxukNyU4l+)kf>hNdG95y|79YUX$+diEezM31hTIiuf z@Xk0prJ;vHePtppW+j%mOgGz#oLOxVjaMljmR@9q;smrY4V-XnW4HK zV{+#r3MLyXfvZtqd(CP}guES@dhVFc)7w~$M1p{~?8>9r*D~zu(|Pm~5`P#b_L42^ zpOB|uWe{OA z@q0%0$?TFA)^lt{-`kM%oiNyURf)cfV)x~k=6*GO>Z^_uGCNpWd1@>Hxw11c+$P!d zbY@CBHQ%w{QA(`GuM|LP4@c=$m>E{eV)+;cTl5XB^f%T|ZFRmw9zKhC#pj7ZB_*f~ z4H~5f>QY2!p>PG-=xD*ne|V}VQRRW+U0UyRV*bGBS*dFlUV;%ooVR3p&Pi_Mo4YQ% zTreGNMvOCj`6*X{6^|9jOBkYfBQ=SuWkOr}wozJc&qfJxP#lIX9r z7p8O^YNNC?;v6n@B0WSglLFAv%`RS3hx^VY%M>s=WMWu?aF1|Yw}}=pGpuHO_`+~* z$!8!Fw2f4bOd~f_qfaz`hEy+7KpBuh{lxTQzpnkpefx6<_S0%|@7)^}C_lATJCyZm>o#{fh{V^xeH!@LL-y(JF3ql8np(T8HnB^!eJ>tq zWT61jmpt=JCcq{rzaz}$XcO3rAgZ}bp8|oSw_TA$3KCuXSsl*C z!codWsrRW=qla#lU1b~XDmH&FvGi6>VQ!w8GgOq;i{%B@ zcHY-Fu~P1tvsY#R4*)IW@TXQ+758C6%Nk#?;qmL!!KZSXTH7e5snJY)R!5!5d1$RiCh<5f@rw{Fkc z)YCE<;7+wWW7@IG&&q3CZj!^ZP2j(h^{Y*ihy(#w2e|}v@U=9yX5*A#1>Eq!sdOsg zA4;d*aU|RMO)P(vn(5DCi7)o-jM&u~HNwj3BNg26rRY|Jy|DVRbnbHg$^NG^h#Qws zC0d9k_gji6QMrrUQ4^(8cw)K2nO#%fOcKp@cax12TX972sy5g!uG|x;?6JOW97%0@)xaXo zBm(*|W{cX_f4bxTwQ1qHMMPbu?HVGZEH57bmMElf90H*>@P!(JH(?8MBo14Hv@C7JBqT6)aNj)}{96VydTV z`f7%%L!PRk7l;5`K%~F;TB#FD!Iz~TUnWW(;~7=rI*dGVt*5UQuiH^LafdGw$OF6X z{hLEOPo?ZTG_x?LK6Ow^3a-YLYTu}{Kf-|Tvybo>wh7mry1;{8F|1X#T;wyih1-R1 z*>&6V_m$h)ElU;Ay#FyKoJH74T(#TGZH)BJT0aI!lB{lOQCAlY3+Ot>Tt(d3>K*W= z>ejY;xvht9t1sK?+O~SS?T*v%@A1Z)DtVPHoJ{dl3&%TUs(hZ^dW(v=$hi?Ya|f`U zeUYg{)Yr6Fcf7D0MVHUP_9aaU>Qb5bW^G?tZzK2=`!wIc({sH)P3%Nr+7)F@P%o(} z3x3++3O&#-b<)!n{tWTD<4<#zNGP1}y}LT`xDJR7LU-NTRxjDRl$}d8$mL47@Yi2k6g~ zp#V`~mA?5lmn;=diSoB-z_A*(gmQi|)RR zg|lK{xFxDwdEapY&)0VHC1ZyMs9;bn?>niJ-sFkKq%#^1H~}@S~OW1B&ZZ3 zP9a^p^=JIfw(GX%-!+vLv2TZ7t^X{7hK4q88^of+BA83FLr456EtykUzzPfdC+0=% zk<1dTMhp&XDfVp7DpLx}Wrz0P-8P{SQ~=?|Jd`N;9xGr|0IbF2*J8wLB|Xjfz%Uut z|Hg5d1%louYnV9FExU>JfJ~{WEi#s({Yhf2xiJHdlHv$jHId+X0tD-p@(POa4V=pmS%37 zZyjMql@}mh87TUwC2%tq!C>eJE`@P%t33>W7p{_Mg4&DC8t6N+jZ#O3be&i~GRQxX zgNa#H%)6Ou^(aphu{cbAh_>viCFjY?B%oF>_{#A2D(1_x)TT17R(iCp_pTiYgiopL zZrv0+h#n%Gyklsr>Be~CF%5DLX zkc#UNw^O^ckb=UZ@hYwr?hoj4%uRU1qZHydx0`1mLwW28%p81EIr+kyg{2$xTPUM) zSc;8nZ?%#7j`7)4K@y(oQnyB@`!Y$Hn~_6hnW0vy5=yPZ6G9}8))+5SVyoTke9XCB zVN>l+&tiDWuTCTVkrga0gQtoU0|3bCv8rXKd>BS(K-aH7gS`DLrZ^#xYzjqo%8E(_ z{w)p^a8>(d85u&|spFS5H+3j+4Z2vs1nBONnk%aG9jewTj}tIE7BJZ%DF$tt@j-21 zPShSUHH;|J-ivx*AdLe$fI%kV0o*_i+6o0G3zdA*t(M?{6L)rCc5JpxiYlb7l{5mr z!f)E`KuEoJ-06OLzA~+HC&xN+o(h8{GreF@nn;7E=Ez9HnZ@8aC$r}zcTTb|@eb_Y zEZ$3sIK|0%%v8KlsoZ%iZZGs~<`7Gijt=Bi;!xwTZf$)LWgK;kH5><|C2*lhFH=)m>DtIJW|&j0AYNw)UO->lz`du9C@1OQ*A{R5}O3xfcz?*6825brs>5 zLaiVz$;U(gSTfTqOf$ z8NjztgZr$7xM!k;#QQx}CU3!y4Sf%g7IIxTwC7-PWa61o0C4cNmPq;NXQ* zXmr)K0H=2gsK+iv!;Z`>u%ku_qzzeDlp)h+;<4ix=8}EDAlKGq7v5)JrpnmWj*70A zF%q1M=u`N!j4(y?VU*gYe+DF2rO5o;dEyddSsYc)#l&?{A+|G#ZR#K(_kzGnEhjLo ziC`)~?{B1{_wYL;Y&b$9rT95P&OI|K!3Zi2X+mEUG};}W+~tiYJjz)+Q;{Qak2&8y z{KitCiJ;5W6^rtHO{7@9D061d(n8+a(vb-ZhZkqbK6!fEWO`;^7;K4$0=#lLJTgz= z+!Y^U4JpM%rKo|g@n+$Rgd001KcSgriNGO zp3^l7hF3R_m(0*x9Y1bVyA=MG&iy0XiQj)_3>2PW6nr* zEu+S6Qr9SOUa`!;Gpd{jXIAYfx*GPws|aL@!Bk#|=MF>RHuG)oeH-XSE11F6{FEB2 zPgR>Sr5+LV5*EPZyoRguxaX|p1NW*XuDDeBtyz1I0&c)$gU?%czPS(8=ogr>(3y+Y z)~oyPU|zVEzji@esD6ReufBn|#ikUXcGz29yZAYF6ukZeFI>@nOL+rbfsLO(SUiTS zuFE}O;VW$1wA$nLJ5cFwFZqS);js-}=e|5ERad!vPr_LVGaTFKO1(2*&Aa^Qx->r9 zU}vbU-0}8; zL$B=>$6N_3Im1hCc^HUA`#EZRp%QmRUlpY|W*QoetF;>O6YeFLYDdO!#I}PMPQSaL z`F^Q0FO)c&;{xs-p&T?;tGay;BIE1-Lesn7Qk-IKy{6DgkSDRsy6}H*qtJ)xL+SXvrqlT(Mr}h_@T5x2Im3pqvHc3>v=cl|38p zCA7w>3wyy)V7e;rrtK|ZPhTpI4%5hmbm;(`ks`FXxnmeQJoN&z9Nyr7#Yh8RPySYHPi_$kPj3r^628$r^nLI)Bx zI7;jJJFt@5k%C7u+V!bIiwzh9^NY2WrJ+4y}=~NCWI(-*uT-`mjg`&w?-ET!aP3`H~`_Z&6c` zQnUxil_niF=9rs9O;i9l+!`|s^9hTVa`6-;R=G_bbWPtb z&?iMIO=3-1nd60;%1P{`O(rrBepGJfT;ahj3ds-8PAzO2Y8Q> zfHL*36?*_C!dxR+_LVk9udLb^en3ZfEa>@@(>|3QBe-&&IQr&{ymZZRYOHaqG>~)30C)4iH&Yf&v4_Q6(%_~{x)QvC%2u%W{&rHmg1!Rnwkd1V$b9B zbB}Nwr&#dC-bp4sah$Hp7{r0eNo=3>x$3l8mSPfB|A(o)37lRGnpA`+V!OU@?x{52 z%cwqSgYp}1Dm)^M%VD&nT>+jnY6&#Dkc3vP7~UeVB$n5`;EnK=!p6r`q|96{=s>$* zygHsWwcxDuHYo{E&LaTskWgg%{`E2$C$K`ra93>vSTRiUlt(aj#; zSDn6!A-Pl{SLCW!gfQ1pXS40Y{fDXA^dLAfJm##q9zSyQ1BVCi<0KTxs*U$e0hpz~ zhsH9o0+6x?CHo%pcvlo)vKYpK(Guws5OUnb-3*8u-du5p#;(3bofWM$sYY(D5jBd6 zqL9JxrH2j=P-^vvRz`>FxeM@qQnAS08_K6K;nlHRf$b>xl)b)Yl(RpM6yKca3JwpQ zkhJvf`co?XI`FSith0iigk>C@g=-+!bhu$#K=-; zWR^Q};QHvs+lXbfeN-|m;X_%@bfn3hs>#&M)Og~R8cCa}qo!*z2&<9iCjmezlo?-l zDdRxZX|eW@(lk;-W1fr+gE`@GD#dRl3t=ddR1NZ#RHIdd4l|E$;Z~6P$~NPQgrCxw zP#c%u%qxuESI!>#KX!!d_%;^7UA5%ZTv>(5+?FMB0^A!9Y*9UW8*uZZ;Zx zzjb3^XYGa9-L!I*_Y_0`+r@PjQ!)4axvB%?pEr;n^ zMZ~Y2M_x+}Tq*yL+?h5UvsB2C=4LS}%&7R2xk2aBpBu3VzMBh@kfP7&+*&!CSZre= zYys~QOZOPJ8d0ARTc>2FfU5*n&?e1i7vCT3XX}v zHkQz1Lgr(OlCk}2mzw>R^%hL)#I5#byyUYRFVaiKv0iF{U2e9@oco>~<71^08EI65 zbmyG7vFl~_jL|S@9JD-U_hrIWWNj2OSJF*4tGOOBQYGPvkNDJ zu2c#S0&hWCt0R=T_jDO0gz0FsjD7p_mK+yimt?PW)~T`!;SAQ3LyzKXN5IyrP?!g4 zsNkJID_t=i=gE^*zNd5hy;PdU+;rgd&oNgZbT=RgwcrUQ1u?~v zr)=XC{YYdq3^wr0%e_SGQBW=*s=)hd@pTFkm}fYW%1o&jNo>r#khXCd&fH1})&zrc zpEp{Xey5~Y=?WE3$>@CG2OO_7|5qesZ3%cOhLPF>vG99W#2DoWyYRSNP_k)N!=$}X zDXqkQlGLDMDis_T%F!t(HJ9$xlev1CY_Pbf!>9_bI6!V~U}4U%vO&DE$7|(sc%`SW zq_B~e97{c}TFSMtiQz1`()LK^&@@eZ*8+b==ADsw_xS(Bu&aop=5$_>Y)|zJm?@I0 zMp&*K7kFiWgRURu6A#3vwJ{edHM0%R22T`aloVjZix{PMp_1G>>oNjEm4hPc=qq#E z^Y<&`imPjtU@fk_QT??ypS$+fH`fNtg>doZ$JeF#{v{0w$*F}XcB#f_+(6AaiAsBE zTuP+?@&>+0Ip46I`uq5M+IJPu!{q=> zotEm5pN4VGuzVQHhg@iFS6ol36?(~lz%g;E3nD8QDtmH~L}o9;HMMM*c;#ho7jD;V zXI`0^9?rIOTT58*_rm8D8VIUBl#OH@^7NA_`25QEseGT>&#!%6Uj#%YZp;8yB)MD>kSC56yN6sam*Ynu+&F9uW;#mXV`@)oYVG(v=rT4-G zsV-b!>%#ZGP)ad1mfFhlg|rE`wTNP&X6=a)_e>SXivIWw%uPvQ@J2DpWlVSl7mLR^ z=TiKI5eo7tuSwq>nhY!J`O?gp#Re5{E+XlQKg>ic12tBJ=W0rQDd?&bbs#6%T`F>t z&s3hxGBs(rCpM7Y&`2c+krDW=e$({N-=`%5;q+ zbo9#sm3xpcTMFLdgQK`1%NA9TS4a=Hr1FdpZ0TLaEvP=}O(MR=w;5Bk5Ba1q4LhuP zi8k6|)J!m7V0N<82;W`We8=MoNId{RHVG})1%LCvhg*>Ryfwe10t?hQ}^Lof#mIo;NxNS0o;@FC=&0dZDPB5pD-0{c9G73x>dsHtP{eOaH}1;$(%4 zKnlMV%>~ur3o3)~C&HD2$11LBEawY@?_*X#bf&@>h&3%Mi{2KGKyXbR~mX z-CQ~Fe`I)~ub`0~8lDg(4qCAis+VC)6+UivVh}aZB)vlNDy|f%2`xTBl&P}!GV!Hz zA@}dSb4VO(W+`YK&fShR4(DnV9?_LW{+^0|nlKuvPUt;>i~es(HhxPgxO_!SmS^7wTc#MhW_LS2_EJJo&L~-$oV` zy{s(OOFL-lPSGX83uMnMY|o?)rf6)(q_!{`+b!A@jdn{ZyMF8%^Ap7|k*_J{ zk>t3LRmzSuiKbdaDi->vq(1=_D{n)vHYm`QZz!C$qm!prFMdwNprrL*D`cjopay^{ zYYL*;Eu0A#6sT6kM@lfNbuMuWg32bS%>F>tv>xfAL_ZTo9a7aDks?Nd>G2UOVk|nR zX5y}tIww5U)#gUZj#E-t&_BecR`Dc*wk|9-a(K7(U8)i?F1Tyr#(EP==+h)dcoB32 zS&XPe5NDd(oNJ34#w&KrMrLFnn#EcX$0-AsxGRgBV)}lHcI@fT)Ovc(<+2kZB0KT*IYm7w~cHGCs(nAA(dyO zCb<;loPudH5ZW#vX3Wf7U1Oe@sJ))gJ+0cJfPop{CTHX(vQ^I%-JRI7A1RC$a%SJd zpnwEBZfmB!FA#sdIFRRC?t(?kqj#~TLChegM^@dCp8Vd?8{T>SJ)=9{Q|H&t4huT# z-`mJ79OE!GSfa$siDNArZ;w2aUcK1BZ14HfXB+r7Q}XjK5*HP&B5X2KqpberbyT|x zizvA~F6ooKRi(YK6GGsK3 zSb!#cvXS!x&6#i}$)uSV_r)fGbYizFt-PFz^-8(NSM;1!PQqBJtQhU%ni0m#F(L(A zdg3N#NLPt>-5NU{qmt8>amK>rO6xIPD3n4VS%!mMsxa1(Ght|dhDXR{duH=m+0XBt z$nZWw>8=!(IaPSf42eJ(WF_zSsTEzd1Q}7(D3W>ZIbU%;V5l+tsiQL8^CWV1m9a-G z9?QVY<)K_yyHU81N+*n54&%L}8Mt*WD0HGZRMdrrcESV<8P3`zW@?Oa;ArUgG6R{b zVy{V0cIW%VRq1H3PK?;D_;jrt)@=XJ&aYYupq-huh~$U%42)F8o%v>93jBJ$@tNrJ zGzu8m0~`?UZe?Ahvk{e@jU!}X`MzQZ^W0ahC0DL&*3B7T$>bRdmk&VGceTJiP}D$f z4q~>Hb6mhyZU?U+Yr;{FVKf`H-;3m+C7*{hGXmfP3+oHA0?zEf%CHp`m%x!)ROx#} zWm^gE+bk<3j?WXTV&_)HYPI&BDk^(uV(e%LQrV>(Y|m3w4%D|n?;Mnd6H zKHDf96XA@y%Su~KK$?&-x*U*{k**co_pD<8+~mFRFXeJ7F=60p-V-8ctcvnES;qOs z%@k*OW>%t-fjL(-WH2LTP?75l^~||XrCoyqE5{>R_Ee{$T4l5` zv;Mm>$~dsK-c>zDEK14LD=mNx*n7pFnVxbM^#>(CbI`=S;SJbIUfgfpX@A+;YD3oV zK6=&K`u6$#*7gA{!>yO^9=5ig-#-k$zX(75G_4O8M^!7QPc!ERt;oh@w`@?tP zzsIk_56S&^;p3}t-o1M-(2FaHasoCcYm3Lk^A~2eEj&Y z;lKO$pSJFX|H5cIz<_;o7zW|l({C^<;eL;f!l=D?9lm>up?mNyyy3fN_rkBq&%$@l z!c5(N@&>ON?)B~{oc9#xC3xo3lQ8Vhz6)1;^D^A!n`hs)wqA224nz0f9lik-e2u9% z4sXfcyuvw0ufqMGz6}?@It=gpP?PcaNx1KuqeGk&?)Lh5c;%B5E@9^z2B%}jWIr)^* z8s7CtGyI3sP%;j9RL@3kOWN2O>-I;pe3*N#r-$sJUSEHRy(ndzvCw zd+WQGN3HF{r<~+xe6_8I51ybePuQ1myiSwP#cjfm-=aqkaQI62=g(<89qQM2;5$e6 z0^RLsWN*hi^7rhJCujC{)=a8Mm19f5jt;L&t5(c6*x46EtX%W=C{~-icn1xP+cMj( zo-^)g>!vtjar~o}3fhEOfA%0u!qXRFvE0LI_!!L2yMaEB@b3{8_N;Yh=c_;%Uj@Q` z$znKxgMw;L4#Lz21M=`BoU?t{rZ3=xwEglmmi~VaWccWHg2na(%k{s9LHj0LetaA# z^<%I%?uJ8x2Zys?yb5&n@t+@tFaP;r=+eVCZ7hZFLw|7$JTqK*ouZf=j%1(vtvheN zBleE`Pc)i6mJ|xXOyrvd0W{sz3C%FGdINAb<{OVat#a_mNjePv)a4wIp z@N!#i-1)^f;a!g&hV^s!@1sC0|4py)+aJ(2JMvS}L^yL_XhZt0+&jg$b4!Q(dS= zdtw(#xcoUrI~=$7c{6_ZhTpy6gPy<8cQ5(fO9^eKOLtvIOiV0w1`~D*;XXqwc1K@& z-11`GQqb9)tC5Ad8yDox*i#lwNQ^ARg6slQVynG;XU>bBuueg`)7GNfH&amUJq+6R zjyL&O+{E31mkb3&iHoA8(pH80Nj1>*7gLt1zjOP&NZ>|$`{u3^b8d@45xT6H#0{3p z){ha1slr_AxOJ+ySI$&BZl%q#Ew+QF+IfKiR`4^`DjZS^4WZ9e1-llTdT9&md)jk% zPN1Q~;$y&^QO;uBR$k^bVzP8SoGKA*7#sQ8Sj!Pwtnx1A%8+ygA8df`+0)hpVh8N-1LugyrKp;nzm0c1ybfs`R@v zyq0lGg=n?1pNqtWUA5{|tR3m8PP;5DF*#zOU=fIR7|OZ9wpu4edzyyCB|6wE9>leb z+ai=it=5TQA9_I5-@Yrgr-ooAu9=i^2k~%L?zG;%F&OO#vhZd^jSIdnTw^PD>7`tB zj<`bgd}c6vVS7+($qtsl4jc2d}5R~_x4Vu3%_B==3aBc`B)nm_f@eOaOSO> z>MP#6Hq51Z!i$^KbVZemLc#k>c!Q>jK_P1)nWzfqoiv>uvS2#=Jd(`ZKAp@-Ro+O< zTz?Rs?(KLME^AO2-5GeL#9bl>H*rJvK}-8q1X`P9o*Io-%0bK%Q#FzDqBp&bDv7 z*`Qcgi7+b>s<$RuLg~HjeMS?BSaR>P#NtDvnQ^&JReI|*rrfU0A{HEqWw2SrI2g*U z%Co^1PLxhlC1PtbAwgD5+m7UdvfqyIrWXKB-hy&ahnf zedm9afaXS{+#VXvjTjM@sW&VT%0ede=EjjU*)kdAQdPs&*?h zkefZVCC(d#Da_^lwqVHAG9e)nP2m?QSRy>-!iw8mlV_9oDkc?$mG@aodwIpYPYHN( zHs+S6X1Yq#o@`1CoJy&fOZAG|X34pC&h?%nJYO{v;s%PbjH1e|cKH3dgP&7!et5>F z*y6nU3=4&Xhfi!U3!!@)=9$g83J!Nefl^ zz#4PuC^?sEoPt`(n6wv!*l0LYMIg`E+aOY>A4$FNY;`9Vvy-&GuI zx_M_Z3vW`?a}m{Z6<`K|s5Twzx8kAuv|RpiUz&Ml#-j}k3m33kdvvB|E*;j7KoRm< ztG0VH6`Sa(-s>k#Ih(+wnSy5@9Mlq$iHWo;%a;#l4tZ#&7YSkpO<1JTNL#$*?*QU4^-Ekc| zbhX6haoa}gJy~QO3vFAy@D`9~`Y^NMT)AD#fUeYVdjajLfF|)tg??4R&Yr3OlKTID zs@|>1jpIre?Jy}R^e=E6v4heMM$fxm{98P-w=G+i6eDYVJWt(Cv(YrV2{R-VXb@@; zYFtXyK%rP<;X-x;5i|Cy$8&xGWB-yOK;EjUim=g8NG%ml*uM@LO&A>gyEHoM%#r z7wk$b-uqx_XN^us7rky9a<6z9cpvS0zrl;5F(mP)=5Af&5Ug&d@5Nz^H=|W7X$3o5 zeXD0)Be3?ju3Zm32MhEWE)V?vluI{Xhu%NFkH|uOFZ}w{wULJ3GuyB$Qtd$>Yt}ph z4}rH|`e@HD5!H*(kY941!%Mx<`yTKGOqAc~dgSY?O+47)dj)QAze{B&V7)^7(@`3G zyn=NJOLb?~?F|HPWtpK`VaJ8PCs2ek;pdi*VI2KIBVM%aXX5>a&2T}db-b3a&byGG zIAnNi8F{x64&>IQ@MnI)@&xxlSJ=B^x6}t-epXkwOMm~c^0($}tQaEunWnKb;lCWb_m$5P|K`(Q z9^CoE*I$L{*|5Cwhd=)A;LiW4f8Y7l*Z#icYwRQmM~Uuy6=G_9^Uc9e{{F1~6{duL z73R=?Z~Jp<%_MfIC*Cyq_`vs(*_3j4cjJE&Y?KW2&S!rQ9h?O7jjt^9oqvY;;ZJ{4 z|NHy1PiuyseOkjWLu$YLOB}C!{Cn81`Uo%mzOtj9iS?Gsuoo$GZEP#? z4x`N1*h=^+?hVqO3-2(keCgZ|Vm!vtvtwK=@QR|?Wo}zbmRkgdnvU&KQH9oP4 z?mENj{QvCVYH`9;{hfact1zGbM_6|WQ}uU$Z?nbqzn>r6`P;L)Apg#CaW#Q=VBMdBX z_{)05kF0AORxutO_!dsz1>3UPTQ#t$WQC2BH@+N=6J;;07=()tZCqj((!Q{IcIW>d zJ+bAFV1?GUC}P{(PJA^an8DIFx|TRHv}KvV6iVA_>tmi0^+T;b<@eZc-K^fP5uK+{JrunM#CwVH zvvm%y()_dh%yQb^D=`}OWIZzT^v3(OulPZWLbBrZSFa9yA64ap&W#n_ zW8@E>J+e(`c7=^!3Fhy^_<@?R0S|Y9x2->od%Y^ugSJnngoi+I&4riG!tOos1)Z=z z@3?`(3Qg=uvuikmC%O2%Tw8c#*R0rSRlnyHPanLr#vn8vudQS1rUti-w9Ts7QG6c3FHrscbeo%j z74oHp$DwTB_MJvuWNf=6AItG+aC_M8jn9VMqD0){z(g%b1KixA$GI`H*tWYbZg9rf zx7XN-8k^L%J1*)9_ZX+#wr1mx+{W`9NDEsIeGcJOyxqBl>-JjMfPEIv`5)UoHasEY zq5aTA%MaEa`W+i9yGJf;x@;gu-}T<|SqwWNr?TB`S#((>~K+6|9>;S#FqvP5_N2TTKE)AZihwZO$ zQO6D!aon0sYQ_67c{5-O54p6>_bqyBN3J)M`xs2TMhQ7VqJFyB>)g55Y&*y63%)H} z-;eN^O=phILQRy85^$!^~(9 z!0n~a9InCaYh2s-5El(R#;V0RHiEZpX)1Il&iq)_1`BpAEb6=McxAnOFaAwrlW*7c zOWK!S($Jx4*}9gU?|%ZjQK1)oZdOJYO};kKPkgf1HB(_*@@pQx_Pdwt*u9(E8(z%# z!c7<7d1#w`dE%W!v^jPh`LSQERQaZ2GvvO@zKub_lLOz_SHcv$27QCPz!DZr!8tmW zc4wm%bR2-eVz^(G)xr^{78;`#HW0RavCt0No?D-)jK_E$8F!D-*Sf)mLzlnp9UIFs z5ARi@?N_WAzc=9b2-KH6v&p4g#TJH>tI zeZR*phl}YCUatHesuvC1DpWxS)@t84Sv9Z^^)>E|;FV1q99Q#9!zIbYcL&#yLq=>pk$VZ18wu`L<3alqKNsf8pDT{r)U zz7GZTe6$y#TBef^f-k?ppygKsEKwFtP|RAWwJn415)|o#xrh}XbW^_V1PHfu2I#mfTHSlZD3fz|W%I@yMSZn3U zg;NEw4Qjh}xbMW4>`>jB5T=Qm+(h+jLN!h6G<^_M<#$hQfV(-oSVI{i$c6MJ#+;=fyrxQnW4g2 ze4CjFXN>)JkQ*N_tM5}Jx1j1y=RG57{1tbpg6?a!kdOI9ItDk@6ke^>%vcKh48+B z`3C1W3Qk6a;`TV$YoA{86IEuL?SO?{B#!H_Ug6S;Bb$K;cJPT^lupBEZ(^9PUzsIs zd&cnY+9kF`wsCTXJ>~=h0H4xI(7Q?4`wrgj{Qcyc17CTmGv*&}{`=g11@`Xz^6$?M z?*9GekAFD0`$d?5zEk6ayWiNv_TRc+U}UrM;5K$U$62+?jva-Iv)u^!9esXJIc5=W z;C$<|w4vu_mH!C8ADB^iFZ^m4^KWcMFu|Qwp6)C3pG(Z3y!P)ldI^!8`9%4z|7#OA z$p7ZRw!QjQD1JxdmJj=&|5tIE5XWoG-Byn5W<{fSe*f=(Jn+k$FEJpnr|axj;q&R? zztw{z?AW{e^Uwe5c`drBw>Dvuy2YFvc)t_;IV1If5GfbeFFL*p26( zg)F-B&o|*M^fF8+-~DBn^uO~TfBZ$5|33-)twY#GI0$Sr?}vUXLerO_-TJ=rhePrB z#?lX1*&2{Ph4aRSQ>E{VDYYfk1Z?`urZ>+6r=ok6!@Q$A^wLb87 zDg#GeYki;VYwSum#=PaJJy!UUPq#lX$2*^e{brw8?>|g5dV_b0QPAmuAK0{Q0p1dY z=FXO^TE5fAERsLKRro;N=d-Q%?!EXk>{BePC3}g|af1PS)7LS>#Gd_rq6f8oyoXWv z5}R8$VaR*n`w-nUtud;zgOlN?f*%9Ln{cl%=XcAC;V>#|VXxI2yWrdVU7T20p;vr@ z#?1z=*u`G>1ct2$J_`EdX1vE3+C4t-J4XDjHW%V?ys-VHotJp=*?}(t^4hoX)a2^3 zuze={yZy|34s*v0$Ew9-NeYGW?w2<^cUmL^&# z;9I*dHI!_7suY81TRU4}PWZ?Yuz7YrbhqMh+kf&(C`P8;nu>-Cuu!tZHD%ZH1vQwyVe4r4}w|c!K7PXMnk?b`njJ?{;`Y zot~o2@iN=Qb4+bqY0->V#ymk6#AgnkU=6;ElZK^f^%Nth(>OS(P*?okm0L_x`!2Z> z(^4x)`NkXjV_biCg6WF~2>zH80{$Rl!*pgU_1j~2R3VIm)14Q5>sGbH!_l94dGI=4 zmp5CyKR>wp>u}QK?x&$yxqH9yj}m?KhX=la)Y|_>-5i+OE`6fl5}kufo1DG0k@(X7 zzqbFk_J3ywmV@6*tf*e%x{6CoS6%u=OM#lGm(bKDF8REKwYbFK;1U6Dw zmwp1`(yz(6^oQFneP7w7Z^yl~YaCvf1mU>{Xet+SSi5`^qvi`Vm6Sz1ieLe6ky-fj#=4Dj216_ zp{!vK-I-ExQJN{v)%c`=T~@coe(Afd&Hirv^D8I*M#&Sr6=A|!nF{p8Xjt&VIrq3= z<~^7vXzVNAu8W;qw>~?FTPYv=d$ZOR_xri6D^mESKB31L#sEnJcf;7-C$@PgIq;`{ zTIeR(c&=t9LAE*N8byMW?GLPrSO53&lVFx4v8tR{`DmeE82a63)*rOZqY3gM^b0vk zJTvMS%p|x^F~N;tiI0phC$Ypt<`NTxOUzkpFgsL*Wyhe)$2O;B7oBbR*7*%*AI#*O z*$B}lL+s&TTu=PMs^=Y-tnKSd!RMhZ3MSCrv2hkgw?=~9Ossd4G_ZR2+K%tPws@?2 zYlntB+9Tg15*8nz-vk%WCAO2!JB_!dv^NbX$CP9&*aW4g?bjT5UT@KtF5Qv^CD^$F zEGryi(*9-O!5H;}5HC?sZb4%o*77vLFu`@!!iB7laLat#4}yjC>u$ozx{pb?&>*qL zoRS8PdU@QHEm@k`Ijl8&{F!YSN$h?!7dgaz=0nX!WHYQ{BtP{ZwuL#doq4sJT_|T` z4fEW?I~b-cI<`Tb5FR^U_ zfjo55baLk53MVg}ymC@GSvpxc*?73N6CX>x0DTGi3Y9Oxm0k(@Vk>;V0o|djd8Vxp z&kFIZES|7*6-rDXz7z2czIrSx=ywIZuAtWyQeUyQ`{nnEA8Ac|i^T@zXM;#LJ|GUR z_nr93KL7d}mE*Nn?cjRf$)OY4j}_<}&>PTOr}X7 zUyj}MneH@w1yozj^EMO>?ykk%-KDrop=fZI;x576wKzqKwzvl^p86AR*o5fi~hl9qDnKm*AL1(m5<+?9uUrtDwZNRm%-e~U$ z6`AKa4t~s|4k91lw{elCS$dIaec3|&r6tPPu~4+c5R%~bqT2B2c!Wz2Yxr?%?9~y8`L`Sb+K1?99LjvuU@PWf9`h#e)yd;Wtp=n0 zTNdW9N4;$qx`eqE<}hOCZI0Io9=R&8CB5xWDhVFNDzMzkQQUN<8yzFOpO3g5_dgx? z=1(Gc5|F2$!ui^;?3(Y3Wg=xXa~RJ?=Pwk`Phc=|9uf1>K&EUdz@CCYqlSg-3yblT zDuhj&_pMsl3o-{KU`!>!ym}Yjx;5dL;hpFHn9}axaV|Ko74Jk3Pr7m^$NjM$38mg% zr5~WSzYJLy2WP1RN;1`2EMJ2+UxNp-M$b}39uT0IXN%pE#w+T)7%Jz7exOixzydVO zQ;zKrsf)Di`~dbikg9{Ff`5v&HM==@QuFQYMt{i3?!x4(#0O=q)a7e4_|JyoO&b^dXw=&@h;R#? z32%UO8H)_l;)UXqkcVp3x(V<99m>;{Kk>N#b-TsR{71gUF7eTi0LDu*pGOL7t9m9Y%nq1(@1|)GLcqbEwhB#4nF9T3>1${j10o^rc>= zrc(iKzEy6Zsr_GuYV|%btDo_HxD`BOMJ92#8Je0)6`#2@fQi3}n>K@!oj@|k(Sp7NyWm53#0ts$sI8d5a-tMVv+y6(k^Ys@Ec}9b8j)a zA&Sy5{n*N7d=~S__Y{T;MeL|>Zq*4PFnlDaiFQ-(UB8DhQ$?eDXW;U=Vx!djUQh5A z2}-c!A+Bbd>3Y8WD#hU88j567HXN*&i+E5Lrn*0JSVCt5BY%}_#s_2z^}KpzzC-%5 zF`%S*WKmgP#Q|Jod!3Tr3QXKDY9f>Q6UMWz+kc;wMPrXLbjQelCgS-_G@lwIDJ zQworuDsytHR`kafqGg`A!s~fJfxv>|^>a^8d#jdg;vYlYwnK(~P zmNYrostxV%a&^Y2#TlS&6jHUTgQHMKdgs2{;O3|tF73m{=M!l6pw)sR1pZ!#Z0bem zx~&ECZ0deIGlI?ev2hX++?BF%_v*q|6hIw&VLpd{^}+nWA{tfGALot50nT(Sc2~{a{N`IDGy}iq0ACd zXIA4?JmpJlcJg|*vvME2{xC9*cDDEeO;wKUaG{N4rXPJ&*$W-j`6+aWdez}q|NCy( z&u`&9H!iNUBV7ps3D^dKxKYgZ2!@F>~&1-MuyWDOlH zZEnPTw*8T3plSV7=9>(VRFT zzjVWI?22J|gAX>;lcc^rmND7VFM_*9?(r=irtB-ev)sE^!A;z~!( zc>ppBAMZQ%VV^9~I^FIZEEcw)+^`SP;ZAoVm@fm^3$FGSgZJh$*DtGgot`MZGYUK3 z=0Fpcai2;DF$Owv&$VC9kKx%L92b61JBvf_p`Vm{lA;yW_ALm6YAUjtu|%9nV9C?Q zgg2V}J@54!d|#uAAC^3HE(kM4&QsO-8QfmlvO%tb9_9*ma1`X+U&{W2;4nLUN7WjO z7v-7clV0hLIHeRnK&a=xB9GbPi#T==iL+S}8*gsJQZ^z>D)-?mj>4KtzSe~#?4Sqx z+L6HV+X#7DBx+Lw3gB~W>@XQ%NECg@7=0)JeJCG&s0)GY)w~*Dh^)>{!yV&+Zh}0s zfik5MFVGY4z#m2Q!*!w}52v^jSIQjMg~GKf&^K4c$9?z!x41MN;BN5~b**6{VbA@0;-txroPP09ylei%k1F)!um$sJq4jeWh$ z&|F!9hq+3R_mNdKuO+A0st}A|`&z@B_^wX{&a=d=K&xtur z&-h(-t7W<_sVk5cmHxD^m?n6u(?q-=&e`_;qVGe05A!>xX4SiVl%H2`S~z5yu^rr? z(vN~GoW+G4Tjq8F;UVf<}Ay*PhA|pLqH^1Qd@Zt23E%w}9eS7%E6aL&x@91Xx zqTSW^Qt1hOY98jgwTwN!lX-GG+3Or^cnQ6v1*dYpItwJ$5m=jj;hQ>{;AlAb#^BQy zyWzQfTh_SpjUk{B^M?4SD<@GI{i!_sRo`DnYb4rF2?gC8i@=lXP-H;hOY2@JZ>z_p zd3xJ|X=DG+rZi4{!;C(Sv=}zU+_y5YHg4G8J!Sg(wZB`JkcnvNrN@Qr(>{4q>qz*P z;!ycMDj}(ufZomW*=tp#{;qj7h=#8f2)^|#DogGIk?-sl37+t@Ji`7d+MWOknyF3W z=WT}~XnPmbsK+J#T)M00QuxcwmYwX=IgcR6;`ju;H;$KGOd!m6N5q%>-f7+78TP3M z`T4@%7w|A6;*0pmE=hO(rt2DZ%rmlsG}yTQEYvny8hd~eMp+VkCn;z;h%-kTa&>($ zcDV9+=I&T7#f5LtW^OqsPHH)Ws&qYI_YmyP#cpJb+i20ef9dbb0bg+F`?6IT?CVYP z{PcV&6YFC7EYyd9xA6si=7k5e3Qaw>Kf~P;N>XxMeZKTHe+;`{4#ytOgD(8qwhVW( z|LQt@GfVE~jKOvS(sOX(M18y-j{DGK`sorn@&bKcBbhz=aeWC5@%6mDoO@nS z+?nPVcP?wiPVqbpPX(%S2uCU}zyvGg*Rw`QoC_E0<|)L+x|4Dk7NCG1&U~jNv8bfA z3=#o@m&YbX@6#vwc3B14aK^#cO}+=vxYFCLBc=WbGU=P%GX|;TCnaC+w*~51Wo|>` z77NlLj+K#=j(usd+ek0Ya!sQ3=nE~81Y^3n{vz9~m`If-V$x#;#x-Fnd<5eZUw943 zOUshIA~II#YU8ZIawD&Oj&>sIs&q5opGB1r;sj~ALcB+2#}-B3v21R<4UwnbfjeFSo*gj zY7E&^0@-6|TH|*o&+4P5TaOq%lulBwZgs~jrTjTJbc|5TzQ}&?97MnLqrXkIicm+g z!t>aCH-VHatW-2z=;@j4RQ zy^k7%`4B%Dof#Pg3<9dQ05%)&*{_4?zpYL2MTmGK?y!XGI+*qt?#TqDSZ>6^j*Eu20p^tAAjQh55S+@7R$^F zMSCGGm$a5JyWMBSf!^j8zIQ89>_xpvWF70JwLIIMB|vu;0hV$HR|*Xb3%w{Z0*;msH$-K6aGS$ib!lW@Dv ztSlXz{!L|!xZCYyOE9% zRO&9kj1J3^U2$En5uMI-G8L!&VZZzEAg5x9)n9v53}#8hv-Res87Nsznof=Md4a0; z;{AlJg;lkLCBo)Td0ImhPk= zEE&DKjN!D=X-B9>vem9;BsLc-IH#hJ6=qOa!U`L8W0mwl(EpmASYVJ*^+S$*K<}$W zD9aYLal?dlwXp!ol!45y;_6}QrmEzWzracZ;Y6!SGT|RXYJ3gEuKl#r z*IrHh;i=@vah$aW?4}1()!r$vxf~Hv-Yk5t(UJ)TBL+V#)fNH9_DP%%dkxB3TQ8;8 zt$0`09|o6RSiDG(@&{qF&oYDpnqUU_=Kh3WG?KgSCwNGL_RovxXLpYNfsEIplA+4O zW-Zxqk!Jph2Zx)d+CsQLh)bm=#7ic?3t30Q#Lo^lFDuV;oCF_u>c5%XoduMaxePh{ z2-4QL9VJ{vDeYUvIDMUr@kc$<^)>grXMnRQ*gTpq)**4L0Q8Q->(+v-x_3mDy{D}` zBiM^9ek;;PMyHNE+Fmr8Y&kq_+1%?xt_LMImOqx!O}N{O$o@v>3*qD3Zmjiow_*@? zLEPCL7qU87D)!cXiv3^C36TaukhTR`ySr|$Wr~@?kkXwWfVyC%4P3;h?fw*hfJYHOGo*W&&XS5=&+<`&*|e z9^1|Jb|xcdF+*Vu==ZU=p75_)eQq9|*fj=d-w>wOX)^8`0BY1;8`{?CsecWsXZ-AM z428GXTGF&K#c2@dqJ}4<@x)n-nK#&Xm)>5MnTG!&Jt0m*&o+}wL1go_RwJSovOZYe zlS#$T{!w6$Z>xZ@gl)_0=mW>WftodUq?e^M#<_`}8OP^>{35p4g3rO#6C{~#TaP*j zKl4p?{poW!=P3@Ra$}C} zl^V^hOTXaGMvNhGSZcirFhsXbVEawN~FTI>Vs)o=%mXUVoONWebaF0-s`nk=~J7L-Xi^nq))Hs9KP50yJmoT^&i& z=z~c^bBxHC zQ=4oyTIAkS==w_e{KFK}=p@L}>w@n)5Ni%&#M<^MX$!8>G#-?z?<%YA%Fz@ihI*T~ z5oeJPK;4`2yu>hFUc$D$Psvnv8Zy4AQL92Sv*`P%8!k(%Q!3-C`;52!DsC@^cRT@L z>8gROgsgd$;-U;9CsCF~h~i1E1d^4qP&Edrt&`PCXUuJNma>+(mL5w%)|%?fxA6|3 z%kI4DPt{e`@yUtFQPm?xZ+`zwiFcxGMFv{wkp0d6$C8au?X!Uzf9P`m+2lqi8!AIW zR#R4uR*=?%7OGaPmXa2;R`q{5y08eac(Zh8#bgbu{)T(oeLnkbS42}u_$1(%S19Bi zLYTz=B{Sl&19`aL(FUHMYmwyR9{6iyN8aI1Tei?WeLL(j(H@jIb5O9d~FPQ=E zQR%-`MKT4XxvichyvVc_zl;5F^D_OiI*=mp_%LDi?E13$3|$)(TDy4Jm*IoWKi|Rz zyKkpo1iS<7xkDerow$)+JhBCSHbWcCyVDHgfK^MnK#14aps0hvW!WC+K`7#{msQ2J44WDm+P zAynBRl;N7^;q1>Mo-8shu+u0U*|;(W2*44eFp8uMQ%C&;>$mXNaf(wU2$3Mtj2st? zAvzpcdJgXy|1JdinI^JXIsOd)>K6S%TD~u>tXX+Qa?XdWd2h88f39@vZ0>GDUb-Eu zO&QWguT2SSD{mIwc8W?9zH?;Q5dQIkx$DXhz5+3#{QZn_5tq6_C} z(*JHl4hEGQz_~k%c+tuS`a8o|(4lfY)D!EGB@(rk)Dw%50}|=YNK*bfG~$~)h_uub z%aI|}7wwUQ?M!qgS`j12AT z7_RJ`EI6&^k?6TpKD7q@mguIYkDXu+aqK_K*i&j1}t(bm?m3OMtJAE z?T=9i?vMGu@@pHa*sTmTW7oE){Y-nx^X5lk*eOWr4v-wJ5CA3P^X8aHDpyo%l4v4xx-}&XG9^iv>Q5_rv=wi{ zQ|C)6rzO!yWn}m1^+HqUV^!S9^u0rI%A*b-U_5a$P!hfK6y6$^E<-FU?iYBWYow8l z6b?7hJo%E%l4&D5&ik=ir!_k`4j(bP15u7|kgT5&KR+YPq_(`=qkWVH{V`Ix#t_;@ z`xu5oZ6=3il>UUlZ%L2VME6K+OB>mY?-L$FH92`rVHsQ&3PC)CJf(omcf+s}1$<^t zh`XpGzv=Ey`3k>UWO(l&CP0#>4v(d1d%QYH2D&J3Iz(TML1sm(kN14B;7@wTJa(LF zP#hEPB<|pzaPBapGMBDfSm(hCS%?ONB<1TF@*p_wQVg+_@LVi1Yz#7o{7|6y+-Ivz zH;xR`9$F*{(H^};oxju6ozgq>c=e>2;gK~lcqxJs{&S-AQU)>*X4g@c!L7KX!)wNRk=VCEo`fZf@=OQRCY_S@E2uJ@-aX1-Kh#Q3!J9%L6?s* z3Oxc7p(#H0=`R#--;-Q#-pj;EH)XsmZthS#ltd1aPl2(nPbfmnlb}R{rg!~A9ti!M0* z`{^ukRARfvvU6fnTd($P5W7hrx37lV-CQM~ZUU`wE*F=QG?3zRtnlVjjMtYekhM9$rT9Xz4sY^Sn=>BK5;gd0Ia}Snj3+ z;E9{T(jqMna!Ih~z!sJ=NPK4j8mv0S6T5-h{9x!R-4xMA0(s=Qpgc9wjT69{%f=0N zSNBZcJWIa3-3-SbSYXZLxcG&1GE%I3i}t*FzZNk^d}kRoCv;~V1<%a1a;*srr3f-F z-)Ja@w%>8caePz`%PXVo%7O}o-ChL8L6IQky=m`P^NzidLfwbXQ1^g@_dZhYLr~_D zXa7)lx^dJHkJq&GKgl{1yJ>{cJF!3UXw5vKLOZPx$9|W}^_Bq+E#(H$gzo(&(zte) zW3lVcc5XOoG|nglk&1VMDgTWU*;0_7+YsVvz+t_wlQr@@gLk*msJ}kk_N|E%T;}=vjX>@3mRtonEv$ zSh@b3%d5;Px--&IP zGHi$q&)}a?UCiKX;KmC>3?o4wl!al<w*> z&bot|R^Qj`FhG(#(e~nAZYM-Ox}V4|eoQ9fQj>2N}{Vcuvi<|}Sv(g7~!(AF4 zn}R;4Tl{onfAy0+6+PeZmX|V{k0G;xv%_W&Gx4Xe((M+8HB4=C3~? zf$-(j(g}%>F+rI_3?ZZQw0wXq<)8mH&daxU1m{>QZrf)<8!m42(vrCV3&9MTV_iL)v{i11`z$MH>IlL_ zY2L~gChMsLv8~PKCiP)Mz=N@oAM-(jiE73-r9Q9NoYQ=%Qw|HVZ6D7M_M7UBG=w3P zu-We#r8P+Fo1|B;jHSPy%O4eBUU7(?BhxOuxO!(-!dD{wrC0m?15u6kdsp4({@62S zci=mk2vzyMfzc@5P(DO*S0-u21Gjg^nz)RY6KL5EL$#O&O2D{)>jk0rd>H^ueasdlrc@EEG$T(k8QW*BG@miP zNb*!|p*JS{gD@1rybtzPva_G=O4hT@ew{@$QSDNHT9`aDF_)b3 zP3ZEtFu@|L)a9>$%}I}a#iFf^(sJ|USn|6-%`p4vDf0V*jM94=8A_0lOd!c_&jZCu zKHGIZt73^jg4lAtKx2`e@9f&-JI90UP_5+ygS#TNiGp>pUMsO*{52-~ww!Qbjnx4E zdzh>%Et)L`aVWlBWfd4x7QFfxxzV6Z5{y(v3?}@YNHdf@cD6T@Av|J|Y|Ad} zbqASsc^dt;M@%T3lS-<>YSk9}*O}rC#*Q4Hb#;A-4UIBV6054L5o?WAa)ZH($dm{z zx_rHP1|Dz1*uA=J3DgVM67L6WE7ZsOK7LeZZmkwocMhw|&sfMTw9GmX5*pm--CnkX z@(v3HT6{5SeAl=@b=A1+*&sIkPCrqoz*2x?ae8WohEg4_u)?qhpJja4dnW`^M;k6T z*)2*w+;-R61EF7^tpJu^TwNzFVtoDB5)j7xY+#iO{j(P-IMh*bfy zVKnI}Xc|w5grTxyG`x*yB$vTkT?QlZ93S$^C>#lV(0hS4kmT=8ofR>|1YZ>p9%H2?jPlA z)coJA?vHg;sYyQL82*6I3uRILich%vk@)Cb4j;zuz_2e#x<*48s}9$Fs<)uLLHu}-JvmDwHdpeFi%^% zuDz!D(yH7YJUvJA3u@p&5|ed#Qe@nLO&RI0xPv)r@{3HiIbKYUpSb< z-;gxtzcaEuOpN)Ps9~uaW3>ARes3Kz&v@iG`kT0Bshejszek+3Nu0DseEE>*++Sf5 z$kiGt4UPsXrsID^hI^lYO1vzr01VJSeKIfM6%h!+YasdBF^;n!AU1_{!%>@ka4}fJ zYAoAIV_|$ZU`_T*mhhi}bHHAS&Kkg`fOk4tPmAmfF7k(>dkS=>098dg)qt?%jLkm zYs>Gjv1iL)qbMf8$I>a5Q>vd{M4l}m;dLZg^TTUDK+DS8na5#)C*KZpsvWpxrgMX0 zhYOEf!21C&9T~m`fEhl%1VHd{p@TOK@B%S|6+rqRWn{OA_Zt0-#)JmQxz|+=esW@% zM-^ol7*p?bP*4nYTEO3-v>>=q%J}}x$O_hy=JT2}89FH^ z^uYDsz=Rg;+)WJs+9hPTg>8f$S*go)7=$5&(>oG|D4%n|8QbV~Kkd#5!4+VD+cKXTiAn12Keo&IAcN?#0 ztyJ=#zer77)0L1o@))=7aw(%<{g-xGjKGHKa!IheE4%$Me(;-LN~KuUrIc`XRc88A z+e3Z*rBc|hflq?nS^4RYvAjP-$-KkN7D*Enhn$8!fE^g(H3)`6@kisdgORlXsK}w9 zGp>K7O9#s16;R+O!wDXI;Lx!ciyoiRICM-JkJDC6z?#$!aDLw`V)0wIELks09JG@Fizj8Fs4g8AVlK#rGX0!|>+ zBlz@b1-|nUQVRgSxTA753a}^soUqYipghFCf{!r<5ZN54jE>jE%atdrkMy*}3-k-r z`TQr&oZ$_eXu-{h3n)cKNj}VU`jX_06W`pwd;7174inB>uH3(GMZ@ zgkuieEZTqoU?Ffa9h{~SA$x<0%8=umlb3P2&@p9u-!l*6m$@+~H3fq^K)vXdmeQj> z1U%!)SiR`un&4bIn?p9T(~q5$Uw2pXj&<~~_7F+aS7U4v{TT zNEV8RduQ~*x^EWyf#Y6weFd+-5pn9<78qo*eJ+5_?iGGJGo$fh(w)d@MwcE%#f__y z%>JQJ$H>m4%ZABehlzPp=XH5iyw;{LhM!sy$5$#I!anE{5J2YfBgTc>7`+7Hvta3% za{k&cm%j@ARY4D0d@J$S8xoSP$a_7soJPEA8VXB3`YcN^aTx*mba7gS5C1N^C#_ae zKKUROXu=j5Z&sLhl~R^};<`dKAK58FoQpcxOAeJ|FLH0oAog_LXDp86_Ol%ilCYkE zcGK|_*;;!Y`+D|6VSUU@XUHV$kbKKpTvKiJcId|+w4crO~rJ0KIz)IangBV z2<{LkaC5y)<0Uowc9vn*88L5U$_y#xXeWCHnY|3nvE0!hNzyrl;Eig34UNd;?p283 zk~ukNlQcOgdqWz&Dq$53*a0*%BF-yh4VfsT)G#CrjNHHA_I*$)4cM8PMS-}LLFVXf z@=Q)^Kh5jb)K*q3ftwD|dGH2+cN}lddb9eICgyD32!@S2;N(vsnKq>P8;3 z5=uB%i+kJ)MvjoZYXWv}&k!e%)nDe~(hvDkZrv%K8=tF$`FpuxumgC&#hoFA2i z#xJR*by}EB(r{)Ql_xsO>~LUZq0v&{$W4pBx=qCvypQLN`HhHv$RZ#Ya1NbN;DuI8 z$)?VE_onQ*8ZR;Y{~lT~FPNUSSR}?pZmRGSo1vegtY%fnJGa>;G+4Y=&z;C*;#W22 zDUXl}1PW;zs1h0;j!t>7Eo%Jt*?TVJ#Y9&gi%~omS&;!N)J0Vv>K**Gr6J#6*T?lJ zf9fOrcd{(wBb&0G$ZF$^hX`{F;uPfg3pm=%iuSCFyO#~^eSiJ&$?-7XGc~&3r{N#! z=j0@QR|l*Dy}z6PRVFb#D!4f|9Yz5?h;p&?WECZlM6_-4wd?Qw{L`E`x#prkrfVN0 z01xKU8?z&FwZ?^G9!M)1ZY@(eEaY-S^$V|qBYCNHv2(sL27uP-Iy?eh)p%Mbwln{UJ{ z%Jh$}9l{xK5W)b?QfJUMP)-#d^eF}Gjc3v>KU~kBoYdvsW@Ad#4R|;Qot*?c@Ku5< zd(b_Z7K=B9gmm;|r6r*l%KIDCGdv;962xiz8Db}030*5R>WfAO25C~@>*s|`fI z_~hNz89c3y4ys-YtX})AUiH+;AX$XoMY0B%@*qlzl8yorve(yAq;;Ic*?Klhh zs#VdOitxohvp>QTeqPLs5AC9pQoa%{O+$12ic!+KQPkREpYcm0bW(-vDff}4;*bhv z{zLL6u#KyTSvl7Gu|5)GfcG+YGMbprMQ$q*U*3&$=Jy8Az7m5>05_wW@fOpt9X;{fActa<)VO*OC|d>1c0PBAt(9 zg?zhe$eMD#hR!M2PK&y*o~Y?I+c37YBW3lmE#ZG8`!kB;d14)1_Yb2vQSxwXo~Ub| zaRiA4bV{%ca?tAIk*=rE>Zg!|rWJ&zkqmbu?JZI3W04F;BANOAOH@XR|3vbIR|jPg zL=C0~s!O&33sCDzkbFO&)o0->f;z~L(frbtZxWZ$woI@Y#SEfC*CW{DoNKzVHzG={ ztwIBuVBt+6K~1g!I4MCr)X0fuxQ5uV?4t_AC*`rA)1w3DVXe}k@5v1_j$-zl@W-YgP%vFB)ER5l*}f%iwZ<> zpZ>xB_XOuI0KBB^_%be7X;b)}BmX-tOpUPTJ@_nfQTL8h<|k0b=i^)8$4FzzSA5mK zX(z8P%|=8W_5EPNC0J{JlJ)nNX>GjD1iQkiHAAfyhI-$)%+W zA*og3eHD2W#}{{MPl?P_Oy_79CI&8)R6!zgC-XfF)R_?@tWx%LXr?vw7LJUA@hDl{ zoP?f&nBJ|wtw4q;N|c37AdOR%9ixj^)&1o6Rs0Pj)HQ%RL-HRYcBz=9$*)@UU%75< z&aF;WzHu;U1a{l|5%n9qsv6EyOWHXCaNQv9bF*GYz7cp^YzDDTGaTCq%mql8Z#CkN z87`V>#|HzHR_1tzbFi=QwwOsc4M4vw8aLQ0+`1Tf<=GQ+fFG^8Mq1%E0B-QT!QGo0 zEktJMaAOqry|DLK$&;%qlZXLq;Q3mV6uwo){|G@t+3H&bDxa%vqBZo>_p33s;~A@> z9b`@!_8+ZcM{PR|PV*Ol)MEo4SOr7r1ZD}8|AS8IJIAwER$Dm(H| zZ&d8Gtg{aA-f(qud}Tjg+7CQiOJd-ky+sa!oVr7-#RXAzp7y zJT-pf-(W5Nmao{+&8A|^1~fL(-N*{8pZmfJoQ`Z2Zzud6RAG0M;1{6T=09#lyfpyr zC!5%oM{!mj5H%Fjb=S1*VL7uk!{3unbE0Vc(jI!d4EquqjWV^(nwufIDv)tf?C2`~J;JBL>PT@1D~@vX!vJA3n|P&W$po{u zAf}Mv;H){hi~4li$IIM&C)Ewiwobz3gx>@2^DtR%tLs?J#$xk+-~{6*JRWG~IbFq`q9C zp4y_WL$k*Dn_ddn5C8fhlcwX)#feRmizehJFJY*zyAVrXn6ib4noo0&r^|DTq*^8qAqEvvN<4MKukOZ4BR8`zM?d4v0b9AGs)*X(FO>3tndpfP6Cu0LZw z1~;-dSP$Tjl7aXhFWb3szfj-2?ya3(`_HNJ# z+_jjW#{s_w?o7^!lNuzlPqk31?qK?Yx`*sZk4vRwN1|ZG{RRRNdj(_{cqU@-Ujx+#qWJ9 zvrD1br@V(I(bO8Vx=s@8j(+m^<;fd7&*H^F9(^y6^(56`&y*Fo|5-v)AS ze7xGj|I$xt{3`LA;EMMuy9$NPReko^Vs7h)L688ycl(R?HOBtM$DngDU2(ob=1SH3 zR@^%8YxaYB3va__Gj9>^U-jKbX(Ktn7)4WT6pH`h?N%=+*y$QY83YGaxTT>Fz_GX1 zmsw2r-n!+UXpgo`{YX-e?~Pr$Ux-_{gQB^(NPLxJ$`eFjz8*U*H1@&e!8^5^;Z{Po z8<@AounJ%Y%E6$3nr*pnWgTCr*Aw#U+ z5@3_fV~reJ1swjExolZx>JIBvcz_6Z(0u}%iTUkgcj1hgLZaDEptk@j{BTZRNh6!W zPYE->nn+xYyoIW}DSn!zIDyC7%GlmbWD^N8Va{xF3tCM7S`l{zSWKLu>r%5l^w06> zR4Hmxc&%dSJ-SQ|NxJ!XRk>I@i{_nk+ol7zknY+v0e!I8(ElcL~K&2Uu(k5oQHS>= z4;oKEXXw#CHx*c~qFSHL8Lb;81;r#`6B^asO!T=LrkWS&wcp%CQvR|_Hl%+N((H-~ zLC-!O?enGdn072?${y{TPu%}u6rN&ai1$tT_u*OD;aT^gAXoR?zY$6LAnM`%H+xj!e7w`KC~iyH%eN`hAkx9> z`{9(nr;N~}f!YwOZ}+u)z*yVF>W}Qp2f~Ha6QDO7S7@K!#!r<-D#I$Ozd=a{|AhcD z!)m>RmWt|H8`Fur@P7D{6MUG0*7T~h^(Ia@7R6b&xSpIo5;fmqL9J5s{0Rpq z5Dc0o|MnL>5emm*&8Vxa#%Zf=(b!ymg<2FBxD|grk&F&O_l!fYD-mQ(C$cm?AMIvX zLc5Y4$}8&RXtcwnR=kmRD{KCY*FoFFj~8#*#1Ba4&3TT*=o!{lVv7@1$4j+?Eiq>g zz%zx$JAyQ?bD5j9UMiZ%&a)@&vWN{h^e1GApXvE8C0MLVH^Yre6^{NTkMEHwm-p1e z+Wr&L#K^PoUWH@5-v>~BL+wxY`i5G_vSpOgRB7@JtHvr5IEN7gtB4VdiF}euY_lX7 zri%vfBKl+U>3IuL_7L|+Q~BrSjEYP==UMiaLX+k~lU_>`7QJW54go>~V#Y15268SS zk*OkvvVsa;+W8pqSr0LoWDoGLE$^M{tpS>Z*97hPrS4JWPF45(*nE(*=~UzEv*PPZ z#$~taL0{XKMBj^4@}Q14vFmG?3otF-3NA*xmL%HTO*ezWv!gJN!EB#ZOCU=Y%4L(N z76!w&Kz4qd576aqK&TAEhk|L!)RizC9xO66&mnX+GGfrXcGa5uYHD9ucyri*{M<`bm#TkNH1@VO3cj;HWTFG2%2fM7Z7|IZPT2MJb(`(oA|N>m~pl>YnpuxF>6ztlAgf zHAsdN{6CFjhMHFN8H5JJ|3WX&fI~fEW*GTkWtczQC#VP6XNGN^Uz(*6P7rR{GgI7r zC*u9L@8(gmkx)c>rSb$fEeHh@3VDByRX*2mk))purk$n#CnwzeQxNmp0m4>|&8SZ* zOdtiALFly%fpU2xFM(vTD$IiH3rXs_dpJ)6RZ`;9Z{G@NFP*Uz=7}xP>x}9!R zh81=GLuPYLIjaW~x`9JURazUHwX-6?Cv;&}MK`pJZ`N zb9TlK+5xAvk!%K@GroJbSBx)z#}K4r48WN#|Or?BKSEAZK{1Ngdq zXS8x+s#|f??C-5lz13-F5Qmf05}Bu$b(&ApkE~e$Gye(ct3v6GLd(x|r0xG?xtqC- zFg>H08PLhn_Awpm!I7mZ4DU`7W5S|;zQ7%X-UD{g#OEYEUw`uKj1@amefCUStai+s4OPhCkRCT(`SZ!;wmc4kl zjgX#wufZ4_h;Zq#-hDQ|2#s9oU*sIjh7?OD4>r{jRk(q@q^`y)MPL_yi2T*A8C zYtA@241O?WN6W2*i}=@3%wlIj^9d7AYx%xV-sz_;|dvD1`@xX2K2M z&+Cx4eK{dTW1F=i4WGx^K_COUL(sGYc_me@l*0VK4iKLtM&I>LBr*@S?B`Dx1a<;z zNNFYi7W0uiC^vjiU0+*($gaY}63*4gk)F*mSlXq<4x}0vd+%e1AOLy`Ik63&iWsko zBX0>+?T+l!8JZ%;|&>^tFlosd1eD|9}FLRflC0aOF)xLK(#Yn zU^D2LLbc~AuOG6*GV3-MR*ihUmiR8cJD82^apbK1QOVfPVYeDtqOCn0myey6dsw3J zdS@n_oWuMKsONW8)E@3anf8pVy6JP~i2b$|?g~snW)wiFAoFl|>Zm{6e!z_e)Nt_D zkF9l&E8vgLUF=Far^Aw)29Re`bX*2By8~gu8-&3+gU1DA9k1lXBz%4Po1HkFqugCr zi&Np~*gBM~xB9znqjlHIkROI@VqW<_O!3QG=-Hd;nUlRQ$rq&8oQ|FRk9B(T6`h1^ zdxgZ}J3O-MV*gp;69NrQtAsl0oCAw5jeORh&NiNYY&bkNFG8oh&P1YJX=s{nX!^s@ zG{DeScRh({5o+3pxNste^5cUI8MY0#1J5^3hIi^Q+dnA*H>y`M1h9Bir$t;Zt95e- z4HMo?(*z;C^Ju`kKqSpfN><_FA?Q@3FxUeFIeMk$jfQqKXB#1l1<2!+0jGy!%*<`( z$3Ong_>Lqx2x5yuc7C@q2L^u&6RXUr|NKbUVjA)E!>-`s3uO>9at;J=-P@JM8D6ZdmNaOwSwaF)N@uJ8YT zE8N6MSnt`^RoJI^{yX<-0i*p!4A6sZdgj;8%-ugB+iW3XWA7Og@A^#JMs>n$j+EMR z&bo0m4|xW|$mtpFTOr-mb0a{Dhw<}e@?@Jq&RDhWzLD>-QI~tpAy1xFR+Y zWo@qj0C^u}be|OfJ|ySU1sl!&>5SOq_jS(eO*xuq-cFs%YRgov(F6C1Z zA)ish9$SQ`@!F4xORI68T;c~f1mJJ*qdMdvd{OZxW6%YF1IRmucvYOph!Mybcmepi zV@yi>t!3`nMecPj`*c=Uk7FI_fIs>Fy{zfE zrm)!;ni}&g2Q*BNMQ)5`+V4BIT<4qZx7UrWsO`^C02JE+HIn3oe*q04W0@wUU2iZG zhge{GN+7qTBnBN9XKbi0*Oeer5EZ zm{1yz* z@Nq1>fiQsq!8O3pb6;qheEVwC4lDByQUOqhc6r zIOoW5a%b+k&TZ;nW8!~(JuBh5;pMmg+(T|c1|Doew%qCv{psrI@&2bO1L&Uq4#?x7 z3PGUHzfUD%aRpX%n7kV{+_HIB&OMBR-wy%<|I$7$vjnoxkC|N#mLn5W){5x)awbBu zGyRY1L~fP~d_77W-?uXV^%++uy9pI6`*1Gb&BXg1%ljQK^$FFs%PeGL+X*LkLY_a~ z*UzGozU@Wk3%Rfdh|hk#9;6X^ds2RWx_bWaNCrpp1)L9N7C^LfJEq-ErM?ZGVh2$e za^5AeV;jx|1w%O(EpB*cd)X+94rCW?`dQYFjoe)PmyOkO!Xj-aC@*; znCPB)mP3b&$pAQ;8LEl`LC-~HV5+9v#A4UjBJK}A$4XJe%B{R=KHIbDY`;I1iEp=! zDHm7H7AqbNERe^P;Kdf`p^eQhOhSyi3f~@%oK+{h>f?6o{Ox=D#cXdwSJGa(ZRa

xq(5%C8+x2Kp*dYHD0t0>_aXgu6v#)kJiwRtdH&wW5NAqK&Q< za(wL~t+4%T&nAi9=Da~Xp9Eu*;V9!2UMqD|T92O+b(}zSAbH&Q3i!cr32Qjt8@8?iSWps*S_~z7w8x!1tQ*zN9 zPM8Z6fdt6@+z_it6=HKRVxuI2??XC47%0bO956yLy9z18F!~ZLXcPj3Rb(26av4UR z<$}l?uP1iWQx9*fXoDXVFTn5pQq$(6(q@eFLFT7#b}A$!?d>MVydhq8ukW&*Bv37 z$ov^(b={g`txvdv;f8i|h=68X=rI7uzhu?NsNt}Z&5TKs2OWkXU{gul;=*P?`O%(; zl$^Bk$m3FZgNl`Nko4i`wIuf(?JQSZh>~nPQ3+XI*8x@$gS2drFhu#RhX{H!XPkkZ z%6RBXy(?oXz7l|RbSwBw7}k~(+T8#!xiK*u&GL%RIYu`@ytB7xu2RTrAc@pBsts{d-a%w!2cAPMSNIf|rgCqut0=TWPyNoI-Fx5af zd8q}4OsOn{rBd`stZT3}jtw*kp>Gh#ih3-k#2;R>?e0+ilT1#lu*`!^Ri;Rtym^HI z@EI9XncRO!?rO3-bQiBH&y2hO-}FdVJDbEOfmfof31zxA!x-QYV(qTPAPGYyQYOUE zjmHnEw0BK;zc*sR`VPN;!l;eyG;yml3440J7DlYC;GzoJaTBE zb53GFkO2KggRUxTfr(kmxvDlQc{)&K46(gImMqT@Z&ReZD?T;GxeBQGZc%2?k}M9o zZ6rOx_OOP~sVX|zBm19DFA0Le`rrISZfx}w8FJ*zLT+Y#e;_l=fsn>By+1&(J`iLrtPz$7wM4Is;tO|# zKnI{?&2Q$a3WQ225H={yB+mod$rwl($(91}RVfLY0;5p2#UgOmsK4Lz3yefOkR&ZU zMFf|rk+(LtxOr>SZ7sEoM$2oFpsr9ab|L+{H7@DW9VhR1r?^7KZ9QCV)h3*9gBw$8UDTGF7k4K9hQYD~JT9S~}*@7B1NkZMKV>8?3@~A3?5k4K~+Y7 z?Q-kfZk;@J-b&sw9eEcF9$>N$pcHE9jk@dD?s9d%fK3cJsrqx-Re6Vy!7N)~)8QsI z1)YuYQGkdPQ5tH3TM7itDf~)!4~{0(VzYc0JvhtNMRCbblcN-eAg{Qj2zbw@TRPnC zCj>9Y(NMWN`03M+mYmAGyRYC_!HMo9oY%di_Z1xLtiXxp+q`tt`?@pWSo3vWhbvBG zwVKz}r}LuJ(t{R<5<=ZCwKxpP6VJAgtGi^feYcp0f)4qOM0sB4Ic%m&Tr6x5O1oPu zQJiiIv5-OwmES3q$$>FcXqVCgL)D>G6aSO14l<#VkQBVBtFoA2aKb(x$TffsroO{ndms4{Xh7`b~h> zbX}Bd5Eq9O=z7pa8KxHv_6jLdfPZ&i5V%iE?z=uqNxK@0cgM009Lr*G(yu^f106y! zbzdKxM5xkEsQQG7GB3ya^A!cc*Ll}?xgcs@nT_Tw5+17;Xx&E3=J|6>-`|}i9%Vd2 zCZ(8DK0UR5^yr0;kh7lqvd~&sA*^D^$P<#D6YO_gzS`9pLJK+Lhtjb-gc?6Y3b+PA zwNMzhJBsekWrg+!^T=q0u%Q=2v}4zCaThGy&GW`D%-SumTvZTS?fSiAP--K5lvO6L zU+KoZcoq&2a>E*k1VMQRp|P-_4@&RiQcmgsd3GmwKY_3?K@%tF>x93hqPjP??&b{_ zET(d9?OF6l97i)+rk`Dm9Vf^rZU&mqc+{{_*!2NUY@!G=GWb~st&SOlW6VLvIZ_yk zxs!~CIYJe3A~nXsETO79ksMSB}Ak?57>#}u4#)-OxR*6Rg9!)3`?;)yVTj?hpAj}a;XqZPMnMaqJM-HAx z;+j|W7V@o|#*p#n8cVt1YA8oNdAOL|ZEUpS0vVPh~D%5(r)3b~d)(l3x zjHZA>763#~2QkkL!rccM-3&93Xc2pALYOBk64tp5v7c~&Fi$9hGq*eDh9Z%Sev``BBYd zg?YjfVU5s$S7a25;B?Wk87#&1P-8mPN#vz9V7uRx3?Hofp4ur;w5iVk$=T9lZNII4RrFM*i zisQ7S#^OW~*wvufwItGy2~T)CM2KQ8(o5Ax78AQ_*i`-YLG8{i?eTmjrYrcG<)|aBK5P>QqTE#?DWn8Nho}v*dAtI|8BAnGJ zUk}kZmVsQEew8H=$lf`RB4&jbeCm`DzWHZG*3^FeVIo1cOLU{e-M%%5OpVUe=td1( ztkIb=ow0C$kXi-)Iz+4vme*mKb*=xU>pr_EzYK*gvn*7G4%Wf-dWHPHXawfefkquT z)O|^fJ~tS%3bU)h$Tg_3!MtiPqZ;E83IhT9xbzK$dBP%!xk_W^G>{%k*fzSyow_$5 z4IAY2@nhpl0rbn!@G2%!;RkRyL8tfV*q(%WXFssG@ z)}XvKNXR$_uqwk-WhJo+##Lc$RhU|h8ftW`=If6LjMcy?WY#)(Qm3*y)zpz3>#mX2 zd|8by)nKGGzX00xbk;WO)KCX>bsuhVM=OHvG$^|PwQaB@ItApWpnp>sQ>GZFDd1P9 z$~slnsjQBqU8k}sFmDR3F$Mljff-YpI#wlJn*u4O8eW{H`2=>i2_QSsF;wOWb+$j& zSr^H(Ncy6$xfTekgf-<9xoE&48xW0#hQ7P*q-cV+Ptf)WFnK~l!A0avb^s0$76@w! zRofI$o1&g6DAg3Rf65^^MX6JiIt4_gASqJ}!W7V%a_FFYOuyQk!+w?NJhDARxxN{v1n>* zu!R&}t@5#Vb%K@TI+=8(vZc^H)&!d9nN4)dW)(%gS$9*?1e#`ZqVtdLYOuS-{XE)a zC7Y!mLlrho#5RNys-&}g=Q-o-yt@zaT*Q-vTN1F4mnng}!xyzeZ()(p(Llv`V;{JfYmg1(U?BlOn-&SZSS<24O7+8Rcz_>r-t&fNSzK3^2h6nPCrO zlV@O`jA@I8Z!BQDoc!(T>NC$%4s1xr+H`8T&Mp3r*wppDF z92JCfs9k4*+Q1|^A&CpxRl6}UCb_IM!_c3qQz4|{3BPaNm0!NK09#beSyTT-dBs=6^jSXvGX!6Msec2Ucl^rs2l?y}6Xiz<{5_7fHe ztAurMyNNX4M1prSdOu--aGbEt6hs_UdI>x)fz2hDLx~YBlcx;+l*w7o27U~%)GrJG zI*sv|H3h;d(ut32KjAoG6+r~SVbOQ)41nVOgayJnBggZuhcJ38joH`q2+9xOn+#{O z%=0)iah#MY&sEYHyJlTR&gQt!U^ieegw>p*rnhMk!m74fN5IEqgzysioAhJ=@=7aY zdCX0@<#bBM1xm{z)#WhBRG6O?SBZ^pp>I&5W^#>Dp8yI|jD*z%cFXvkLsYMooB$NV znAyM%;7xJqqK4$()Xp~}L5Q;1AtwTEL(!zIpf6X3eHu5hr;E?k9SoW{CrQTd%Sy|boHIDx6U44KHFQO;UsM7?wrG0y-=Og7b^z%vvmXEnh*WO(z54Y=ey_e-K}`L zdfi$EbRy$($3n&Wzp(syZ(1m&@k+cYD?2LTN#eb{SZ;d}h8K*+?E1xuMrr=K^%EGL zzwn~K3hRRvnRvoaa~^|u^EXsLuK~(Ny}zr^T6DJ4vYvGHes1p>AceLYO~Pp*+_kN* zg&&k)2*8|s@WfGO<0kp&=iGDeoMrP-dog#m`OIp1p(Z)}n>MYig#B5AzmM_4vh~Vp zxo0p0m{+&dfu8egYoGV#yqNQ=$JV(09p)QvbeWPq4d|V3O?yLq;IGBZpr|O*n$+j; zkK#AZuD!629$$`9uf7m&@G(ehvHkD$b|jH=Su^C$O@pX6#3+n6@#4B*y1HlIB$2Yz zqUQ4zwQcVB+}Q;A6%yq7qinI&+Umm=?YaFbj_cI^Nl5aoj!lC5N$XSJ$rE7|6R;% zF{UwGmcXbhR%Z^Mp3Ss`6b~0P9huTjH-4I9G&K5Oy1susIlJi?AtGs%sq?sgqB7b7 zW>A0NagLj%&(OuS&KFKd^#CR9J>PGEA3Z@&?VGF4biPp1+mFD@BnTz_5T#VLK@ykd z96c?*c0FD|8<(!eixb^(OUxv&j7)2b?=DlhK-c}9p`DzUdy~$Mm2N24&naZ0V}A{4aFTUcguN zLih<5D7}5QNk^S<0%0hp!@|FOu;*Xs{})PS>5tl8q7iTJuDZj+al0$^dGD5je<)bD zV1L^9%gyD0t^Fqu!3d(9`h2jdz{l_WVN-t|dWnKu>T|0FRL*WJ>u%$g_gvVV`h2{m zKt&$Eu%O+t;Kif(__7K=ZJVU|d2gXBb=JJDU|s*MRlSD&hWm-qPDtA!+#}STBPJ8+ z?aYpXUlmYR>sD79W{^6YTUKyi!LbFGr}h5u3E`d+ZtC$!^ybj;srR`}O8ZCPE@ViZEvO?`RqZvEdhO7H8%q}aq!&Mlz9SzPRkQy$ zjXfo2_%Kw*dxhu1&eYkh+X|NTVunoCL4Uos)_G9-7S|Q1uZz!=ZH`aoRQPQ{O8rtO z2%gQ~Ap8g6qGkD6AO5V&KR;5UwZ7NHhF~G!mbNWuE-9q!tJ@uf@p-fSL~}WH_KVPQ zZIV ze;xp>+k5_MqwV-A5unFJZy`{xPcWh1w%V}G82#+wBTIOoCOl9}AO2l|hUwv^f^7w= z_0DC-Gn=m#bW&Q7BIlsi?sXOM_=>mW;atRGi+7%iEZNJwz=t-#vtcm0s;1c=8wP9f zo=_$IHQXvO8AjoTz`ysCf}bteSDS58*&73n&3zYaQfDUa_qq&|Xc#vG`AqFm-iJR@ z*)o+`M-{4*#{z9zAmy4>bx|RxxTAM37W8QSN+S*F*~1R3uYm(k+CFM`Z#q#~LEtbj z?YE*G*EI>=fS!BPk#-GyvCb)^{yi{v?>RDf;sdB!?(*S2joA-2aqeK+Us8B5M|g|y zFv@?pK(8U~%UhbsJucCArOxM`D4>L+W>hD#dp>_Nir=8fHt=iTb~-E3Fm=ALqF_w{ z2>QZs`TXiae20v+x?@vMsYcGuuL(McLiXpzqo_?|od_hB+myhSPO<=MVt~Tg1%J7y zx)ufab5V@*+eS%^3oE#-KH8`26Qr7TlRraNB4a%#-OHg&$D?^iTJ=RXSfB!HwObXZ{X^!yin@{8PdoHM5Cu_bJD#=)9) zzOPFm&et9(IP|_s(@veQ8|gj2D-hn@wC=9WX@aCo8BlP`i_nx#oo}kH&9(}YeIp5w z+}0qRFI^_QPDoRimIyW44;B>ssDKPVi|h$33ii9R9%beR;CH( zI&@W-q=ehiPid3%>pB@%cL?bai8%KgI zdjXIpb=<<|47K&&n{lM}%&cMi@XVW5;sx@{xk*-@%O{2)LKahgQWvvL;phoQB2S%D zDnSQXHP0_*m*Su1)5V-kh>OeDB@AtuerwNb;QALrEz?r!;tDnDQeUeLDb@bIV7y+? z8-tOl4O^iy+V|V~OvLr#x&-@mL~{FcTfvhkd;O&I5aigtwD&*VjE?TD`KM^%EmO79 zrVtrqOc^t(uA0`{Qe;vWx7wh`mID{<&4OsDz+jEqIJ@`SKS6G{|C?mKd_5{ZQsb7M zDma8z!e1}$T!-43oUT913bx|4q4WjG%ldTrg#t0&yDki0tSl(Fp+K-lX1{yWL9wdj zRndqG=B1Qtg(_*?(D1^f9Sa2Hi=TcZyy-=w5}Ecmvk@_QZml`ggy22rzud$+lU&>m z7+=gw;?V?A_>@q+{N;9J{8@AN0y)RZbQR83YbC44ceg*cXzB8t|2sJ0-z`F(S14rV z2H_GRjayms>Fb)gH4e*=#mFh^Z6`khhreBRY~E=>?os5ub7)e^(eid0f3ok^C6ip- zrE)2VdV|8a4wLdvk$UbfNX^hFxVEtgdHm|9?NYt(#>n0m}`VA}XHoH;WVGMK?WIo}CzXQTE`r04OsH-DSNj}lVAJapIiLx_wJov^SL3$)gwCmv*U}KZlTLG&P`})1r~&j zB{w6kw;Tllho|3Mj@Sw0mtKO%idzxKcMR;tnwNKXAsTRkb=AL5BEeVyMoK<68qMH~ zZ_p7Ms(8=KL3_9VD~`=EfkLLgd)aNzR*?U<3AW)e?Yeslu5LpTrLVV{$x+LKzDnC9 z7tA;2Y(gag9e}^F<~U~g>9xhwuK&vsw>%$nieA&p>5HF#^a}TV94@pPB7>kzRBEqG zbln0&66t%ubvclKIpE#8xZ3vrZk0I+%g)BqIULY3_y=vbOe$WE5+R!#bDg2b3h8Et zB#LqzXkz)0eca74N|=kd?M3+i7##aAJ;1n%CeDjiv3NJ_`_^7K8E`1VNG+jjc~>?NP_A7&jw0HNPm7Y9Z0O{|Bu-8#S4sf_t*FWLbHdl?V+Pw1v`0=M=H`qp2!KiWt|L!>J>PqV!1?MS%R z0m-LEUm-~)_uZC=_zZSR*Nbn9Ydw3%=y>g?!)Pj7u--u-&N#~*8I*3*{;Lrx? zY%;>PdXo_Gd!3_L`QKuW?bTdCMoL^#PeSb0i?-WMfJ5Tl(tNQ87ndPAF)}XYQk=wG zdvH0m&n19AU;4ngAm|T^TV8ZRt_8g?gaTt|9qK-B`2DLpr!ZM?frnSC44@ZW5{f*X3?B_zYdww zYp~Ji6PEcJxW2NMD|#{QkPSR>>CC(Ig6cx*;=w>=-*iUD#VQ6keKEg5V`#df7ev-{ z^*~al!QNN)!&++zkD}X>!~7wjhzMq79{K>@bee~3;h!Lcc}`y!axqM;MC`J{+uok# zo4yDYl+L9s|8ir_N0+jUh`WU(>4;8}RG{QZ$V&dOMq6Dv^2Uj@8K?8cxxyQWC!qHE zdWa8&6)6?VU;+iB3Jt{9opm}FYrG!^(M1FtQjP#;sJK?tO)qM_?U9K4-Xoc>>4j(v z37h_z^_OT#fH^mHz4yD$x}qrdydBzzqJ=C*PRnX~(2Iwi<~;m6BBk3yl8{+?eK`?m zy7ZDhyWCFv6Bu$5(u@HEWN9*07@NfNcX=tyh)lY!jWEWtaTpd*l!T)e9DEOq;ie%5v|dl znAK9J{Yy9YwcycxK81oS-)G3bqy;Yh`GD|*e4YfXV2a3j0wc>yKxZXHf>sjLBLpa; zNJc6gfEY$Dt~-VMA~ZRF;r#os9F=^LpWvy9_s-=ebd*ktL?36> z@wLf7JNkFmf!;g<3UQQa@x($(#VZ+k2v_4(+!x5EBQcDcB%mF}~j;Ct3L)E|G)7NEW0R+fyd zr`HN`E5CM`iLRz)Ui9*$zW9DAkY5(VXWy0NIS$(N2-Du#EgA0Y5okPRJD&Fb zm<(!yoxQ;DcEULKS(#rT(B3;=u-Rw>ocLrxHCM9sJ1Ul~Nil%6Smq9!^O0+_#SKDjTy&fYh&a0cW8qI7Tf``B$e*CRI4g1!zr+Y< z_Pt4Pdp&g6ymNK!t2*0ms|>bDp6&hYHZ~K~oSg-0>~k%I6(JMGwDF_Y_u3}jgJ2`h zyzIfbRvzJ4}bXvcM)CZX@gvoma|hY*!{)>*GG5 z&itXaE%c#GJ!N|MHZN3FZ6I>6I1f>iU@Gx2?Tw7mosH0cwCyA~iRY0a!M{%8LF0x} z-{aVYEN1G$D}50RM!?=_1u$SA(PHXDnKj}W_L>%2hTd%anF5f5VE~k9oAU<1E~XH# z7-(k?mg4+CuV4s$u7t4pGYO{9V_^FHLMFtexz1j<;04-7z2^fNOu$-mzHFG``*2;L z4)Wh?0)gX^X-1B4!3Y>PIDtM#P+M_*T6MdA7@WW#M4hb27|ci5Y4jgmDOf?b33B~x ztqB8*Kj_Q(MVB^%HT1bAgE21&uHeOpg_>~f3Uko=?!-4aTT@wTaTG|RpT+`u+ybHm zC;4Ek41#^W7ZK9zTi6^1@B=saQLq*@-MFy1X1eFuU8efwSo}+ZVRV1z`3+r+V0m>g zj-l(%S#ScN}85?F*wAodXPfEDZ7_NB}+S{l~q{X_WO=O%TvUvFqN zwnCAujV;1$55JFk4&-zS(%+qgZ6=7n{`-e7{ADW|DQe$y@zammSC?iqdSdfM8ta;c z)QrVNjbo>7d@GjVTT~;##-clc8TkLrRy=IE#uwv%b(>xAZV>G1bG&n0$Eu>Z#b#wq zK8c{|v-=Qxb`g3rjDVZGYXyGe(bopr+k4n#dYt4aeuDJpFh>-38}G&6nTCBAKQF{W zxw?(CqP)_9#4EkImT)xfZIQ;>oxpiiiB!N&8CsCDtVnf=C5l2F zkoD`H(*f{;y$@&G7?ytt%beDw?apm z7c2n~OJ)9f!NnebNN6AeCvuSG^oFT=Kat|{5j}EhtbyUkhD!w&-}YS!Hci3*Uf1;! ze>s>8!#AT{dcCk+!@prth$!!%FCVD zVXuUB`U5uG|I0|;`apwif;r3QDoJ~Kb!0_yW#{OM^3l7WF<|yN9N=9VerAG6YAi=` zs3BUXm2$T^Ya(_yvvm{|FAWm(dbjx7>Zf-sOZu)MhvZ_%TmZv&|2q2 zi@2(uL%)`2ie_Rh^pR&X2yNq3i|d&5uQT3oI0J_B!eGeuVg~mqkIazSvPTEgCG}s6o z0Y$0|<4#y_bZVr!*5I#xGQu&=2Eyl`YYgPwZaL_{rHj=^ZjlHsoIZQvD@|)|9QKWv z30-uYOH$7fw5T5_}f6o7ZiCZ4a7GfRuL0O(-Nl%Q;8Dnr;nMz~50Zx@T z3GB!hM%A^`F@VI;kF&>@J1DIU!7|p$Y&{V4`uuo>Hr7e_>U7m@x~LI;EGBV)vEG>kQ%j$@ zWD?A)j}_A(2&}p2o%5v5yY&Man(x8kaA4&1WfbLw=d8m^ zyR|HlAhN}h>T{>6y-roV)L=(n4n#UX63uchnFMF*)=IV)?xKIN7XJic^x<>|&6ie8 ze)J*!0t~hoBpo*6_AenmNa(VDaF{+9+I$Z!2kpGjWtTFn0jn(%U^@o#*tVcI!g=D> zmttsbhbJYSGnyedTGO2O=;1oeaFbj>_THY??ZQ+N{HHew#?za`wDcN~m_TtXwSnI+ zTvS*KHqvvpv7lYb@L&$iB*8i&<#nXMM3f?2K+^P8N7p@F1@bBZFR{SOvG~35wuv9^UkXb%(m|Gt&zU?AVe; zxj0VnXH`-|c+l!K4_dDD(@hDwHawbFtPmx^hCGE`40@Q+p-|ogh6R)2rM5%xFn`@~ zPVCA{+7`uZO@A>@cKDQ=+&UF6Z*eXz<|}hPiIk4`CPARrSB;or9qxn$EV7tb+vocN z(c+9a#+>c2t_PjN(TmUHq^dJBf6)3K<;b*ncK?yfH`rf%uzkyla;$fH%qBlQY}|~8 zyS|&%4Pnk&B7s@^@VcgPpP#aHWO=yISyqWf%V1}e=L-4*H@PMq2FDv_WNl@Ot`qs)N{7hoxsd`{8S&ZHWR1M2in2+$lwW)bpF=sFA()^ zVy)^4;@0E4(5yA+#)&69SfKy0$Z;7(w9mJkJFR=vcJ0gZ{GzdC)gt1S*P??ly)NI{ z999tkRffZkkPv6SZ?Y??Q~u7L19)dI={)qKAcW3_9^mof22Ie$X)or5cgRIkKc%i6 zUZLOyAoWkPBz-=EF@*E+5ifiE^8yw&lT=;U+_~-D+F0xGr{(x)r{(ek6G#YzP~iB| z>)7m#KEHZMn|ypYe~ZP_EsnHlZO)~C^*m$?O@cmGOQfcGzPk%v;?K9D3gpK-p?moQ zmF}=#U)v>JzQnkCKDYj*c*jS!r09hhx)WE+VdRHty&P$9a1;0Fw&G<+Sf4$}fv$Rd z(LoqNXFtjk{twO`zl!mBrB8ZXGEsc;XWa617F#*JsRG~!7C-B#{5RcZ?sG2TC}1?_ z*$I{^`^3Arx9sG9&lNmp6qI?J6Sls=BN8|~+hLc!B9J&9dEt9IoH$avzogimJ@~0o z&mb#aj~kz91$&{wmqU-69zCW*;m9G*En7`!iD2Kal2#*atetcj5H+)e730GbT49Y>X{S>&1fT8^y`EE1UqmoWzI$cBCRJ@Gx z=d`*fTqyK(d@ATmR!xk@N159+c_W(aP8525H<^$g)e7OqCF&#!5psKJYw^7^H>c&D z#$hRnzWEA%!V>M5QFM0;YM-RpKHtqKS*7!+Q-m^$`xJ0r2|Z526#xHBy<1b9N3!?Z zTiu|TZ}F_T(Kv$Oz4y9U`=hLeZkj%$K7b(J3xr?^3)!;92Z@ob5d$6x%Zvm~Bj|2W zgj+<+l`Q1&=yu+jSP^e5+uvd5|CiaC9R!*E)KkZ-tgNi8ta?`Q$MH)g5RZeOJB(V? zn8c&d2}kZ-=XP_iDzaKXK5;AiNLnW$mB&Z793&xR{RdLkZ#$qswm)nJ$M5X2Uu=<( zn7a+!BX1NS?FJp*t1w#RxUBUb61Hw738B7GnvLZ9MKV$o%s8t|latPQP{T)olQJp78bVd+B}KCyvZ7Uxa&9Xd1uq zDK``p7iSrq1pN_j*pc{3LTp7MoIzxlQNCXuP5?>hBI-AOV*#EOvc?E%IpPNdaN&}s z^;-+S?^mjPcgzhQ+75A_#E?(Fk)rQ@_8xYi$qe8z< zeP&i)Ri3IXT9UyJI_$*}D;;?Aqt)LXTI_m(|0PX`q0XMT2trv z3~sGb(V0dan6&Yhu{aYtXZ@+p3v)#Gw$8;bebQSLmf&2nk-7N?dt`1$ozqu0(5wPUj@C;0q+f+kbk6u!bdtdXX}#mFPsq) zx1{BBl|hPTFmh)ss-T2QTEZ@ky@s`Anq%1iykQg)C3FFkm`ybK$MSuBRKoX}xk2f_ zw$QbG4Jn66%_5_Fm%jGnTO^XCXZz5i^7Tayxh;({3Io!{W(pdj|@ zalqz6BrXT}!!ho-8=UlD_sIeuAUGa;9%08JPuv~ev?d(*wqqXxy+1A;;=l)YUn!r%WvFCdG+UmRnB)Xd2x@=y2R7h)b(pLz=vzDFuLVUQREEr z3tMf!9NhP5FVPgT$}Ld)@2>*#tBhEHS$u6${qo1_uD=FN9-&)2iu+;k9CKBRv*LQ% z;xef%4p7|cvQCk2t1BgcTJwbN+`SR5VjFQJW#f?~n_pi;d$tE2-B&7`%OT2k?s|dR zr3Q2O`qqis!P>)R0Iwjh;fHrq6%KNkLFm-}G2Qph*Ux%TD0 zi`H;!b|x50=zo7c=DaH&_iea|L6Iq0-p28Nx%Hx(Uh1lTM5LIhK)!fjHB_Hdu z1l_CRcWHcl%(W*v@~&$%(tdTur^-Ut0_bp?-vt4Ay!mQ*CT`96{Z72+(gz*?mt;)K zl$O?g7#Y8mg`J>K+Z4p@4eOE=n@HHSJiIOFBT-US7UWuq4G)p~?fvh5_UjdB!$Z~a zp|psHs^~*9ma6gdLvHfme8hc>>FKzl;!{%7u0M*7e>~Ovb5lT_@klg#r084fF4M(V zNcMYff1p|0T(a<)K4_;Vr9F2YZT1fMGryFrZne>E7HQe|3_KK27LRG%eFZ*IY;Ldk zR;2${*Uo$^jmadJ?t|bm8kptz0|8N2SM12{XMi5rQs9A_eV{fRD7OP$52I^$em+o% z9p%uu%h=|Sw|vsmaui5w`H|Kk^Gw183O^rhddoQhEafGGky7v>P#K;Oyi3pMP{0Qm z1+YsB?gF{5kR{{*q5rdO&4kT z0;FYyH=xSi^BXjj%l+jj8g=|WfGadyRB>H^jZVea%|f!X8*uGRM13IgKH&ZeYrXyC z!VKNy@wMK3Exq-j@_49vJX94lP-SjS%f~70hn*gL>ZkfPTt7)`S)1na9664pZI&0< z5K!1Qca}W&+dj5+`jMGj3kohy_=5W;j8=jVf!qV~b>yjg0gRLE=B8EZywz%X7a9L$rNPNBtc~{wDObeMKc=ItV{8;_?LVbIzVQ{PtKJL0ky2VW?C#utlO6!YH z`s$g!9#6$Fr+%T?uV0#Q{pBT`{T$*whXBt{{q?3UIk^6v0QXz?g%-5@fZC`zy2T-_ zjqtP%(-@%N4xyN}C9R_}1{8CRjyQ5i2Oa5BjQ^qnFP^|ezp%id>eAiPzi!ZCwc^(e z<#bz@F5ITJYRj)5`_%+^C&#h2^sk@j{)bPL{En)BN4G`XQT5dv!RJ5~a`!9US0SnX z>+eKY02wEOp!~{X&mlXtnf( z#HSjVj*A=qOV?nC?7G6i7EB_W-^_697G^6V9@#9R@zu?F6i(Fny(Th}qA_u8eLIWU)y$ zaXS6>=t2n1O5?t`aXdQ4e~SkAmV5?(MZfGoYatZkNe`ekU%P?auSeh(fdq2+ZDqcx z4E9S5R;4T1d*2>13F6m$#Sv(G&2?G6_2{Sh{Xn|6*^jbu#D3M!6tKYc!}**;8u;4F z)LIV0`vnJw>N(v!ph3VPdYa1CKWigu{Tru&bIzkxyka@nez+Vz{Pg}8zq~&z?>7#_ zNppBF^FK%Q2Np;y8-7cy4z+gZ`Jv+halmRkPEKW_|8+cF`9mtp|AiJ= z_@>g(FXboJpL#!r|x~daM_KFs(0Vlgsv|85oH~%OR!MM`zOp1 zc$Y`OaRkUxY-)3uQ;_8xMrLb@ReLN{{}3misFo+j9%>TMOJ|nwADf?h3d!ipwyKH^ z|B$|%!-mI_kcpQ+cyAOA>7)b4U%9`m)j2VRIyU%2O85_srLD4mxVk?&Ht({4^Pv&~ z9&*6(O&{m}`7t~6^3BCsVlzh)2Nl0b#eqYe*m?eW9CrIui%6Z%@*63T9FrdKLf5mpWN{l5 z1xi`;!*Q!_kR3I`+5EDzYT}g=qmReohs$nu^W5B_;?qy#oR9@PTnqe7oUA*HLv9>S z@`DY2GR}_%h0S5$ZVO^=Zk^Ey1ZI|#`!2YTzTzSod+;MRD$pQ?N$re{$H4^7oIQFH z&xhV3#*REl-?!1vUf<>vA6EI4AI-XV=x4R$q2WB?4xd}@jyjewyevuw1=Cip{TbX@ z4DQR&ef>Mxi87{S#kRs9ZsW_p=AIc6Y-laW#>?*W>9$aeY80cPmLVaha^mEG52=h( zB^iyZBu3QbB*swY=lg!<#QF5s8(;a^`qAJ>Vlc!R9+7_KkmIGU6QwxvpiwaH(l+%Q zZAOGlm9HdI^P$uSe|kRyN0+p%dKUMjw6;QLAJ;UzGMA07A<=P+j%PA1?@7uyC( z;5U>UhEw^*x?lcvJB;?;o$g_@apIny8#`LvjwP_pxNjYVn>ap<nPfU+)phzPEPw zD>4f=@%v5!#<@Q`cE3w^?!WJ@`{c_yLj))4w+bTlFyK(Pk>ce>q-@@adQrvxS zWcNWa{@#D`({OimuSq=ZzmPl6-1(`1PUZ#ND*pgShU4_OmMyLgcb5FbUg*D3PWRBp&P? z7GHKSVdDohVK-gSTA;1nM`?#AizHrNnP3!Ul)VfXpYPc|2g;YvRqHp(p}%#%7l>juYzR!J2ZIF$>9p45k$S*wUvno-?P!zE`H-mx;sxCEyo8@yvN65llZca#3X!^R!6=`hwgO+ zF@2Ew$63&)N3l5uhoX_htHbcEqSuq??eWpwT;2|x7(Wg1_ZuHMymmR4j68x8IM`hd zVi-mbW!UBAt3>LBjL90ja@gX%w+6(&j+JIY-&}Sb%|`E3()BWlUrhV8ENCn4N$r?z zefG{J!qYllo@Pgp)0K(e-pb|TKXbdjUwh8=`)o6Pqhj=^^Tg>eZS#|x%CSg4!iI`f zkKevGp}Qh79C;s0K$%b?HW2LYS;z+-w8@|Lt7*NR4?UE2J>mjcQv+-)?Q^?=jH$oK z{u%asOrh)F$rt1kwf0zrZ)(R+Th4w}y5EF+`!ou=EkBh?PsqJ& zv1m~iv;UDwXX_TFR4f@-uou}GQv641td0trUdY?4;*^CJ6{+2x5U_l*SBfg&-&5(_ z6?>evqQ>(7Sl+Z+EVdWqdbF9f3}4+3J#=&_X+XEjyFCl>JXDuAuyLAF5FnyRnccFV%d?$W+K#x>BxW<&#s3d~5u37$#Mp*IE9v4`cjn6t2jX@N#f4W81k3AL%M zWMxsjrAmoyYYhQ7?W)>t9WYZWs$_e6wQeoFW_2CQia1s?yKIs8*iZ;jBIx#2EfmsP4MelHETEM|7NYb`0YtirkZhQ;2|hhOuRq0JL{ z^~*b1%!Ye4jluJkRHkX^EMQ<%&-`%XwMAR9(PX9fn)1BdD(b_yay6|j@&VXkCzUA= zcPCSsVp)Y-ChAlT_L9B~eZHa?!zWF3%aVn*3k#}7#n`-VKhw>5qg}D^TfSI&!`Nfi zI=w!(ARbu|$0iySP4$@daaCEA$}N#=xNH45J8QI^nr*-e>Y;@NoI`73>?O;&Y6+?) zGmLFF7u4IeAng8b56rlqmUXGIi;liO+X` zGH7+I7WHO=z*igj4s+B%j%z%fDNEPG)|mZ{is>e5fA`X%`KK;OJnMwVXRz8ty# z`Uf(F#}X=^u}Pw5m9@-$#<24Kwrm6#SDqro>-``22I>vtoaEhI5#7jDu+GU?m?U3A z96^8qqx38FM7FMhS~o#fFIrC}i%8I=)cD_z@BRJwPliuc?PuyYjuj-vGiI+AU)`iw z>;5a{q6QGM#)`^XH8bt(@UaD|>x&EGo^NZ3z9x!qGf1pz?RaY@zk|gmn6^X-=ad ztG-JAR)gmJfu@YCO+CrNlJ$+g!rHY$F8%GfYGuF1^(-uCWvR!G3?3P+Fa2b_^wTp@ z{ioBPUaAiQ8>CNO65E7b+dq}+A4KijJb&rky;Qn#{&6ZjJjiNn0{KquKUe;gD4v>a zL;PF$V!!)VEMBmIRJ3uGDH;(|V`2<@xoC4k=G_-o`E+A;0n*BG_Zd`G{dpD?`7Z9g zIj~&i=xzkJY~OwM?yCzNl7}6V%Ug_$B%)8H%-=)T^ zmhT=Jx+{q!WVIewhravN9=~`eJB#vA-x^fGW6D~ZtUZ6OCf=h)I$-R`va&qI5US0$ zUIC$TK>{sf`Dr`P8_&pF`-XqI_NV9S0c*7!z4Zy(Wx017ymW2~==rWy-5B3Q^OO;j zadpI4#^-sYlErh6c|Mc_&14qUM zf0Ku-vD-7CDgHlw17m(e$TyZ&@TH)o7uzb|17Me!U4{Sc`cF>{u2}e(Woa+Q#KQ^9 z{mcao@r6|@#}RHhjH^V#zae*F9}M4+_qcMgK_RSKjjN-qzT=9mmL*i#&~pm!s$t_Q z(j?`$in6ziER&(*l6e|o^G2%iH^(sd_?w=7r82z9G5Kuw@2 z&=QzelzII+zdIq2703%nT-==%C<;^sS_1O|Hd&qTE5*Jd@0SG10u_Opfa2{hne3f9 zm;cBNP?g9eE#PoaFnF#tvB5I10kqlMg7d&Ea0*xfR)IBO5m*AYfb+mPpgxU$H_=RQ z%}WF|qn+QKBI_wK&680vQPiAAEyu%=9x9|Ok)kpIoCFfm;%$T9jU~aRhf|sPyfSK9 zuAn`IEfF^FVM~EToAdpoEJ#K7O@|*dl3E=Mp=+J*H|v6Ax<8Nd1Znd*U(0P;NyGCzt~kffZmG*a9|zmP3mis^njzwl(6^h*K2{ z3i@wjgr$TM$+Mw2>7|^sO^C5nRfC#Tq)7%#5Os+{S{ep|C14R)0X79yg_by7(5hxM z0`5);?pZ1GaJErIswZ0RJgJt3ot9KjHE4;ZFKPe@R-{oITaFF4L_N^1PzAkot5FhM zngX^^xu<{yU=z3`b(78=?v|C;Zegf1M!S^~>iHaS9=Ie(uDcC>HycVY=LzP?e12X* z4GS{Vbky+dm#T!>1883eb{p;$7VTlLO4we_(L9OwTEy>o3y&JK@TkQS;%I435A(!0 zTJl#*8U%*OxMvv~EH!|lL9e2a0R;{!BpHaq#~Sa~C5x;xlw>zC$yJ)ki(~y|&6L+- z{@);w#Vf)CH6%e!N_(b_0LdjDy=qD4$!ogoAp|oInn&haOtuso~Ht#i;w0bF6y!4cG+G0&Vhr7Sk z@i0}Q$)d|ZmW7sStZl?cg^1TQC=*s>24RBMtddF=Pua?cL=`yMe%Gj6QLRWXX?fQq zQPLQ0+wU2@tP*j0L|)^i<{XKp;_Zaij2&MHPC$${6evQCB6Y2cb7=f5uu_f0MUoMz z*rG?KI77EfRf-U?$fDHXB5CJ_TWX8<8ZqnhPS!c{na`3ZL#CA%?Ml?Ark}HvVKYpY zzAVtVIt{APX)QW%o|qPFos*@EGTqf8-x+e4F9r`;_BD8A4wkFd2n4@Y&qX0s!V45Ni(rB7vovZiN0oELf!1@pEi|Zp0g_JB_4*Bw^Ff>` zVpgngYBRyu_IswGS+Ft9u-Yv+B1K~6Ukb=-C?fC4?0)4}EGxtiWLn zr_7Smd63s2&WHGM!p+mk$hp}(i7T|v;I$;Wr$u&C6kxv#kkW*)x5gQ{#mr=kKcyO` zON$9f=OKia!MoAEX7H6nWUnbn(Xw%OZB`by|Im|ZJf$UBj^?s54T^`3YGuKS&DZ(l zAIlGoizM-hxa@()AjC8ZJ467a4S!C9mlL=u;TIE0-n4H@LbUu*THD6K> z9o1B*sf?y%4tF#&CzjaOhz$|ts9a=>(Q;XmT9!cJbIiaNGFGAeV>w3#YL-csiLNs2 zO+&sdHKGG^bQ&5ff(3XfnHF)UWlS<*zg2-jj7=&9h146OT5Fa#i9+%|g$|f=k1B4) zvKC~4jh0{yLK={SKa#pTJSs@w@wSOb9v)R~WM^l{?MNc9NDf8=X>u^xa7$*gLeUvU z*0ZIY>|~uK4b7(dsD4;>6sMFl1-b$UKE4$5(M5JT(GC4GOZRCXRJ|+F=I3t zv1Oef)=}c(`Ks0Be6`6uaD+UXhrt_|^9nLdt*}ZxNsTE@B8w37y0qGK`PHVF&`K`O ziF$2pacE;TR88Zs9-M5PSA`@-NF!&Zq~ybG$+VoN!1iA^i?a4;VUVLO^(Ot17tA7w zzTYz~Mtxt9ZOx#G*m?K>6JyTxD^mb2z3RaQQ%Y&WCruG0cza>EGb_@!mQX$tSu~{e zX1_O@O(w7I>N=&*d=$@-!U$#}yp8NT-_BaqY|>5;Wo6z@h|RVW5zA)O94`%MAT>3| zPR)t@Ib>>KnhBEWtq9K=)ReYWP_?#-1)#?4R&`b?7P7!Z#uTsstms7x-K*F1_Zq!( zF#E6v=k#Qy%{QE(Z1`vD5U7bFk!>+hn8j?&Of%orkPE6_E%c{7<~U0=Ju5gXR!tWa z+#r#SN^5+DQ8yJKQx)~#9uq|e&YsQ!D~t;3nJV#HaIcBT4kA`7393H}w7N3MnCR8- z1|vlD*vh$5T~jSgI7&e0m0yif+?L2q=k>CR^qoVZPEjE%x5^9-qnIWp3T&ZPDFdWV z&NBlRp+Mbai>o$P_dKJu!s{yiTBIfhrqw1DkSAGnO2y1Tl`0%P>@{l8hWTz!OP1jt zZB<(99<9^VJd@fAx8S_eD$j<8Y&9{-OLjHr!Wkq+tu0uf8Poar-J!u#s3u#CB$skl z%G9j)z!uc)Nf9tn_^l%hxKZc2w9p@X(3Xz=4X5x_mvp1J+!qR9XdnD zF*d~P*_@M4U707XF@Q9$n!;yk-Zc5=W?hK)V5jK`5wRl@w4;N2B2Y&b`7MgfSE6U6 zC)3s{>f8*ipF^$8jTBI3Lk*(>A=60xY}45re(gwGpC-2g6)H}{avermK4Cn-cr`*Q zw6ZxDj64m&Jv+5;TEBCovX=>ipo27?R12!k&OVs;8jgHfvsKLLRUwA(Gz3lP`5ye< zqn?@r_Vm_%OI&T$DpYC;oo@@`vc{TYb+!X>W#_gJ53F)_o4nyz)hFk7u_E0qV}_E&Xc|T@%rmsHQdrSat$jhgRcfzN9w4ibNpUneAHc8*`2jkRz}*N#t^2bs>+k# ztW#@OlvqY=%^77wicKS`P43T2Pd%3=Vbqa6+*0Okby<4Jds~sG%RZ#$rCH9qwAs^K zzQ;OXuT@rQnlY?Q(R6DG`zc!GmRoL`vc6(KX_y+{(%$5Ui8VC+>SLp`0qe}Ad4y(U zq5WRfuO+1e>s7;zepP25adjElP;B@nr`8?Gk}-a}5yGX!T5pR1B;itW;)zl6Fll`* zYX5z#`Xe3_d+UpELx+}@A_wE+GIaooPixe_jy};Km9bTm zzTRWE$0xo$CRu44gtY2DHRtNoGfVzutWjP%b_VrMi`8{G*5Ty@0}FJhP6FWpjps%= zsOlPMS*e)xw^YhJ^`G~*d!osd>m@xIVXnF8lbPN44?lti_LMzTIYC>j?P1FiWN=z< z)gdipmUSmT=L%KF?Jr0HpNu8V^GiPGs#$X_C)gf_77fgzI}_}-yz5+Q%pv6#u?oyW zh6!|84W`+U1aw7C&4tY?R>x+`YTY~?l7lJcomtRR%Ol32yLxl52FrNpv)6D~b0vY^FIyv9BXcDLr2~3e zIGRGU$k?2OuS!TunYcaemU=K>3X<7se>S!g60F)~=-E*xqXyCKWt60X=3Uc?MHCZ^ zS~+MYN-w$WM}BrHsKQ2zqH{(s$2@ElNjGKxwvpt7V*OKdvt3zT(?dhuL z;6W-qQ&(SOVrp6kjw{XU0c^KRvLm|67O&IgB`hOHaD`}s<;fxr;G80xuDX>=x*q&B z=S~D&BXmWMDcNgmt9IomkYhV$xP`^J#$M80*=s6nku<$)kD5!E*3r^?zP9Vh*KJx- zsyVXz%(G#)slB4jyc_N5;)W4nNx~tmw`oeL(c8J(&va zn*85PTEE(qRilU&Tav{{s$NOqi51_(=Fk#MFD=^qYXKJ8k~u;kvs6aI@ReRCCo7{oA`y7iwu2MtpbW-Vs#Tj*d6%J+yO~HCC`Nr8SZ=ehn&_`t-s7;AROIRH9 zCAX+a9dE)3HkIwMX)floX*DmcHLuQDWZ*5v0-)-uWXp}1E|zvHH6LV(v0L>pDJ@kN z@k@xLEXycc223M3tV8NEt`*4BWiHg@J*q1~*+${Y`;gqNlp&LwYW5IzWz}OTh?B!zGke zBANA3matQ;>DD+_R#C>qH0JdJma|znze0X9jF*a-(b#03J;{V&wadn0;=L%o>rFRV zEVZFw8x^{Y5P|fC4^W?{F>kZ)-eh@X6fQ^qmt`sKd?^0=kV&}c8!?)+d&NWstKp&A zv@d5mc>wIo+NqzJD)i2IUu{)p5xs3`@XXJ(4U#!{?m|m3Le2fb+R~ z=0~Wj8x` zcw-i*?GATTjLkr8ot1}Au^@Klk(N@CDXT0(q=#FJA{8zQNdY)3IGI4UfoyZJ0iOVC z%-0Dno$$BzsLSXW4SpLJxap~c=f+(*ER=&|%T$o<*_5!GB4f!{`aZO_rF)f z@1K7E$S4zNxNRtNHQu)+;17LEv1s#Px>VDq%aX6>^jvOgvqU7{nKB)_*!p*S{)^m( zhsN#pOFdnecVKq-RI|ZT-G>O~)tmDyktv00RDr z$ofnxZ7ZRnZ2uzZ@KjE;!>6M2Q!!(MGN)B@EAt74nkO~PI8WrBdewrFP*wS>Ws~6} ziH|3;`&#bGMLQ<#;WNv8uCBa{XI1m3t*neA&rqSiwbo{v|E7Cpwas=Vt6x_v)}zFT z)vjHWOS;h}-?Cq`+O=BH{%bB*wKd7LEY9BAd#qCa@I=Oyx~OYISaq>{uBl!-xGUS5 zIX#u*=Zt7p(;ii0L9m(~nqV#996GQ4{fk>~`j$%~vLdu+DHV`O@0cd zmy!=UuCh7F7UN%_a)iHTpK^kAvVqktzwwMZ2(@b4d`q&0$S(2m9mQH;ZcaFt* z#hsA%zrDJK1Zmj_w+L`w((uZBe~7<=5vqBmF2j(<3j?5UOKCBanB&_P%9Xfaia|Dm zkhr4JbVcLB+NplEKDGu-RU%P?k=2xH{Yb(|CwCeRB^vHdYaH)rE}dz>V{o?7I?Lwg z6Bu?9!ef0EtTS6#x6o;(8>Dkrrs0|=l+E%U{wko$lX0EjMdHj+vzCvxCj}&wxH54; z(^oSa5<*r~AAR-PD&)UPljR)qPN8Td50pTpA{<82mKlc&1%xguh=C}mn> z&!R$&X^E!Hm0910JFFsXq>h-Jk-O3M_q)^u$%7Zp6D@LPsOc22m5BX^`x?15L~0Yg zc-R-W8&sR0Pw3BNO$if*zDY9sHS(77!(L7u3Mrv5ZFvCd&mu*e$LH;YxR zYSy$inPiLZ3G6Nph-7NmR{`4TRsSZyf?Tb&bN2)j(h~^HCX!sR-yB~&uqn`h33L5S z*JrI`lbmd@HKW`=t5Z`#xsm9!W3t;Us=b^fvZHz#n6$^(mH^mIaX zko(5W-x93fEk&6c9-@wXTl35$mcL~xAky$qi@X-Uo4|Y$6Ueu08NznoHd)5(qJ{1< z*rcDFv610OuqBSs2xwnXIaRuF4i>dOf1++yNTU!e$_CpLoNd%KZE9C2IB}{)%k&8q zC^~;b-a5mz3fGvld_qS&!T$UNLl=n~?vnHbldlSH@^(sap0Qy8ImsuT=c2Yb>SNW{ zDX%NDEJc)iF)FU*r=YK0Xv(QsZy-nW@JG-UC_vScm@)3O$>qNv*i^DOD{q$4eG0Tsb-?eWN?0yz!AWhaG$mipSF*C2>{M;Y z{h!`T8_$@YpEh*XsEQlfP7Ce9%Ab|3VYXF3An%ZoPPS-aJKUMKhSud~kvTsr*5vpt z>+<=Qg7rIHWEOc^$;;+3EtA}e)YO$al1|4K7wK^6iPI5T&I5H6itJw>Wbs}w&d9&I zW5d3!gMwCe`meIK)TgVQ)R7+esKuu2GaKxG-87v;?P#-)Jlvbo;;`f{PYrR}B**wP zf9|xU(jHoq=G*PmrSoT^q=EBiTByHzV1>-jX=;`K~U(Hi>kg0|(+4?L{hd5_!vTo=|*pyEC z>802c_C99MY~ z(oZQQ0X8`7rhKT)6}Bdx)?8JtP%6rI!n{?}B$YRvG@V?*NuOa+Uec+kE6g)3O&U|; zgjw5>Y&x|sm|3c=s0C*hMsg%7lGu9rTUpMhfOf}B^UD1eMO)% z+yte0wxqhE88guqyvhjd|q-t@k10BxR;TZ=OeAqn!L(&YCNF=wbu z6Y*D1jVZHAYOFQ<^YFP2O5ghDje*XXZ5RzVUTx$ZWgV5Ii);uy)}VVVAF0P0^75Y1 zucF=-^;pznNuVN76{zWLO>b*@tn0C^$GRRHdTi)dQ=lc#7FbY}R~v~yR-hzcR8y7g zr>*=AZOJLj;FMsF zkUYP2%FSQ{*aVVRMqq;~ZmUSzB9$+asz}b-e>F%BMbg%DKyuSOYmlyW54;IWR^7$l4ARbUB77FyC8gi>1M8dPH*OW+%%upGa0 z{yPsORgU8GITinEi-PlIAX!6|$2!HM*Lg=-M|DRSM@7EDkXTh5Z#h=$5{+iT zE#PBT^FZF_fkomJi9>^ul0)9s_+1A!fvqU1U|5=2xedBj)cSWL0cL@DAmQ4xPt;R_ ztd#M+rPC6PR6*iDCeGsukeD_eRUQpaX7EL_)^WDX&zTL1K>2}QRM`cGw@fphGnC=EpzYD+`A(C{NY{TGKRrD~88X8X#DaY?zUQu(! zfb#e(imth~Lh{7SH~6iLGIIeyr5(#67j5YjP&LxX5G(@Qf{znm z7B~gWDe)H7mJAfE0BgV|umNl-DpGHXJc^nLOaW2iVxHd>U=;{Oicq8o%M`^XnTps^ zP<5oAN;ItmaZ2PAH%ra8NtVRt% z4O-(ync!%CjcQkDas>ibh+m;+D>S)M2e#F};$a=XBSC?_E6}O}1Es(aDQG$qG#Oeg zM9d1X4y*wiz&23cZBVl+YK|3{&N5Y%nW<4&jSi`iT@mi9QM)2zxk$GZ>6W4<=&@pO z;w!u?=!K%@XTb)rEhvFiWO~*^mIq~9FQ6t|l_e5NHK5cSEHcN)DZzYmP->3K&q1js zF|Sh77HM0ASd<*F1S|q;Kv_4Dgbmu-@SgDc_$1z-mI{TBL%+@}Sa-U%Nn9s!9Uf?FtlDb^^fjtIPXiaI_5!q6@a9w1I<#w0$p#(UP-mvE zU2AKjo%V?j$F90_XbU>FogdotcsnWs`z=t{wsIYFxoQe0q_oK*0oH&mU;`+1Vk2J# zq7LSXgGR7{=CpwpwNab|=7Blj9FX`$;-f8Xpa5*h55yqx@hjM zna0(tx~s?6;-)&*Wc@$i)Y>Cik}Z2rEA2_mw&~)G4&kF#WYv{v{Y=+gXRPTq5Ys`1 z-)W;EU;BPfXJuwm>A6P9XQde<85iY@B~x7IQkj}n*)zK6Ln~K34i98twvnU?CM7vH zKGKPY8Lf8ZHqp`wtfA95^EIv8hI^B#v68S%&~p|;7n_s{v)Ue!AwyT`n9OQ$orG>) zXkGJZ-SpvFOEo@_3u>`NJdR)MFjpq8DL9=kHPpI{bV_(J4j17k zJK*g2AVIiuvV6cP^8x3}2MMBIO0Pjr#_{Zdwo8h&=)?q=1y+DHpxjbPRcd=$&fg5O z6eGU1DrZ^2@>Z&^)t`bZOjT8iuM=NNVTESY$umEaTL~}^tOD!6wuF&lwu#@Olor}t zi+oybAKRkf!jcc?I>XNgq0Agcb(4gOkyi)gbk|9qb*{qNPJHdVL<@0<7|2pl%14`_ zR~9mB+t8{?3-h!pPk0_$)M$TAcKCd>P?9d>Ib8>p+as8l(4~_JF#wx+#`K~s5z=+t z>Q&Pzv#XK@6Qk~zTduk*Aw?_kwrI~vrNi7=?F1Sbl8XnaagApi#$z^u&JoQTNqJrI zk{g~Re)W_s2WNG&R5E1(p*h!*_lShWfis(Ko~ln>^O4+e9kR--oA@UOWg~b}Vex5< z-_rQ2Uu~-9oLk!DLaWWI)UH+lX_?Y=t<|75S(oY_!E#Gqoz?MX)uw*c#?F80(y83P zqo{6afiD9ftGPr%Jk2a&phkf9MX!o(aud6zQP^y8V-_WUr5k11maEor*L3U4RTNFj zx1g)B{@-L$)W$SmvC>!Dmh56BdAo)2cE{4~5BDu-gP`+2TG05L=WkBlZU*jy`}WrG z#d6>qyx)KG{Owcl@sB)TY+T$hd|=_$NrH(zcHVS7ySJNfo`bh8t_NNTyy5r_#l3wR z&rf;ZwPI~OrCgMqp*P*Y1MstWenz&(7k8+&JyUG=ZJ+li7aMO*4EOa$_+o?B45+Q8 zd;64DoJ2JZ^L%RW`(RIZ8m%=*^^8VT_cU7Hi*iqX+5q>@DcV_iEQ++Mm(qF82eJ)lgHzV=_w}93!7dO;q<>(X>w&x7pk+JqV zd}>hrt!)@%2=8n4v{50WQh}B$y`QnZ7u--fgMEW{B1KFx1f^{0G=jBoO z+s^{)`8Gtdapq*%5G8D2LbwfDFU)ulQF*>YUZ%2;@{UvTPDH*Fk?%MciRVZ7jV{@S z9Y9--o(dg1I^!KZY3LKHsUa$u&?APnjPOD~DkdBaQgTWfOQ3)u5oGNAkGdCa%vuM@ zw`_(UvkEIOp?yckj(Uzx91TF$7$M`QvA5f_`0ZzJ&aB0T7=Ld+6QNRLHJ4aoX-$!h zSNrzPDlJ(6?gu_~e6j3U-JwMB+!3$p`Rz9NEaDG5++;=HvA=g&@pcoLFea#~8G5rH zxD&YN*o*mb*RmN~9PXU|QOz?kYoS|FDdFpm$wl}iaNn_bN1QI+5>^+hohL1{?@~;%nArWOv|%XR_W`5mRIX2N8)n#9Zf{O38zBV?{|I)`rU4tz z2wx>KSs|>^KlY|aW#0514IG_1dg%jfIZ;7ETew(gzh_69P`fI*SR3vTQpPE?E03t zw}Yprj%wu#RIcndD`*|mYR2zb`UC%; zgv&?N_qAH|>jaA0v2NNM9*92IZ5ZEneF#0}%%1O%4A)hds2Ewdr9dmZmxX*_0K1ay+LYne1Ob>C|-B08U zygwmBnRfB5;|&fw3pLkj)g6giH~!|(n6HacXUeqn37e1xl3Q=O^7UC2U)nTqcCl(t zAEBQfTciUz{iVdWGSDPsanI0;75k%9`eLPs64||2ld^enlXBKv=D#_xOu8_KXL?}F z-$$ujeshQ_-{bwUWq%0XztDwwR+dd!Z(d5*_qtr%R5tc{jpr4jcTHPXT@I3eEPqCP z&rb1NwO>&+tj^D+9GGSj1MRsdw*mM9R$fQDTD!RIwX`=M@!kjKCqcDOtkH+)ITxQ$ zi%)3G4J)w%)F38K zqO*pb6!S>E?$IPO#a4;{>p&F0_mAbzz4d1oAJbYJhsH718wq`UY#P}owmf=a0?jmZ zBbl!cq12kOsd(C_DPIH{{|?Z_ta3lPTBEP;@SqWU9Bh4)TC6C#x(d@p?rW6Th*s@r z`#wm_qNf2ueT~Sf1neAg<+&=aZj1KcdDG#!8}jDJviCwah<^aJj91`d<)=w3qi~oE zOesgKs%{47cqs;9k{;ZjiL%s?zAwD(`O@FkQt9MxYmBx2#a&+91b4hpjbwUT#T-yM zFHT&+n#;wGMuaMNacfeZn71b3>7JI&IiE%}z1l=~jf0dv1x@kNop@(C$+^QJGM{zv zpnas7xvt4%nu%pTW@#PCO_-CLp>vd5gm5Nf2cH+$ei9vm*r~-_=?MxHj0$_LMbrtx z9ZoV0>ZXVtse)VvXmwwlnM_@J`v9xJ1G;k{EnTDCu`LaR2U?{u&74W)@mLCDVey&9 zg!Cq2WrVRg7}O$9P@^j0LFS~c4ebnBXGo&8pv0eXDk9|KV+j++n2VHy2)~2Kuz3Gi z{@NP$_JI;#+(@Y8^QiRm_l@bt^C@`W7m0$*KElU=pEErD{c$`W$NNEqpN!(Y#}B|~ zQO;SEbL#E1fqaIIVA+>Gdh+=3e#P@O?D1B@rm*ZpQ~7j^;3*K|TdW7E^jlr)OhW`; z0Qw$SLC#Jq`-?o%3wMffFz8j@(~mi83k2WCXL1Nhh0NO5Z2SK}`5B0yFlM zM3JQcxE|rc|Bgx8m8gNy!f={V z?x=lqRvVGaClP+w%X8t24K~g2HhAGg(;F zDKOKa*GrmO;tCtAf8v>gU&6dSSy1RBCATNkf`RNoNH2eX=Ghv1@hsMdIxB9DmtmD5 zv>xv_!YFN}ja06n?l!tRZ5D!fKki~3+71!29TeG)7C%!pW#-Yy1)r)=JzHUFz+C}C1q3;f&5`%a@5aETR(x(xAs{M!1kM{%j9D6sS z7dw6txaZjG72I+X-K}na>6m)-f;b9)5%?tVsj~;o7aq8_s{F(*^ud`E?+oHGu(wmb z$KkjeI9lhWG0?YTN_5U_)Y?S#+B%g>Bw$v+c0W#=0=UB6QKSF43bU^mJ=p`jrY2H-?s{kPxb?M0v`q*#Ik2U@QYXjkdD=x_93<> z9I?@1HR;4qbV0W5g6uhC5z2rDj7)2(wLAGO@OOeTb{ZKIyfVV^e%;fF zdoihRdpSNj-t13)AZZAVtzt;6PDr}LZ>XHZT*YT zjNpBAUDw24q;uie)OI5Q^!(2Qdp7$FMD_>Jeqp?fzc${ zy>skK58qqvzByEhT1LB#$+Oq0`Xq2KaNn^TOJa-qMI=9rC?ej&NlCVPw;b z9q^uS2(b`ihnj4K2acnaFQPgxBA?SYqaE@aqaAOb^P=2dl-rB=y-~SQ{g+-Y-5opQ zZ$@|!s>o(MzjW;DcdwV>Q^%A)rl%yd$-}@WfqQ}bflnR#6dctWM74z1;X2>=z8=jx z3;p6OCWV!e1A*oDB5*J8DE!p1lPk(Ojb^NPwFMJL6HIy1b+wI|p&K$HwKlX*U%KLFs zvMZcE)}q!M8azzcH(YTD3av-$)}s~cq>~NuM#A|>)*P^hp+iS69Q7Ra9St0vI(i9$ zH4I&MwB~5t5gnXphDv1;^{+evd~Mx#Gmhu%yTl1(0=;n5b9CZp;OG>j={K95{II8G5;$I)tJHl5Yzm<5u67^UaZN+o42u-Yb{g zP$ol(l$13*i045lm8YRBE(g9Ic!kyQbJQe5=p$W6FB~2FyJLSkany6vcQkNx>gZ)M z(t?bKGDyr!$U|*v^j);{-G#+{Qm}r(C0(qC?#bsHI98-Kt%m!Px|BpaxLG!D^ZYK3 z;3PY{Q@|`R56l6Jzyh!atO6^*GOz)x1KU7uoZxKnzV;ISPv2&OS;4Wyk)Rdtu$J|` z=Lz3rZgJl^A=*bbIGeg8rz{g37JI9y;w75AQnN%oNrj(a%I-z>~2=9l9!AAkt(4(g+jEU5>vE;@*H(TgbcMU?u&)l#`V zBhI9C`RE-jZYLZeLt?SjiOf2&$m+x*>p0eodcMhXKjwl#U|(V%M^le|p(M|iz^j38 zy4QG+{KOdcAmwZ4701|Hg(Do2oJ9GDzFd*5X7r4#I*D>mqP*Tn*hIQs#P5yP-tT<~ zyvvTQOMR2_9`!IB?_;ezYH!#A`q92V<&9~;{fECEIm^4N%-e0E4Ps3@h++p(>>$YS zBAWSP)R#g27o)XvRC^F)9z-)wBcIc-Se*D${WNNO8p%#0*=f}JlwKH9+prsrh#E%f zKC)3W+~%aC#L+~`tq&(Ip2_Rwh_c=jSg;*;!kXY!8+cj$=-_^Ia6ek!59>ldvhN3X z_k$AsV8ni`_WQwz{aC*)M>YDRYQ#!?IXdXn+5ObneGsJ%V&n}xH_a(dUsjin?*)Fw z?7kAV3mlvc-;VgZtV37CI4QSLbR7F^Al{1O^lijxZ$ZBy9Q~W)d zzctcRemvnh=KFiN1@t`(tHp`iF*s(htoQB{k4JLm;yOnWR^nK~J)qvMx;=vMoBYO^ zm@R-VPkM7Z>=m1CsF*~n+0;(JJ=bvF+b#|QcLE;=J`MabY#A$o*8<-REQ+lK#g@GX zz|RPG3a*8bYK@lo{@G3D^LsckthhyG#VfkvmAmey2%-q?1G`}wxuYkk#>fD{jd&AA z7bgGfR5xU>N5CmbN*Ac4+i z+yD~J8I0{8{hUUh4a!Y)6t}xP3yX`}gjRy?D?!hdu$rtu_wPe>s0jIIPj2(64ryk*Mq^=ozYC8y2D=1J)qvK zhAC$?7-lt=D67FRYthhK5>xT~BJfGzfn(CGMgOh2p~M99s_7jcBw;t&jSZr1*pE)M zFQUp#IAWuRUXg2;i?rJ=(lm=tI!e&to#Hp62X2PV>1H(O=8q$vHYern5lLbMtjEY% zkM!%&kag#x38^lEeb?h)&QD?#Y``V>i}8HN=M{VvIp*TF%}Mf@^gQl_?75>(0pA=w zyKzQ3>$rwJOGBg&XJYO-+ICGABiE{l z~3sqab9K{eNPBonue=hA~bmPeCn9Z zrF&Wlfx8%-?zwNNFa{@Kk9QpTp=(HX;4E{`jR$HtR>P8P-oNQML&jq^ENhP z#Od*V*YiP0V&!zBWzS8R>~LDrNk{&)GJ)0RAZ&F9Ve9I|Gk%`fD4z#*o85lcX4nZlvJLhE_rpebGi-xlrz^+(;Vw2Pb4ePPBve; z{OD)zgrB)7)D0fsj$m|YT?K<_!)!qX0;XV(L}9@rgOLJ2(ar=CCc{HgCx zeSaGG)4-oj{pr-7Ui#BZHyA9t!C={^OsVD9Q3;5>`G*%@qBY-3d`B6x%=pFUZvNIwDV~dQ z{%n!sM2nbd7F%2+@RiKGN6ogMV=Je|n!>nn=Tc+Eri5SSe5EW5~#2TLI zC>)muCa+I*)ps+MdH1EhUm&P27W|3F^lfCHI=TJw#vo@UPG9>0-9}lz*sj zj}H{<0}ZbSuV3n#_^z&+<~UtRKxd4)d`G#<=fAo|AeXdu`NnvcPnjR(`QAjAdw9Ft z$=l_NCtc19cDZY~%SFFkF2?P0vark7l)AbVRmb;c$-hX>mNYM0mqN;vXpj$)b-C19 z^{EiELLHikAN}i=fJSJ83aXKyNs)6TnBX&D=j-AeP z)KsMoW~(}R=jTm1_&HnS6X!eJ0KJn+7d>{P#C`lbTrQ1wvc8+1=LledgRgbqEU;aP z(-uwLwz=a8iU7}};D^tG>8Q(`&TfuPF}%lej%FOqI;uLV zIcj({n*OAoD|qf=)IoK|nX=$0o^p`^8{!R@I}I<}Uk&`b z@jDvsvzk6E5oxP%5@}ni@q3C@9JLgaDAj+xE5PMssCz1BJi@G_vd63W)0{sw{Hf_r zt;lLeXJ2j@dm*ePN&fRxgd6!ZURNwtd7;?iMT?9@6bAstPsypWut8xu-m&@_H+`Fz1 zyb0udJ}_ux_sL;Lx0Vi%bVXUBuNYY;xd1sT(!c_rRp^SNcKmGd5o35hOXH}eC*}m# z(Hz-HTvl8-?#vTEuet83QQwuIVR^p!q2X#^mT#2o=pOB^ZXxgTS>-PBw#x@ax`-_oVRfzt?~*OwLsB#6 zQK#mShx6hiW3CXddE~Uum%4Q^`TOzx)Y#uoZp(34C^i1~0u#zaOs>@i+d$9_=UZEFhw9>pNPjCL+&QjmS&-oo>%BT9x6-`9*yXs;h59*&M|M zVQ0D;OBa#r#Q?jlhUI2axY7O0y8m}e zx(uHMvf@+lo?PtVkJgP>ZSuB*|r3yZosdQNhgb3$KQXc_-19woP8h5J=?GEb zb?=AUx{=&E?Df7lqgeM7^SUN)NqXsjccu$Z&voZwo!|D(=H8{Mu4>hHfOLtPK7jaYbAmhFYH*`9;MHbgN=@_C z8n^VW8NcWfcA^>3$DsHs;;YSR1?bbi#zZU)#MkF5b?fX|-S(b6@9Be|E4r1N9CX1h zSGOnUgGD}BFa^~83oB(Z(h4UF*H|U3tXZxlIPcZC4pc=J`82^CWVg%~_&C+7Sc!`S zAJoWFH*Rl|JDw{Ybj^;wq+oej>lPQd1C*|t);*5*)ZYemY4@70^uDLN*v_o$#?GHM z)Pu$Ir@95vf|`5@@}6#YyJsrp9NpYhvP?twbfnL>7L}PCWr*?mFX~*QTT^4|DFu~v z4W>5b$=rUG^z99eJp=RBvzEqqcudep|N7wdUzA%@Y6=WB4~q@Isqs;{Ra^#iT>a8d zhkU?p24(k%k4pVfBNL7>zNg%vvMt)R*|YB_o8Roq=k#}Ts?e*aR`{jA zoxrv>5P$fHZ{qcSxcVdyZXyA1aaN{DAYHbVk107g3!Na$7AL)~>eH)f9tt0+ox&5^Dw`D$3c4jYL zSZ|(KpROdzc19m3P1IdK9sZ=Ntw7qb|D285o_=ZD(I9CKn6=8OORrby9DDxZlOJTD zumUxus}oaWuU{&vagfQmeR@vPb6mY?{V6QzIj$BW7j3$+)Z?#@>H9H@ZS9q4>C!JJ zRGR()_kXx;wI7!dRdz~@SiSCSD7w6UA*R#^`7G8m7s22GOs2Rm#3vQhn!->ATz>kC z(aK11YGO5Q4+c&J^fiN@wtliM`RN;@Xy&J+ucrzPEw|nnM$XWRN7>Uv`Ft67tk&P4Q${H=4oDq4V?dRaz%WxK57F*#>bWG z5)ms_tZQa|`zT*Zt6&x1?dPojGjyvP*Z%2VVCU{uBd?F&_uPh<1j(n>t}6a#<>4;Y zT$%2pW;d_N^{#y2?4Deo$<;YYNwB4#RB_x@*Q(45*B-gF*Ph7rfrR|*@YXelw;nru zr=V9u0TY6Cc;0HT6!j;K6@f6sEntYooNj`)=F`5 zJM3PmEyX_+{XG#DtE;?{SqhNwrxN~D(ms{&>iTmvtrH8s@Ju+mCmH=LT>mTz|4G81 z=(hv^Idoh=)f!c9KNkE1fa{WoJ z?pvHyYmzo6pQCu;4!c&@hjM))*T-`GNv_XayL9&Eh|_jub?&vzFXRQ!FYe37i5|HR zSiHFJDyCAE+_sy~n9DmR`=j!*Q4`|5ag6?T5EZdVQZp}V@ZkxKP9-PO%5 zDxK8idRMLz;+A2m>ovJ*h}?CJzPeV!maT_>cHbBJOQnCe09^T=`_(Yw+CK{S{mO4& zWw`TLhUc%{hrq<#rFGt|xsba*shwBX^@o3U?{b!x9?4?z)wPRvg{=Sl(_=Rex$fSx z{93*o`C48e|Jupq-V0W9>F+(=l1|T!#cs*`?~%-@VmE+#aodgeZ%DWIQNG>wQ9exO zywp>t)SL3b$7?^kYh_8*=vt!T-RCCPAN=GNS>>}+|M;Je*4FW^|NT~mC_SNW zc=EPNkhlTg!VT4~JwPkJCguJtHhEK~Qn4_7Ps(-gU~~MqUU>TdF628C&Z~=$yD2tt zTXiJ9=D}0AizjlGT(`ua<$EhH zZZ3IKzH;`>iLoV#9w2E=UDKvWqY8Q?*ZUGKFUWDlR+lZgUYF}_xw=n~LH({BIW4UV ztV-UJ+~w+KcK4*4dFG|Pas7kykSN9!0?bfCC?`b1cA13wtOq%&Kvr+A|YOde; zF21A^+BtUTr*1ko@z}Ma3OVh3)$eJ#4yy8}Zh`3k`=TQer)zOcPn@>ZrzdZ z#keoUu3xGCT)ZJ~*I&PWrRr<0%Qrr+%h%R#*tME4-I9;1-;%qxB;@v%e8qeV*v*UG z3;yribip^ieUa~fy6?%}`gU?#)-6uldzRda!?(zNf8bkj-7SI@?u$Xy)vdRGx$9Pr zzdUfCslF|4@6J=n?w;dhOA_CZ>jU@w+6#|wxN`5im7B*8bQkZ|P5EAKBy&8CD4$|4 zoU4+I?>umKYx2$bKTE2ocO_hT`?4kP#dPtnKbAbdY~7Jv4EOEq!hHbuTOn(t#g=S} zMO)&j-LO$h+!D13gIn^M@~SB3&c0Or?S(s%=c8{Y&gQ?kmB{-KP|8i0Td^fPZwjB9 z&pmnJWZ||i|J4=yuQkc|s@#;%cW>21Xs54l(IdCTc|*QB>12DR<$ZY|GN_K6Q*l*R z`H(NNY3Du+Tq$SE*;VntW&cIK!Rtbvh^DG2w?urk#Ep~8E zYW=z-s;X~G@C_;AiF}P)bmhKkbzf@buG2#$%>(^B`V-NvvugJOdpF42dMeg<$93nf zDb!$AUu5t0%cgwp@QcgNg=~pD-=YWqm&>gt%}(n|TFM=%v8`(=^vQk6E|P8JrTb9q z(tWJ&zWd^7B(?rbD(bGoP8VBJ(%suG`E4=F%A7RYO)+)p%fHChk-I+n=00L_M;N#v zX{++(Tj!3AC(@`NKa_fSsOEazy;SvxOP0S;~4K`B!R|_uhVSP4A)F@fUe#t~1PAvK{}-@Iz6^4QVoNG;rd!d~4!rs_?t= z#?UX)#O_L}s>8nW*tN^s?zJ^9FF5K3) zQmpEs_@OG+!@F06*)69$SKuAjIxjxll8?Mpimd+Jls{F54@3_SkW=^X=q{ zcw)z9Rmf644t~6L;U9%l`5njj`i(o+9ha3EJ^enG&7m(<_kY_3Tz3Yte(TO-@v2f) zcOSda=~HLI>Uayc9f5-l4@J~lZgQ(CcT7E!D!uD+bzZp|(43{a?(%-^@>%-w>|pmS zZLD3W0&8mY^)P+z;2RgSf>q4k*+IJouoTc2a9KhM#BvEY0a}}SGkspM zRl&{3maCPRv9?Bs|6`cw<~@fbooFqg}-^I$rNrg!U5r- zD=ReyQ!@Ag1yr|>O}GlgV7g+nQeEHOUY@1xt1fIonNG>xLeec9bVWn4u4u65IIc2O z=#za_e{9Me7-V(npQ?Q zo48A_y7N+2j4w;nmP_T~L^Dvkat7N|NgOPTQYAHKQ+Fr4ICSo7$^X=tf8eET82Yp zm^wCg3rI&DG2WU1G{D{WXl6G|nXzi*ct#q4SPITHf ze<)!Zvm+JN^H3dL#}$yi0$eb{f)OMK^_}&a0%ZSMd{hfiINi_|TLYMw=WH8zEueCZ zznL#x!dWRiB%A7PBwL*9Wv*`;u#i@U@5LrM;JQ zuH7u4;!g?~C<_{v)-B999g4r&1KdWTyV5dx2z?1BxXbbt*5Uh|#{;Zd^alsutN(Fu zj}q+vpHR&IL-iBBDzllK9gG1@+XpOG;ai2yYkUHH3C2@sK)MXo?1s9d8oH4dggK;& z56RUb%Q|FPhpePS$hDy^LvqcfBl=4C@3`H!+m`3Cng)BXuL_+8-vhRx_(IEd@T2NT zL!AV>4oCdL~(pgquCM;jOy zG+du{33`xmh>QyyeGR&=TF3aQ?plqEud1F>|I7UrX{_Td(YLlTH_)2vKuh!w z@Y;ZmuQ~=qmjGh{qD==xjQ|HWJhKoC#$@c^z&j_a0@rKTpmhx4>H>Bx=l2%!UK&(Q z?7oL#p7TmN-g|C9GmK<_RCAsd$q!^yreneh08*uv^9LDU>2R@O!^NS2$i|Iz1APHw z6Y!X0ON>aXTK+6xVi|riHcAWmY(PxlqHAh38%ORM_-J5Z1Ik|wbPT*U5E$4oFffoB z@B`Dafx>_vS0$$&7{vwR#V4eS^Q4D=1WGw|NP&_E{^CRIQ<;6)}RHMJMgRTK7t8J239o;}Ubb~7c?+ol3 zhzuMU_@JXLs7b(%fq@(F)pcTLVefsI&L-yl}y4EJ>Gu5gd=5U}d~62b}LM;}+G zunn8JHn`^3kWSMQ?J{&16QPD54l48!B1|L%D&q~T4jJ?jJ}^Q?#y?;hAfZ0lht&wa z;18JBXtD+&lcjaQ!`0Hf9&;u;#=yHFGor5^`pk|QdQ2&fp~qisLjQ|vw+MM{VAsID z0af}hsuV);7A@zN0S;{y*CxEbB8lEEE#AWND>1eI<=kp-16J~@jAQ122bj0~iaOem zk!@*3nkEIR<>+$q0Q~%8v;~<4CbBzf+6avxevivjJ!aLD z0hxGxw~AtG;tk8w);0QSXd3E9(&9DW$x4wHdFV5D1M3`c8wR^`Znb6)rSC{qC87A) zfr-2$>30cBq%UEPx(3u%=*Itu;MXvxia=xPA--4GX|eskztIe<>L zcctZMbhE4h*-$9Ha+kF}(3vn{53q$Tg8?}j$n-RIa7gA9=E&D-Z&%FEHHkE zstfqrxz(yfp)PW5NIhsf+7(txLg~@>ts*pRAF%C9lF7A$@5!k`$!bqb;FZfNGMn0y zdKv&)okolqo62KTc~Uv_8e-WVMI_nCaPh!uBoc9V5mqA1ajxSxtJDKqu{oeOOQpSC z*5cs?++@h@S2(|NU`uiXxS$W#KtEVfx?Z;gEYX91vSHQ-(ZGgIk1c^MJRS&}3*6Si zQZCsYng&v=bZXed@+)mUuMRU*xC3Yc<>In0OOjnK_w7QY9IGs@!_nQbvGI~?&#DPl zRt>$?D%=Bng&NM)1IaMa^mS}rF_)Qr>7n+58u}ZctwiQ*VYzNP5jGU+^xs1fxG?{e zb0tyX2f_v5HY(tw34N^18PHbD$HK}dgvJOxrfD8?nf{n=am=#DQr02hEBG>ndq}om zW(yW!-dN#Wp*92`+9Q;FKeFmRvV%UB1-S#jHneywbvt0_KA|Y|lbOiGh6|sh*U-#& zb;V4fj*tp?15G09bXc|B1Kj3qpOGy!PgZ$%az+e2AS?*QLw=IV=pmVOD+=52@1?Cq zf0XjUwCrya9w4R~!zVG(=N@YHOw@}b)T-wb8n&iCt}*O25{=>PN)vj*h3d)bLbb23 ziB#AzptZn~<6&L(K47SnKR2g0x3*tmci6)QZZ9pK*6^wALwxp&wC-jCXR)x17Zz_0 z4Qbf1-PEzr(z=qllzEJsbGx}~H(y~6v$Sj%Qv64ReOw6}5PncbwdcBw^?BuGX&dNE z_Q$##-UH0h7#CQAR5;;Ueu>&%p4$MhcDbNsENBA?_Z2$RJtlk&SohoTerU2_-7dJ- zv{>B@aQUWyW;07&p$BZ8gA>4Qbah{CfM0>aHVk^UVPJ!kuR03>Y%#P2Bm0VlXoVfZ zHq@#63^M0^E)!A>>!B6vhQl1UBfGt$hU>zT8o;sbMwlJ`h7qpbE{*pT9miL3yA9md zorAh;qhH3RhO$*(DR-_zA{X|-66CU3@Epdrp?es1b78rS)jFhNb+Q0hB1vK~7YzHr zFfkpm1=S4T2f||{65~f$ALZ<`^aIG;0CO_T!zM;u2WD%!`?6C5*f&tx!Hh%MnBim$ zun*V+yDjf{q{jdgEsT#mYyo13k#=nVrX{R>B%A=kaRZis3x+P3>@y>v1xlaA9ii7ISzicWv;F* z%(+GPmRp#cxbI!Ltv5%~_NJ|C?HMR+70J9%gB`do60Ix;S-qrOQ^~ldl5uq_hfCB& z7fJTZ|G5@&4A@5zzpw-Om1D17>O=1HU&?gSh+enly37QJJX5pZ)7gN383SJ zk_#qtjyUJ4x-}hd*fG4NrC!QruMH-2tgz&~Y{^p!+9US?+uVk?QLMs4LRp8>6L}^2 zwu4RdM!#A=w#V-I7<<{zeMT}zf>*BlF_f&q(8XIfq;LVZUDnXVOF7y6^YyihHFs)O z&(8krPUiL9Wl=dNcfI&0As5bO?&b1lv)pZOi!I<>aID@Edw|wuc#c)h%3d;qnM_-Nli& zQB;|^?!vt`#a%bf@~;9epXI#@pXF}PJ^yf)JC5?hsxxtPUfp%{a}~wW-&}{Yq5qvp zNkSL*vfgvi{zvWK+-o_WK3uza?|(n9M(*pk9{$(J$CZbx0!qC ziF+&CwJT58ExwILx=`tpTbn-bENYgev4x%TB6%5@;uptJDP>dg-xRqvMXpULYg6RfloB_k#7!w{Q_9*Dxi&?Uo0ezcu1j||qiSCcT&#(H zg*274m2{Q#l=PK^N(M@XN=8Z|C5e(uNv>q9q!5B)ms;$yp~RJbMRU2L>8@zZKUko| z6!l#E7qJsZT$CSbB7-9hB~2x5C0!*wC4D8KlA)53l1NFcBvFzo$(4+i6hct?QcGWI z>6KjyshFtv`k^MI_Jfd3{kK_lxc~e4d(EI?S0goLq*=wq+mY(RAHc{!-#}=fX`pVP zVW17Lv^cKv6B91}eQ=Q9-WwT*VwO{!#1Yk0xg8UqsASZBxk= zC4W#N3Tmk)TALtlV6tc$+f6b2>V_MWU%aXneN}vnkksAlsuo*P@c=yoeFK4kwt>2V zhJhx47Tz-HTBfs>)HQ%bRt>d8F#ux&BLksU}6l0zlAlChFP z2-saJyRQ9gYWvx=_7kXG1ZpM0rkGAotN5)MR$u=IR*QkvYhbk)SSh(`rAAi#N_>-#lPpXkh!zUiuOy6T&y z_AU3JMh#8Bp{YJJZHCq+Ld!0+>_St0Xc`aA%tO;}Xxa>|O@vklp|#^s3>F|XFffo9 zNDV{=VguU-+6Hw<^K@f0Y0uD@yfyp&6Qy3WY1CwiDQVfjefw4L;4hJUJKwD$= zPb+6%Nu&l5X;npP5Rq1Tq!kxgZMc_QRA6Mr6l)cn z(`1$=Ga)mp#mwZ-Oxnz{%S_tLq|Hp)%%sgsw#hO~;f1kNSiXg6xY)E1E2&h5O7#z=Hq}z~U26AHswXLx=Tdq8WUPI% zLMF!J#5kH5j}x<D+8$ZXC{y=ebESUnyOAo*S!kV}5RO%}u>?vB-=6 zR#Ssow#8^F@`I9lLZmvEZK=*>N35(O5~U-yzWf!;JK%vWnLb`&t1;3K(8@axf zd;-ZQkdQz_B+o!n^(4F}ct>zwuM+Z3@H@ewqzxsvP;v+*d?0ZKf`@{Kf=7Z!l4>L& zdlIrQIFj&4@`)rQmXKINVhKqkej?$CgrpLZN=Papncz%PWfF2IapXa+#gX7#uM#qr zYath}3Ci?{d8&R|$C|M)lH6-GOZbT?0)6bps86rQKTEEo}ua;i4q+ z*g$R|HINx741@-T1_lOt2Kojf1Brpyz^;K&)xsBb$FkBoXcM#z+5+u@ZiD_6GyvTJ z?Sb||2cRM7F6a={_}B;C1C2o=&;!sE^bj-y%|XYY1?VTx($R)nxYhqBpmWd#?i-({ zN|(aU6VYogv7D6fI?o2bVo^w30oHBpaE)LRpJXri8)ctv>=ayC&9O~}^-|4r~+(JANz z^aQj7orBImPeGTUkW2O7gg%?ldlT}sV81QM--6w?ApftGKf?bm=r(8ox&zt+eFxeH z9e{?QyP!kR5$JnRv5z+S*#nJ1BhUo#nxHL&r=W+R8Sa~0xyt3`H~C7?Dd-I8dY}Pl zA2b9Vf(}4Opx{&W-3Grc*n8W{v-}nRGyHGke-2uJPC!pUOVBx}@hkS-AwLWJ7rwgC zYuodo_R)rYbfL#K+F=L!Y@;2t!Cx2l(002#O1p?(g3b^x0PQ1u4!S`25Htc6y=;Sz zF7(ia9=gbX8}-tK-FIR4UF5rs`q>8mUGU$9zvy~7)L(2P|83?!1)YI@2DSW8m8$+; z!M?VU?l^s@H$J`c_jl;;E%JK{dH#m`Z{7Bw#+%{)2vpi{fOG-;%UkdrpuGmD z-->o{Kg0hv{^$6=4cbNc1hfR5;eHP^0PW-c9RGJfL(n1U0CX301R8;gJUz;j;J?Wc zgQlPv?zcg^2tNcJD_^R|0CpF^-U77m0P+Ro{}l8y^6lgQ68}w(1^$PiBIl0hU)z1p z^R0Fjp#2B%R{`38&&#ED-1GIM_T2OJr1JD2PY?3+AWsi+^uXT^`8x%L9Li50{Pv;e z9{An?-#zfR1O9s8f5+=z+eaVz?|J@>Z{>Ff{PtltJFur6@U;Vd_o43{@Y#pHcOXw6 z^6ZfR2sA->6aNoEGlX~WKgWOL`v`OlYJ5&WOVAnU3FsVD_<9Gv`jF=x?4j@FP=4Qm z-w^FJg#JV5KZHGpXt#aOr|LCCJMKfC5bd@PJ--A0p*vfk|EKsL;C~4^NB9o@&+xxg zeFack-4ibk!QG`mf#U8?kmBy{?pj=elw!qQN(+=C!QBGICA4UP;_mM7((gZS-n^O2 z&XwGAb2fW+f4h6mS=0yYMjR2T&VOC}zhdV&k2ui+QltOwxa1rt0pLGkVX zan|5ow+mD;g&QgaGDAtfMS4YidQE@@tf@epXRBM1KVSc2G~omEfkwk@dJK9f_uL0} z5$h0(SX=&WA2AT>M`~rl8(t6#&MKLY`ZEFdKq_TUd&Lvpg}D+z_zY_R?iD7jdziOD zckUNq@~!*MA7O3c65bSFV9~C^J&*-HR|F&O+3p?7Tyue_Q5;Z#?x<#=Y0d~nu-SEt zLzFrPzFAL&ksNpu(AUB8iyn-Z*h0?jAd+kDt0xC>O!1z|SJSETq*K4XRgSwA2LPag!We}(DJ zoeAPywIpBA-4&n(CKS)39XsL#%bp27zT=FPpdZ(#zxxz&h9_N%cSR-LgSVBu#!1(h zhIafGB@FM1rbNQ(qG+w>ydaV~(yrD0VyjpI?KHAm=8m)xt{_|uuNIX&{6^Xz*FEC( zR7$mw;RQ#^Us@s1{E#6g7_g<>`E-D46&i_oQQ0+MCh5dkHy_nJL>lAkWZW)mpbw!5?flK_^~)BSMB<< z6b<)PZa@cjNJSz39`pHyb69FXho<;jC@|qBt2Y#Xk5xWMrML*`8CFXT=glkpRfdM! z?;)-47kOV^v}eL1AJjEZKW6>j(rD9~aX;vBDSx64UnRUQEdGo0#(!g5M_B7DC-Ri= zI_-;u)(kK{@O{ZD;Z2TAE%Q~jOc?W3hKxG%AAR&kMN56=t4u4CR2g&TBi87@T6^r# ze|h%Uqy8QJNB+AO_3zrh8?4dYT6@gVg*l-mJb1fE^m{+|uG07xs4*93}QJXLgKi_<7$xJP#PK4ZQv-GzZ(*`e5w zzS@IB+$U;F(+9N8E8xr{?VV(#1P<*G-q9JZpGRDvB*;YJ3{iMXDAEjv);#H9O0y?6 zWfwP?s^p1sd#j>{evdQuuh)!qQsBgTme(Gyg80swJ!YuaSz4*t&>B7L6#5(QZlt7~ z`{7&ulj=Y9uCeJIw30P2X*Ha8@xy zJ;KjWiU#?hG~6`#vwFmhKnxX8_GzM~SwyHq!UcL`k9E3!@iS3MkCdc#u>{79aRhAd z)G*|OCMj{^iXMb#C3tbdl%DWsl8P3DYXhklglip*7vVjGE1mBL9pT*=GYaq_Bo6M; z^U3>i*XMZKA)qIk&#y>S5 zcRiG%@tYUhanHG{SE95x6yb_s4{09(O6@@714sU!lz)@3D}4Pnz1vE&F0nQHz^p0B zl;V#ftoCLXu$8YlN%?BN{z}>?74Xl}M4g0pBmT3*iDB#B*b?>?S;AYn5mUkk+elu8 zy@hs#?iubVFS~1DF)v<84>={Fb}7~<_dDPovaMWTq3~87utxZ zIglH+W%W+VCGWw%uXjt#;7p91azkjd9`=RrUXSiuys9a;?N2WCC3e7@!lS}+58A^) z=pRT@4hg;3G~6*}rVs*O6M`k^SCNnGBW^mwdkm#|Fw$Ergim2SMTFv2ER5hku|ds9 zz_G|z%}A2Ud)Mhtl(e0n&affgpdJJ)si5KzD7*t2x`gg3#$M3JK-0kPD$42>1!1rTcSzx1fY9vmOi3Nlrsh^T?Ua4pP4%NGMS_|IWR!TemZKP-)P z=+za<0fFHckba+Bx?k_OqBegyvy!Ues~fnFl`lnBZXQFA(@mD z`Xd#P^tx0GU-6SB@+2ZjiXMu@hdd!Q^zSac&>tk%sAefdDD@tk&Yc5q2qrmgC%n_W z-Q6n6Fpp{lPH3nw#ACn_&`>P4rz4;)@4I@3Z@c&dVV-7&grC98t=sAL+vm62vQv%%v3GBPD!t z>ZU3x%5c7S_#i|B9{3Qxt$cQm{}2KQaVzc2f-Wg994qg+=I#G~eOD;Pb3h=6ftkS} zQa)7nbdJ8B(OdkB9?&x9N_i6J+!k9I{l935`?fawiR@SUk{68YRgIDNieKOArM?@< zAj~^q_7ERMfw?4P!ugxk zTV>nJjhH{D;bi|yh(e?sEu7Y7ddGVa;G&z^beGUwYeD(21mm5Hg_{L@IA+J7)4aj4 z(N@j&a+8j!a+9l=yYZGQtMgJejtWJ@M@oa32nHOswtQxfV*B{il~52NiW=rPrV17t zT(9L+>Z!q`=%D2)=~A6g2&+tUH+&h25+VVjH{xiriwC{zVhXzp7QEysTR)U;?1oFq za&4e@JX~Fu9Qq4Y&l8bA;YJwGicF?AVw)G7Z~GgcR-*q`FJ$8@3jVT83~MwK2xcA7ETMs2X90MxKxE5#hYV27uwIdZZ_W(GA(U3WHVXn z>F74Onsw^rlGxjhJl+hDv~#Vc6&Y=PjzDWEo*npOVP(spr)MS1lxb-t_jM;1e+SWZ z_?I}0O*2xCYct_f9)R#*9#*<0I-X6g229>Du7-MS)nCAdqH!Lv#;w@Q18A_#UHFBXF)`At zTq;?sw9pC4xjfN%Um#m7TciP4KR&|o!e$fL8QJS$Dv97R?U=9}w z%<+;z3_|h4LYoo+BA&U}5N}{iU?m)9?t;N7y|5_R6f7MK?d|Oy4%bPW1mofxzF(5j z!nmK686^JIl(H;k*@A%hFUkc(l(4tmjJ9>y#431zb0|?AD|eLRV+T^0?hV*(qFzo( zWcT?Eqa{x?I#{t4I!IuTI4JVt@SuOx*b+jM8cDXI7B^dFAg^uAqFaGX>p2ZIM(<3${3uvqJt4Ss27jD?zktz)^DZ?9!-DG56}qjtHINCJKL#13 zca*?0PAWY&K~$KMLm&_>eErV3m3nZ^`DYo)xMkmi@HcVx5M+_5GUZRskLmgOp=|BcYkKyTi-k;D6)OVBmvKEH3sQ2*|`F9s9R^n7}%f47YvS|toW z{vvN&iE-igB_+r0zQhaOOFs}ybIot4pBi@od~&g33^6Q9ML5K&Qe}1t3e7t9##??g zu^|HTqOXaG4<0_ro$RjOE$${PdQ8*{F9X_sUY$1(8{d zKYA+<6F^pr{m$-SgGg_X(pIPk5#DFT*s|Y#6LZF5>BmCL7Gov_=i#PzMRO(}Gz&AM z&p;o=8ZK;WVoK%Lg$DyYyUsemQa(T`8=o;;)oyM8uA0?3Lc&G5HT50cIGQ#DI#!Hb z60Iu~?Mmz%|40;@9qb?@1n;8x_e7YKC$>dmCTq^x4t^0Z3=AiCw){DgTD`TFc5UF1 zEON@-kOGze!d|8LAwZ@Te_luYE2Hm({LgA`wsYGL-7=X(^;Pig1;nvm*{k;N#@QCp z3d^H)DR9a`dL9Edc*+em-KxJ`ig;TPxgyW%@fc}CvB35TGzJbSab zSRq3XwL@_mpqLFP;ku9@>3hR@+qfElBmoTRPbk3y5V>-H+4ffE9SWeW?93^S_6T(eCZxuEQjCjDcn@<-|k_39X53mA;_Z#77?cFXhuiBJbk&! zEVl(&`1J;>s^@SZ+l6s%EYG?zfGSfyPR>%VG_ly zb>D=c$BP|WtVfDD`XH-obP<&F{q7MeXao}FJrdv1PLxnTHFR#~GPNG|!p?=UO<= z8XCu1FXx&C$J!lhF#(!~nAv)|ut5vy+Hzy;;8udCGUi)^hc&n%cA`)_9%FxihnhFA zsI=zXuL!K*z*fjLPi6uPFHJ^wRpjc0SN~KD9=e(BM`@1Eb$eQ4@6}6-wT7g7yeGvy zSTc2Wr0)&Qj&&uZNXtR0JoGFPUn8v=Le2_Dtfdxx3h(M1(B;2wMW^=o2_EwOLhY)u z&NL|Z{J`H2XFspQV;ZsVDaRz0)mV~T=*~0FbD&W(=TxDac3Ov!|K);$rskuN?TQN7@AfI`LVgV)>pejHv1dATGeyTzmh>^W z>Dz5<{Axe915VM8SE;f6I{qsUuBZC$xX5J=DDTaJe4vT$foJ}&O{WeB62HWE_u4BgaT3G}eM8cA@pN1!2Ii=^woD!Dc`tpR zTC^-Gy^^3XrNL=@*LYHyJVeB{n$aqae0`L8Fd;8vv5u-vZ{<#JkV z)<9A&x4aT|no5y?SVS#iO9u0zs_o-J^`HkI651r{z<_^10>Bi$WPow_TL~x{R^gso zaqhS7ZX9ILtWV$=-5Ra*BSoEUF`HE!xACy9^R~ad5EC0f9j#nql_(+@uNgw+6)n1j z?mrxTokEa~n}!$Nj704P5Zl5J82&bul9t{lTx-#g4ZkuNPS6Km&=*c^(W@sew2Ns~ zDbi=;HynMQLZv-Sbf3a{f#`VXTNEWY0Fry_(lg@JZT7vHPIApnW4K@{rNB6@d|g}x zt@>jbn~-fEvu;Qnpbio})z?tS?KT+cEl=8zeS<6q(=Z+;y%lIL8*PdP9u6&cpFsrY{;0>7?_LoW)658caH~5ng6O2#h^%l>o$<1R@c#?T3zn+~`@GBnMyB)74w4$hLEbP5DlmP8inM+Ne z=NnbfFXVgI^pvz++;TDTBZ4vzt8lntk2t|b_V-v*2yuxb<%hJ(AfA!}`Po}uSDq@x zRxQ0K8KVc1@mT>A6iRWdfML1;URR^JVtLEKPAV=Rsb+PuTzp2AW{9h_5aT$2cL#&@ z8Uus2#ZyLX+Kwk1a6b!5Va1^pjFb^G*p=hVX0zE#@KACvgBuqA^0JUq$ATNBSyPXNDU2e8#K1DitTgA5D~FjFuyv>g7P6u~1O2a)F%?!WKc# zrRCl56K|;^;bJB#Xb5(IfUVSN1@x)-!%#_$5-*>WgOsI`l7*XFZ{HT&l#Vg>7zdF3 zBr-8nI;*vpaeP<+3B^YqQH-oA1$(d~7QSFGJX5k59{X&(42S;%!PPi0_fN_V|JHk} z_lT5Uu2#cQ%0P}rtPg)3hcDHDHBnd&zKCk9F(y7#UQv$2=#(3(MARrCaVcYLnlA`~ zSJf{3pb6%OeC}Pg!*o1iv-h=oreyggjvwT3nq!}IQ`8tGD;`328%t64v}J(w5Re9A?uS3&_e!iAyj5P)sW%o}Ccl zByx)as`i;AW-!F)cfBhE<@v|Kk^&HCez62J1qsxm)5x=QCG#(?i9(HJ>({6(evVc> z{9yX}lXY8AYH#fYQ@zUM$ zpTg6N*!mDcOs$4+Zj0fueiN0(U3SG0K;oQ%c=i#W#ltEu-zmH2Mc`$5(}@`zSfVUg z8JgN;7?m!U@-CEqiff(2_l#iR_g>yju%y}L6KFiITAoC+mU+g`Zkrq~+?)Z^;7+0J z;tgHl&GXWoBg6hM%Q&H%q*f%n^AxkMQCK_RHzxR*pv->UM2U?B(TxYGfja+z{V>pc zXkaV8bn4GtmcM!kRz@)pbR{PQct$;9tUZTk4aNGA3t=)t#}Wd2us+D0df+) z$0E^(zkezQ%vfQYdS%w}<)sW6(CU=NPY}bZJZJBFds!%~TZ#RwDp4R@@yn#+@K(rQ zQpi_P$d^{gM^_N@C7d3l$EKhwwEQR}6}R_}kSB*ji`53(h#5~I0B=cA)||>SvZ_Sb z5{3@$GGWjZk37xWhS+(Yxjb>t)6jPk48<}gJW>t{b8j|MvzFz>9pBp>uRBYq(|E^C zGVssS)QTWV0@OU}<>|9|-|KY%dM2nmb*Meja;n8A{| z1NSm03#^%>v9H)dM=3l<^E`syZm{uhqzkT(T8|fiL8AD0_LO+#WZWUzD!boC3bmVO zNY;VIeDMj$_BuKk54sC7pqUn>5Q0y!Ku8K${a=TEIoi#^m>`+JZSAVHO1Ej53|2H? za?!{qTPNIToRa3Xy6oV7b{qdW9k&^oO>m1;n|OxDGZl4@+rw0qq7wLfbc)$VC7Zx5 z&Ur}3nj>j2An8v(i0h4uW--3Ve1l;QmV*_?676kO5-^#r2fRt2^}#};Jd{m zvceWx58x;ZQyrMd@!#ronVpq4`|!7C@T#5M64{TeBnp~+KezuCzk;s>QEktc->r9C z3j*`4Dqxi|{U(=$fkT+lmVvL7za@uEQWN$+rg=+b6)rs5V zAY28q-Ue-&N4vk1>x06>9Jx3yyJeyb4FU5rP-P()fzhD&{h4eegv_vr+gwzk&?BxO z|FV6XMf7h=x&gLgt6~N;kBQQi=?V&X_Vb!FoH86p$lx#cbFm5anEV)KmI2XUPpF#G zyS!HQk)N~IIXKGyB9l(sOTxIkq|}<7?_pBl5yI4G%+$oK>Lk(C(^WigVsTE}Q0E1a z8yH6!W=8FT1u;k0UF#1V^kZ5=$Cyi$RX>D_82YA#vMO&1py^*kYu^O1F%NwQJX?%z z@-W-?GNZt@)Txr^|7$i<3ICJE5;M)?S>*Gyh5Um2GH~_bsa>`HVCgB2+3?!>ZwEs_ zM}91=rP4nc4uMcxN-eyt3UUx=*ch7m@ZBv*MKGdMUap9*nJbU2Ol&iC^e91NOkEh^ zy|3&>NwPE5`$~ESoRGwv2KD_T?ZCTqH}P+X>gVmQIC<0@?2z=Fj0BCEonj@W{dDd2 z)$|j=?FKDoDpw_iJTFB0Z>6gHru;s#LT|^({N=_$TyKvEZp3<&fA=SRo2V!tyJQ~; z9HATah71)_t#&Gn>ZKM4Z-$z&FZ`jA|H=I9p){Z4tU-`44H&|*% z7Glh3?dup6TlJD~nW(Z`FEMk8%PWKAJO?E%sk2t*TFjx@V9m#8l*r+vvo$g97Mfw= z!E@}U;Q;4Hu4t)5iW>t8k!i?7mLDMd>roS#_j-n^ z!;@6QGkM07&1$c0vqHK z0Nxj=+9ne*OL>^I(Q7&xs@GMlce7~$JK-|JWIM(_6vLLH3ez}GoPXAg-pTVivD&^; z6&CCvBo6Q3I?i_{7ABDzJTma&Fn3svjy=HSYkZTBU-Om%?oV?kBr{fG6;#i#MGFKD zxAEn9;|dPmCWTaNi^^kL2cH=L%fYYt5^r}M*vivJge69W5hw3KA0{KzCYe58@V+*h zsd0WOIYk4)qNa>0+3sm2gIoEY_H2;CT+*U@eUU9OlAMORtzZ-S^3sug2d`ik>2>BG z9+SU_hyANin{nGgUj~mjhZ;w?*?m5(nKdt&S9=CS#J|^WHcctob z=wxr5ElR(62eM-b9TK4F>D$&Ovifb(u!!X zT($W?LY6~+F8$3!$c?8O;v6{Shs9}KWwafNMo`%1Vu+EMgwPKYL>b4)N=E3EAOsNP zv}-_6LJC(S%rQ8NcVS!Ta?{T$cgCc^#RdQ&5+ylcadsn%)Uq}de)I16aSL6lzihET z@B?NSQFJ1N^LPHVm?#L#QG%%H2C4=l~-Nn)5v(B|WhwwpV$_gI+g?B!!{4ZXE;q7aLoLn-kTDXS7z!%ig^5>zg*~y9P%d>LJJKBe&RMB&DIBP?3;2GNVQ~KCl~1 zm&@{vA1$9c6E9b@-Brl;H9bZWEFc7B=jyhmhP+>3f+1p%!)rTSnPE=fgQ92OzG+{` zv`qUqB8Q)TT$XG<)!+p@8z%BTuc*M1SlC!LutXLCV&IMsBw`X2l?6}`B)|@1q(q?9eLqym2lK?p3lT}^gM@T=%Rb1%2KQUPJYE{wXoQZ|QR<(t5o#%XCSG_7g z0TI)}at4=J%#QD=|8n~bQ=+6-+Cz{S6YjT}W7D;r0+m$Ng`e`hG%CUBq`1v!6d+$h zF}kI5VTXtKcdcz#%&5uQ*v#c7qXixe?vM{Z(@V#g6|%JJA_ai4@9i$*nPWq>lWxl> z8P$Z}6?kcgYzMfHdh2Q@VU?S3 z8BMZhpk$VcqB~F{&5;m8Ew|XQ=MlD zN*p~>JR@2w2eu1fB_+i3oyp0)CE!#4lCR$sx93MeTRt%5*sb+zYSZ(Ep`_wUbbOq3Vuyx_B3vSJsMQ%cu zvl+Q40||hS?`;|xErZ^(nve*~BA$xS4)fGC08foVMYy@hLqpfA+`}!Z5`bz;fL+Nb z#-r~Qr|A_}Vw*_n|6WLHnGw?(LN%@+ z>i?Y@;xHm{)o@*+y?BZyZr&YXr(-HV>${I#ubapohV0Vt&m7hZHIP4S)cW%|*x85jLa*SS*xjFYw=*Zyr;|zEGApD1jo?PlqsbR4OjK zsUq+LBsSpje)`@G!lRqhP${BHYp`juFn8zH#jiuRc4DGUgL!L)L)?c#c2rF1batk) zeEo5iN#75$E0Zcl_VUl@A+)ej_SS_v7F5DYgv;G1-Ks@`yq?Wvznn2TN;>LvUcWfG z1L&wqEvHv<(`3N}JeqwU6R=D>L#AaNo3E=b%~-x;ZadfZ>S@?&tlnxo2ANwy#|wEO zut}@t>n=ZW#naAN(pYEfA+;?dcP5Uk0>ZRxXhR^@nD^KFH4!kRxTb7O^ui8g?riA> z{e5Ri#JG#;*{AViA^|0>Pf0Bxp<%1r@H3+HJT&-0zY}tV{kXX0H1@D_N__?C}UhK4Ov$!r6JNzvZRtpr>To{kv-Loyy8Aj zz^(7{fr(NkA3P;)Sri13xZN7>X%6z+ksRkSF4(?Hn_{pR=2df5qK?$deq;XNCYhCD zvxBX-gU?EU*5hDgRS7P^L7OENU>yJK95pU>n{jH7)i7%qRYa5igBKnZDC1ms<>odn zDQ_oWSLCT7`P)7I4ViHzja=4`O3ph9AgW zKH3lBT_(`)kj0MhVyD^jgkq999fYCAa&O}L4oaUSl+NaKPb2f+H}CX!-ecxCNaam4 z>|=&JIcv?@b;uo zOpYfe@9sdz;NL5ds)mfNG1GF$v_{k~celN1hfRUfMzU&wQf%wr>jKWKLyb`kW(=e^bBck-QsiJNF>`Rq)7j0+Fl zdrwO3P=cp~EsDIwUUFEay|Jt8uU5UWOZcx+pz#LZCqW2{q#l#@9Cki`a!)bE7VuKq z3KJRf@zjD%ei(<%K)T>QRrz!2WP8GKZ?;{sG+1AV4wCnJeM7+TvN$}($a9=p{507n zFJM1a;gN?sddqIfVVch13~ce1m=oV^SoW3}6DMgKl<*lrI~d#%bNf<)1<9baijlB) z82IG{Ly)v4mIX%@{1e~Lg=s$Mw*vp=_C|8-%Yp01@IlcXARx{BkFO1tsYL6(PfcR| zw}P1hxT4#T{zx<5zKmsL(|s8ez2C8w#3T>ZS~kShJH^|adjgW)Gd*kM^Y%uU-xo~7 z(P~pvfH1R(qw5jPiKb5{W?vu4MgK3!t-r8OaDtoEYa=DsWxKaJ9m?N`v0z<+MNdr0 z-~h_^=%urQph1K8BUi2?3+^JF#W38c+3tF8Bge$YynQLTd5v`pJt{iazT8JD!((u8 zvpJG0yPhyxm;M zu?#iOh*OV!w&No*h8ehtW1lqZ%1BuvtKsVpql>eZR0Q@98*Yl`WnhK>nMU6WE<1-T z@B|v7OlC7=D^)A*5?8PXpdrLbN0oa?$Ak2{5D|=2bqIn7N6T6!T2kTIo}+rG!KNG- zN)15MJs29_h#|P}aQI=sS@$M2n=hjNZn#BL4XKzSxj}ZwX&QFVs`vdK?P}LNLD^2& zJw_=4TC%av6GIvov;a}3UHk084cl}#hF4-wGANTejXdnG(XQunT?q%Q2ki=p+AcF% z3`0|LqHT6pochc*B+{_REQf7?m4WXgP!dEfun~#HEU;+}SHE2!|FVc7^p0!w?V({A zLmKxV2v%SVkY%JFOe7_ts@&-~!uKOxk1KJFxfxCZ6oJ=3-x%1~XVZpwR>1P)ym*BS znL`7bnGj;jSi=H*Bc1>S(4-iuL<6Jk`-&IfXi6Od?`R4)FWVw~SvOx1XQnXTA3A$> z`2dXUhPC|J+(VTmhC|5V%ymQb*6pzU&bN2(p6*Ow#eCJBUYc9#xL1rO5eCy;REURm z4a6Aod1aDIzU@jqIQJ5DllJXu?D-qPdB-I+@P^Y`;9Sh@QyjbyIb)wl#ka5OAz}h} zd*MGV*n;4BDQfI?fSzcBeR!CqCp4#C9?3ZjTY`)Oq(iEvxh@IZ2VYJ|Ug3=;a*}aN z8e>A8$V!+Q)C^_w6Ssz%A+aQ1H^}vV9Jg!x(CsT_!By~zN z{W<$2?==kf;CeSwf4E+4>=yT66ds^o`w41e2cWm0!1c5q_?dvCF-XVG7BC!)-zKo2 zX9j)@>4VKrS9Z6ss5KlpS4Fi^gefv^e!m3xq5mum421o&)p(X!urOr|_@6}%YPG4* z*R=48M%h~KyyRPALoEtVF>I%v(0+GH_gNFn02wV~BLzyUzS_R&1%VX|ZZ+hy!&ytF z;BT+?y~(j1wM*yhM}(0AhG!xrm$LIOVDzQr72 zAbyJ=psD{j?A2|U>Ewhqf=P(7#hPrj)Sf`s4B#yBK#IF|_-;Hr{l&M*p^4qd^^@Mx zmo(RD31hw<;^T&G96>m2nDeCyL4kDuJ1)(GydC`z^yR2IOh9EvN8}Yr1+EUnqK7`W z^n!-B1_LMm^SWR<0>WWQ0d=Z4PQHfgeq)1e)=bP+eLN)#FAuVo`OzYCySRnLD@j^$ zz5}P|VzWA@-VUE@?%Y7(R_=Vqy0uSDpY^zM_ zz}KVIF7>t9_(HH3nE~Yq7S~`5!E^i$3=2E>IBnvZ4>bnXD%14nWOZzmr&10$!ZRh& z*yRlc-epwNC-^apjbJ3-MPd6#?#)3Po-Zlf6X=JV8@x-9va#%u=7tIt%;d&l z^^G3bF#T<=OBR?s*+%@idgt(dVnMILJD&k$4axUZJrs6+SGsMp$Fvm6sr@8a-C}`E zNXT0*zE#z7;)Jcdv&O(-U?lw!Bi=COIXDwZ;4`#M#p$5x2sJ46+ zPxr}WP-Y!b8wpn4G5$r8X;c1I6qW@0We7V0&57>j>nh4+=;$auk2-&C>e}JA`I1F_S6C24uJtG9C-qApOX<_&E7Au6?xqAwLmgV(ui6(f=I8XB6&*TztG zBEHhdqjVkfk8W-KezTSx2Vhg*1s+isD=L9H>^y_m<4V|N;rSY+gA$vje2wwcGn=M0 z2Jf>ueJxD}V`W9TYQ8RlsanCd$;y!tF97hL820Me5=f1+P&p9uRO_SrWK!MbHN}Sr08cBd94gvTUzs@ z@b%oisma$~`fxII-n6Lx#A#b*VjpT6)OJ^%JBdn?mizl9TIs7~ z`{CDSKgGBCA}mI2Ah&D$cGxt}8O{+UAVO~BBvnQlOV&Wojg+#&W85wFz6@xr@`T}; zJgu}NPSC3?6u|V6wf)p&jzOqU*#K8JF#aqA`mwa$wbZA0JtLE&5789jw9D{47vABh zg00L168V>b?Us3hk}7KS@g-g9f%z_%4ptfEk)e_2nIumC-ntyv6%c!m7jj$x9wwbN*{Ccmz$E5F(R4&W}?6q7?_Wv8!h@VJys;Zp%=C3&AJLk`hA1b-(nxq-AoMh zX>HSM9e=A(gj3q(MYNNBf^-82)%BX$Kmir)a>0Rad!wEEgb`+E(%bIOi{(uU0r9#$ zNCscH)7$x2e-_-gyy2WYO5_q){aL3fnq+bLeHV8PBAMhgU&8(PqzjP?J*OZE4GTFQ zYPzQA2{SZ)y$@>lTVLust)1g|c{vF3X=yk7eDH9+ly&g1{WxD)+jhQkExo#gV|v#l zsykDQ(@n*Ek3({^HPnPLd;B=dUwvZUdNW`fw3%x{)0)rH+U9p2V|ORzCf0fRIN$V1 zGW1a^!~guRVB4k6$&-(MP3jrb(E86J&`%8AX8rAU!9e!vn0*B7UNy3gH^!Jx*xB9DzsM2e$NTQow zsavz|nx?5T-#6q>xV{>S=R^P)dxH9vRWqPxx_3*Z~i6y4D zXv@gdP2>>T9(vuVwV(V2=-*{_|_BPK3wn9YTH*RRK8Fdns3 zRyxbDa94U2t$51czaOitQHzXC8j5`=AMF^uS_;z{^j6m~Fs*4zIMIy>*}PpZD$sh} ztTYi^S)rk6-;>m5c)5CnW}NUnRo`*Q7l%o#hVGC)1P8f3-@JPNc06^<*iQa(-_i5B zaq!@28*=+2GVDRwHbni^WIK2>rxC%w`k=HvEpJkTRlY{|`cB2;+ofuGS1k^bxv&1v z&h4Jz&mAoL)ta)C_QR&~lY@=bupLN|xZnI^Pfz8EL>u5o0Nwm3LT!jBVSssd_4wAw zX>E*NT9ygQ{6&6ax{%9nsiOfO62>aT6EJiCA=dNnAV28mGQJGUdCU>lv84D3#()x zEQ;MpdtTsy%HI}0iVrJ#qH;y|(gp$(JXEEN#zxc z(}*DK*iG)svHFhJ6gd=v{|kNXgMs0OZ}V96@(6yqsXZrWRfiNBeN}(>p~gi2#znw6 zp)#&TVzf=rdF-D`zT%u8mXm%Z$Jp&=8)hG^z@}wC_G*xxKq1jFmPQaATvL!~KsS@v z>J0p%4}~>V@eaI)=};tvHXFUsB5l~xiZnNJx2~R#sZ~FAbYw?Ldl$wSH99$zlCefB zuipO^Me{ChLgB?YIPA#N<5c&C`5k4I*INc3aC@=>YcXML+(oYOTcfr|UjpfP5|?C_ z$<=2xptf*y+q19N&+Q9SC6BgI=cx8}<-^C$IX!4T#Y_7Is4S|GNWgK0(7(At`uwG0 zu=}oE)0!qk6_QoCJU!Y+J=WTRQxqf0zZQVzAfA3je&ypxVE5PWq#Yfx_KPl&Pe&j2 zpl_TD{Y{3nbFruj)52Q{Q8A%;HtUbBUxK3!f9IOT(CC2Wv!or5(=;fN9R>x2!T4|8 zE5U4y>_?aO@!LeiLs9nWbEbFOA=X4qU^+%Kstw&Y_|vXJPOgZM<=bZ55yNO(bP(FI z_|Vqx#M@yZj>QslwlQf@E zbl)BE2(MAO78z5YCG|dXPq(}m2Cu9>$K&2L4I!xw!*R+0<3W zEco>Z59^L!;O^0W>tYzwf%D;W%e@>UWhtF(o?srO>FSK(hM)ltHLLDbCFPv>U*k{I zvR5a6Pkxno-DZ-s#C8=xsLDyH9~cGNfPp&FJdGpW;b%A0-M~E3*k1buP?0!nwM+sD z*KsuJ!YEj2wDIRThi;CsMU2!hYYc*ZwsZNZ!XWtFwl&lEJp!mNlxL6F0jm+)2);U! zj%u@5D!nBRBh|hzef{}U(+5ny3BQhFgCrc*q**E;&f8Z=h7w0dJ!#JAX8vACIeKl;7zo9UZDd%rb zaJJ z{$VV|Kjd-}_4#u@*S)PLl~!%q%q4>mqb+*=XWf+VdP-Gj>^Te?sgZivLsDwk-%&Gb z25QE9C`Q(K_R!zmSj3k%CRbgg*p8!2%jsXSN|r-4maFJq^Msf@7X=xx*g`Yrojj@T zHHn(PR+sd7HY$XOd+yU4ero7u>eQ{X;a78FzCE#g1(7**f`zBQehvCDKo*AFF;9Ha zT}__hF&C9cbde?8Wc`4aE?c&?xdrsFXdWA3$P6hs=2tI?BdD+cG`>arRs^VlwvK;Gr8CI(b)ZaTgT0xQh_hNraC9N z){mFa{)sKLJBj+-F|sqqiKZ7tltW))jVJ(4^b|t%Q3Ad?ynP}FqY=A(Y~^{BSDv+D zP@z_kjh*T45=%2Y>f|X&+i5<7s(2edlG&C%P1nVMLgiiq9ES4&=POS%!4`&4O7%u- zxXEozi!t)H?3b2Lm!`?y;$WV7jQpF>tpT*yHijW`i?n!a+o8%}I8Uq^aUZ`#P`pXq zAk8p%9Q#f0)Y7}C4sO=XagXo@vR|*}Su;+% zxc5BWZ_B=uOw!s|Bzi^S=xQw($@?%8y_O&!D6E`6<9A<`yr#zOHt(w4V`aWLxKlSq zOQdb?^|>7c1~#G_ZPH`^d=IKAwCGv5OE^#fG)X$uHiYju;%qobI7Vmv9Uh~5$Gu^=7*L858Np2^|!faCPc z9Z~qA>#xCF?X9-XIKCvu)0K$9kkk=({+6ujfjH*^z6in3&@etIc=+D8KwIRiyTAK~ zNpKDa?U+IIrLLwHaIh|-VqOZtv-d=%A(DT_nt))NUI_;^!#u05Q&7oZi;eKqEBL|1 z1G?+bG5IJsWHKNn!3U)THk#w$Dg-*HWJ;xOpA!$iv>(vSzJVf~-8kf#wifS7|&xk#l>cnq5UT+<0z?XlU7rAWMmZv6L*h7eE2}3prqY(bCqR*}9CtS7bDgc~+th~A4j6Uw*4?)7Y*G~uzPmtN z-|&VFL2apmgcfqY01knD6D|$A!hBb#A@)#dE({;wc1pkm^t%$ z7dg%O$C*8smLWfmRquIs8lKEfvj`4qIw;Xd*vR~u^y8-Orwqq5>am$ya`DYG`Sdp& z47GP2M!Tt|2ClOiwO$`%bN%(Pa5AgwfA-I|MZZ40NH)B7+S>0D$N{okv6^2YVO>wP zrLPb1%Raj`%CukF2QOcKBXVwt_9T2L4GwXQa&)D*3TOVz0*Ra=k@7#?K{rnReyFSS z;VFB+pl5KNKJ3kfje9Jt{-)A3x9{nm;kjZ#m!EU8+9-}7pRd2Zk44bkem@D0^}!ZE za{0p(2$47O+W2nCT(N&}g>zC%^Zf_*4WJu0G9_1!C?X}kYrIWLZ;F_&)VbECb zXP(X44a%wH$4bpH=BgZOeg9Zu|L|er3&GB3grIPSaBI>#jGwx}!nW_@o&k;`P61oj z&d(nUSO0Fk*4?l0e0gGQxzaUwamg;hk zVW7dft07&6sIj9a$hm;GKq9NR=e_X~L4{p2w(<6)mnwMMa%{dR{vtU<9(cI4tC^i=r#Ujdi4CTzrxG$udZfL^Esr7LtbzeTWaC{AUK zy|VU}(s*J7cb zr<=>FN)N%ykrteqN``T5a^0xinrYbm;1+Fyq%XT7G?7BB)|G)oIW`25HVQc_*$J&S z1|{-K*W{y3u}s3#-|B~}yB{>8k}XMpg`qm@A{0Q=G8eN8+LA}Oo3Q8M_gV4SZheK} zLMI19WvhPPSJKkUEH%s%sG*oq+l|&NMQGjDq#P!aBWfRQ{QXPItR@1YLZawtY174( zwuF_H^2RV*K8PI=EX>;9ntByi16{{; zjvXnDF8+hR6X-8}ocNAWH0uLu@ts@EZH3pHYrAWF6Sg@uPWRR#Oqdjaw}+g_f#Tev zcG15IeEGuEh2Jm1^Y&*ut2b6%ko4Uf!Y?~h1D=Z?kkK87UWM$E`(hJM7?eR`{fjNf zYJ0~3$xw79JOC?7r0{;%!{9dR?6wObjBWC7I;vO6m-K<)yZSBa)lRIp6yA@K`_zMf zKV-HU8H2v68kP`Hzwc7~-S;e9Wm8V{A^%pM|2i9c4`x`{xrnIp4Du~HjpaLXl_WQ0 zKK-uae08}raMSyo)~FZ|Mp9N>i>*-dCBgNHO>^B%{@B4)E;)gor)C!C}oA3c+6Ne|-{ znrD6qC?Y5{@4F5D+>n;ldw;!QdKz#{0rX30w;`(Gfmx)Qk!J96YeYNYUzrY?a^Inz z0!2GvPJaZT`@k>5od!MS;^jge&{&b(Ah~_;LFI>y6~&q)n$(-bpodG^xJJPRe^VfN z!@w3QIpC9;U|2`_UiCg`I8cu+7Ziaav5#!gdEfQ6xtK$&x07?LjN?3=!f!2~RbRx^ z@Q<<=Rh8_@=o)7W^o|l)+=o(F0V({x$a@&<%1%|rrR1ugm}If*aon&o8F|$vH6}Bj zS6dKaDbBvQZfbW&1}k*Sc58QwLf%JZmsSG$l-8tXR}ZaBuMm_FTt~2Ix0KAbTV#*v?p90Z8f3||zM{-xJ&DJ>330=1f^^5qiKQ6Yx_&{4T(E<2d zHYZd+-IdE2XzdPj%=4Q7Ng;1DsWluvzEa$ZoxAkzv`&17kIqSuWdz}1pY$jE+JS0xR zl`NgCjS$`!-ajO$yRmzG_2ry~mUdz`Wk4HmSyO8s^tc3S!RSWDI9nu!XLt1ATN$<(L z&6DmLs@k-+%wCRBxV!T?|Nn?mm7RS9)CHOZb(m_!p%S-w*d1u^XrE|rY40t@no_;Jl^sNic}xLe zwkbNHql{KwHrMTY1x52G^I>Uem&KTC28S)(UB*_wO)mz0B2fC_W&S66z<_Xgs*uR; z(al&f0?N4`C%FeHqF_vuK0e?N$n2nOQH}k1YPWS=>{;J zL~o5mZyL=49wsPqPSL(z61R{E6_xbks4znoe&(K2arn*PW~A5~I@=???}1KD67k;Y zt(|k!@1tQib5CaSX4Q>NfCfI_V6?QHH^ZYQ#TR^n7*tw#&Ja$auG|f({BT+cGj{GY ze1)p;MzJZDcvO<;e}tAzbknE6@)@h9v&(oOcQCnzA=qf?1Di|BVwHFZpnK8SrhKbQ%mKMXDuCJVRvp}8O(fL*2X}hJxCTAK)(sw-$ zW`VRXTe)jkrD%Jb!0yh95KxeaE05+uxh<&aIFa02@RB&;=68w3!LpFv0!LG}?#_As zPbOPytk}N>83ol#e{2s`7l>PI<5nBkSCS_m3G(0ZvXj5tj9X&QlpX5QAL+h0U(9a~ z<~p*o;}gc%MF0a<;4R^WUD%C?4djJdah2O}jfqbPGRr;@V2A7_tv8fT|D&pQTVEHY z;x(PovD=n!&J)!PKHPo#=}FH%*CU>2NMT4@GSjS1TATDU4(?~Z-1kDn>gjyFbAqf) z4S-hZ3H<^~B0HsN%Y{J_4nKqT4pM)g+J=BV2SGd>FC=xFHBsN%pw@x%W@2fdJs6?r zWFgnOY(Dh~;&My0InMAS;PK6(8-)`e(o!)LPy^1XqL|& zuh2Cv!u22};Bj@UujR2nG@X8OcYnoutm&9(!+~?0MM;3i^5f0UAY8WKtojg7394Hd z%xKmRsj@yIC$y}eLHzeEW0x&s&biKKs#zIqS=gC7qT&2HztCpU$L;$`1Ud1MW+f(C z#vWS6Ah@s77AeFHll>OOGRMP8N8dchCX0RUwhk77jg&0M5*;#~-`dpiv}oD#aHzc< zB%c0yz>X|ufB7W;4!X>;<2{msT^PE=r6&*e3zjY;lavN#GUQbE9I^9kA&<}Gna*92 zI`T<68z~izBXdpOZtPrX1jGcy0)u+jWywzvCz;pX5y=Td6$0w+-Hbu84+Xprw1Zh~MM!a2qdafjjAVk*KDcjB?nZndC3`( z;K@ye&_QDhC$mW&e8OK<{PDIyeJRR+&Y&$TOH}u`hm^M!OD}1ElVjN=e6&OOlXk24 zkt44^_G>{^?_GCyUC;r>C7WFwUGi;Ih$q6#zdvCt(ggfCUtETk z;qI+c@G#nzGQRBTK8O8QRZ&J@W+P{lfXFNho1)h`-miH?gn|;L=?O0lZyHj@WlNNa z@j5COU#TuVGSM9*1&^RYQ9t-en-`IJ1(BKfXXAy$$`VYQ60*~W1=55e{*1OkCu<&F zDAq0qh`}3}H$+JckLwa2*sUbm=P`p?eV8^jW9P(|ML*h4^}sx_nLT@Io>TnX5gRH*~2~3AOQdu`T>SsGfJ8x(6 z`prCFVr567&cQ00yIzWD`PJni(w!?5*?ualF-AP2d{WcKiqFsr3xC;z^dHr?PFHtl zYkcDJ)~!LcfR};J+2h#xU)6wGs}k=zL515jz0dO!6LQWpPUhcwZFSWrno=%I1C&ug zRvN*UEf$YYs4U1%>>!JmT5Q9-Nsys-jS-N8Z492x)pxAfA{*vs<7Ie?)X%*s|NB2N zD94&U8y;yLRT~`!vXIRhS{;!=Y{-|K_iGs*Me^g_3b~F3kMkPjVwR;^=KehLd~WiM zj>q+mBcCSM(r+(GUgepRe+tAK`|E_|P<$1c202tM5Mj|w4zw;lHC8_D4fyLZ`nSy= zt&|`BA5uMBQ9ab7KVHe6;}P-r)WPNC$Vh;qkO@eRlHb=;-N02Q3&4-!o4xU7U2amS zb+oqLaG83ml-TuT^KWx%sYNv}b>MdL9D;Y}U;X%H`ZyUZ)1u#2`^m#xnrN{J_&5Fv z&c5*eLrDDN692Tl=O(u^YqZ7^(~P+>DcA2VVNs;ij|%3)2q}-K3V*Gn|EhE6$<~;_ z-?0oB&wn&OZ*P>$EWD7)xH$koE0Ja~A=a;eBKcET_@)&EREf}-uL;xe&_`=wuDgRC z8$%32gesUcN7PF5ilii52ZCC*Cs!|*_vjiQhfEKlrT+6lSb^3I~5 zmdhW+vDe!hTb;KWm|nGdueFQQQ_-|qg*Wn{oDy1DJ@+<*7Ui+*=J~UHal7nitd~6X z$iCjulQwJHx=3P}nPsj0;}Su05M3W+X^s`b_%KLlZNgJuWoG3nP!A_i{|E_JB3b@| ze!9w4Uua`>E{I|u?Q$_~Y|Q?}Yj1Ouf1-&Vp_3Dlz@&L1RLs8ED6VDNmMK;-njqAn z(qTYOhC6+cd1EQ;?n?a2v4eLjcl{@^A)A5bMjgLkzbC+hPncTyHP<(fE zfOq`0(yeDEo=a@8>5Mm#>6&=vW^Gnx(Hyl>1UdnDOHVO&{?fQ%RK6g(+5%;>{hYxR z8?$51+FODpR2?%*b_7f5V|+mzdtVnQ96ds^B`#~TXrbCZQXOH!C6jn&E-A|vvl*pd zWM4yFbzDJhO%w8KT7M$5$@G_cH)l6v^nuAyiI2#tpf&?e`koyq^2QIJ^gcwarGBN| znq?Hk@v=@l6leuVMGPh;3{ooDVf2VOpS8(bbYGfe}Jpjct)V8Hh8YzPy`$>+V z%+)pvesR7z9$2Id4=K;cE;M--r)oS`Fv0s-70kvCJRL1sIaIKkqHcB+u(P9}no9tT z|BM->9<#d{?H^J|0B*8lVMuFwnh714Ta}k-mh|jX#>9&P2>bK7)K@JU*2dMn<`C42r=98V^6o}8hMHJCY^DXHGNE-`b()oOge7p zb5ejGII+H56?P@Zp}<2%)+8b2E1b3#6*+kKlbc1|9b%`I=I(llvVC=*DJE!$+du#F z!R=hU+>2a`oCidLJoxzSkU>=Ymqng`gOZ0o-2|~ps68#!%)!(tTGSpX!#8pif0KLm z&!i-$$U#{22uM}?tecpg_E`(AmyoG|tD6EKej1{7A~kECI}tXcU3D%iCJ= zKy!u}qTtyMefd-KLRcpF(zM+anE7dOF|m*XBBk1Up><92 zm_Ycy7Vixs`;vRN%(T?FSeVGLk#NDiDSjsM!XUVeMMlL_Z9q?nk9XO1{p>hQSxbJ%KD5l< zD3z^;?U;0}pyTcIu_g%{SIyTkTh;6I*-T2V64@~<)$5j145TTFIifd$?uxnpAWds^51?BjgpRUXokq3_z<(RNb{YFc*fPc0A~8!&CccvS z*StNJQl}ICgu>)v7;(l;fgdAHfTsZ#OM#K3-Tl}XOdwyX7koJ0uV#(0D-9uC+Sj51_K?ryKLE7CT! z^9sFhROY4F!DQxv=Wfd*XxauI3K_0~OD2jw;K|{=9n=i}_7=-G3?bP7&eXrQAuu5( zFxkLfInEHC|0bNM!~~g#cG8(~8fgSu0!$dtt-( zS41OEj&`aJcI6IsFr6UOmwt|Iz}RHf*yNzeSQUw!qdlvGViO2>K5xfeOD>XV8>l`Q z*y3)B=4)%nAAEjP|8u_5{1vSVSj=4gr4cfAAw$WQH~7=r+^}P2)HAzY|S#d262}L9oS@W zJ!KlHVwgurm$=z$?TyVqfo9=v0I5fSJq*wcJnT8F1FAip$$G& z&T5;BOt)?^H?DYK7eJCKlj0I@vCuc#Gep&GHGg_N$5HG0aUR3sh@U|edwPq2@W1t^u9Eqs z8!T@L$iQDcJ!{9EAREc=JI5CqNW1~r*ClzPJ9A-X9ztuyiDADGjsW3K(+u|o4a(CA zL8y*kSGb^HWyspyi)>KJrU-DrWiF8j4j2rWzr@L8Ld5=w#Ck0g4IQS7$rN!hP?;?k z-aH$^N86aBWJi~?sQCqC_T9wyuJ`UF@)Z~r+5UYK-bvyL?^pI224)T&VkgYMxrng^ z`=`=N@2!A2TO59GxF&JpOx-#OjQ;y8X>TnO+gXq_312?1mldSZK!WYj^emlD1Ey2m zwd~}hR1r1#RQ=GP?p{W>tMMy}@iB${`SX?`Ux(MH+8?W3ET3ghcH^%NVUp&X4E;Hi z9ARMRE8h6hBK^N|f@ThS$4jw%|8^xeqIy(rlyygP3DgHjRItOChD3^SscjsE(Mr5y z5m@YGX|G9y$iOSPI9uSNuQJL*S>*50Xk#(-I=Tri|KT%BOr?vkq7a%1QQp z+-_H~=y4nUT)R|l@g-ww!N2=p6FG#%7MDmtaf4va(rhxwu__#(V`o?AVOz&tOF#-t zc#?08)SuWX;(Ud)T;Y*GK%sI8(4C~8*}kDRV`7)YQ9IRd5e`6gwh+pUbp6J%qr@_< zBocXTVC&%^epfl06FTmv7X3#JxmgW)TrGM~?b%|ZTU&6zzk#E{OR#}ns9{pDfla>{ zx2Oa+y#zPDwmO$Is2zG6aBNma*UZ8q_dAH9Os)X7T~Gs7Q2qnDmMlt z<3|llIKP_FMk+K7YAQ4PHZu8thZ%s!3IU2GQKa&4dxz(!UtCWU5V$;}DK^P+ES80W z%R=YN);hnj5b|3g?Pm4m$o6k-HjY1KMTSATO&dM(HbHxB^vI&F$lIV}ene(OV8m_{ zpz}J<7$aQvqch?ulr})k^E8QP81GCWx8*a90PWV|4xvBC{Hz>0YPKx80Ub(*z9%dB zCkf)c^BqW7+JL$na)M1h+ zCimCYX~T8qRIxkq1vcD>u9R2{7=a;T!Qp3jX`xXbL;`!8qUDoWY{I2aoSNslYiD+$ z?e&&LiKyE*#zh_OxM^mX0&wFukfqs~lSzmL2Z_E>M0abVU5|?&GuK=ASNPh`aQsG+ zIHquJ>f}Y#wgi2pr4Tb7IkG`7OD>+5*b`49qO3^(=5Zu3KNl|b9*Kt)D78~_vT*2p zL-T-J*ELugb7nG^C>0^@CZmOKa4;-ZKL>L2Ro+wSpae+gQ;Qbhy0Vn31xy5BLC_ zmKdG03|kY~pM;?N;h&J|s|-xDn>R6L&g-=~*n{X^DmkxDq|g}Bv3I3qkZ9pcpq0!M zINheOy~}bd{5^{L(G#jm`dafz1ThZecU=ch3LAN$<*XG%4r43t9STsQ!bwhfv#hlUFvdiD2z~h1%tlQMtg&z}GaK?CUSFRFx=EQ_EAIzK z1A1V_WN8yS{Y!-uj9POt%32#nXm7J46QgiMAQ|I@O^@#l4v!gIm_ zlIb-WF5Wus_y{k_fm)28NrNAFzXt|VS^}Kf^V}2OQxiJSgLP;mqqOTPBW&42@z_A8 zq!j8IDluFv>rJVe9f3_pxf?0#*%NrQa4Gws?8U5KqO@p%{9dY2Irf@-v1Fohw zt)_59YkHUI@G80VQts(-c{$ds6oB~Bp#ECnc3FjTTcv%XM{x9yDi-jBKcT6tBwly? zb~_3!q&u_L^OAWebBejjidj#YTHg9=ZyQJK*Dd!Od* zo4zbjWzAvu!T%O|fd!uU$s-j2i01Yf=)_!4+y`AqdeLq-hI$tIG5S&N{_D|>3s-Q^ z#bkr)m3uGi#?S)^NJ(brAc7cj9M~cFIPkEszrF8~KDnIlq9i5vyi1 z2%N5A62W;@GS5_-+E>5fOQv^XbjgWoFQI%dyYXan$&AV@;b1GFTquhPq}{&EY2NW~ z4uuU6Gn990XA{Ky_w1HEB|UU;0#M_UKR7>60ufzkgEJ$yGb5qKdyOqAjkRD;q9k4n zp3b9S+|0MyOiHT<*OEV;MP(WQ>N1)~z%r_5 z$ml=AAtFOnwt>42xKenK9QHk{OPZK?c6WK2?qqv?-cstg31q!`;;3f3yX<4_SR6`q z_FtO!1J&ikAD`ev1a!dC8=dS&|9R18wPZ6o@ub)`8hi*k@TYKr&3_Labf$PRiXi^? z`xPPIliUX(|2*`7Xpwh0kdpY-X!s!rc29IVUmie}(1pGDfHjaM1Pzj*zeDULO{KIX z_h>QWTkARZxyofgmvqt?WQh<(!HWR1N&%E%(WJWMRj7YuovOm3(9{~F{}A#PPQH?0 zxZk~w^h1L*>lxClg~SO7FryZw{%#A7u#5hH>(x!4@q^(4LGk`qF|}sI9TdzcG4ao` zX~FOp+8KlRm^ zwFlvE%JmZsdco*Oz!2Q)G6%41qf=X;^pc18`C0zR!{1z6dO`=H)TUkEJ_Elv5Lj2$&vn@ZV?#XAh=LHO?ivkf^bwiJ~LGiE4+afdqWK#WO64;6z5P5|vL*5hi@gxWxs38>kL8a{%C zExzvq-~eZ36fPSZRyB_yN8<5CTo_`!NBY5FMPD($|OQ){t9N4H9xD z*#=*;wy_2pv`Us_iyt+6`l|3>HL;s9x*er1hzOpfvD+}<9L!erfWP#B*xp>yl4|jh zxVt(sM;1L4+lyxDa(`UGlm$uO%{~iV?TD$7{)Bh{^c`<`Vf25F01QN&{HNQX3xE@j z-BvT_5j{`2Yc!}uYHKKj%G-%mFyX4$54T%G!g3d&?M>~#IgI1{*?~DKMhXCGep|#Q z{D_AvAa=_%gqQLb?~0N2%@o6&IX}i#C5zq^Lvh`Bt6DtcU{>w*^EMW6DH1F!@H5ynJc3pM)uJ4`Ok{nrXI(_cB-6# zD;*sCq5c1S-+z`G8Jq{H><@+kYe9^ZMvg4+F*u-OPq^g28X8K;T0F3dG$r4-?ic=$ zh+wVbj58L6JA7N)uyWGh-K-i|HtwDyKOZk7Hs7cftz~VO@A@}=wz`&ULcVM z|8r`gbUmB|`vPElFp0M?u5jYjzb;@bVSCZ{GS)nhRiXb^_TQh8ejLDaV7os4?#D+L zuliVNP=U+1TXg}N6@avS9qSBv;Y|Y4TY!ta3vDk-K`i0n26wDyaoV%ch!^p_H}inV z7(rDprDit4Pozla85G5;Up|rQ)P$>k`R7|hCH7J&C*?tF@|RtBCT*!E6{(O7?ehoa z0cSr#gn3lJJlU82AB3-)rax-dSG|{x_ug|9Y)8p)x%hXX+5kssOQ1kQ*t0UPPsg>6JUl0<0Yy z|J2t+8SQm~oQhZ(JL`G04foivOpz?V8&YJ4o<-lJ-l4w9KQlra=OhmUEcx-Cp*rw= zKz{q*OO*isRvWz4Pfctta(M+zgCFI1+utkVpIo85LI>soe8 z8B{F3u7xy4X}cGY59VCRsQvIW`e8cG5FCw3k?#Gh8E->t3GFyAIa{Z*1itMICm;wi zXU#==^dzccGIDR+$w(s3#`m*!vZ#m5%$;l|!v-4;T03FFX)MIEGZOaafow8)DSSR7 z>o>MTJg|Iz-<6LI)BM?l4?RuXb94_CI>X_WAYdA&|0b~tdDdu_Ph-iQ^`xv-!1n5R ze6uU~c^%^{gJGUKmX_xUc^D@9J&(aEti`S%RKM>M`hFZvRzjIO;(J-4noVpQ1#Q!1 za}Cq_Hy26c>F`F{=>J zX;Rd1@f{g_47$D#-VAwZI%U7B=@RtOv1iKT9_+7*%d z#7kucS#X=pOyiZ&1U>m7s$Tyv2H&U1H{Bsa=}Z ze>_Q=!i3-iI72$RyK?y-sy=$#ZpGMb>S68A!*>AfQ`-8gVm)jN)&e+m>BuN^q5(RV zX0LIhvjsW?78w-wJ&yP!j${7PWKQAld_P8HV6OrWNlmdsA27cC&_df6YL^&40h+4f z^Y@GB-0$>>K#{=N!|fya!3q6H0&1oriNoO`LBsjOfr4$}B;d;KGUK!9@fil|zsYo$ zLDOlg!Tn`0_)$Zy{)xU>-KmINlU@B2!=Q{3_6|opc8o?$b+9M|gQw1}oIoFe(+tWk zD^?__C^Hq(Qp~ZQn6MNrC0Cx*N?>#f>6i{MEJHQ27OAPv(ORBhO1`koD%RqBjky6- zTx;3iR-s+~qvd@)lH(QNFbw38zU?*M&CKuFyHEW)QY5*8hi5BiGnu46K12Z=`ihy z#wQ`EF9`8a{~d?qQJx-96aURULJenIoyDU(B)eR&gnu6Ba}FHu16CJv+6NSqWLsZz z;=CzT`4sDB9%@^1|15Pa&d)A0G&n7(NN#&7Es6Kxw^E|3E=l&)UDC3BIMVIl&!{2Y ztqATIPpwIRDlekZ(2{ z=9EwQGc*pB@(9AwQP48oZ;)h+JPFh6A(}>v{3)OM`^UMkyy|;pMb9#!aGSr%ig@EF z0EVtT9|kRyYK1~HjfIXQ!tzV;IV$z-&{kCmlFpi~dyU18sEq~SdBuZ2PE}3H+3^7k z$sfqELg>lnuw!^t>+=(%&BhLfO3f@OOv6pG2k+z$=OQ6=^@pG+pCTb6>j@b5>28II zvS96QZ86~#G>UXIjhP@D{z(wL%|(#S=gFyXoBh0U*D4{SV{M6s7iE^fDqN!S;RXI) zWdrL{Ms)XZNRn)cIk!?s#qPXvtO|Y!4NG3C33akv_kS-f_exfjBz?HnD$FKUc8ylk zwl{rNlHaP(+2rJADPz@btLA9d?+aGO-%8dI-Ppktj8<4mSg^X5P`<~b4pMghux0*5(O zKRe8B@+?opqB$2-In?K50QcjCwaxicMo_lQ4S`}(X^_e1-zfp%d3J|*G+9TmSOy%iHa)8H{I z5(h*v^MZqdJA$1YvVHt_J|7GA;#X5J2ksd+~ILn zG1-B13Sl1Sw)Y*&;|tDy4Oul;&o%-^?ssz@!gey#KfeJ)LlM;@{$rNp%GS`ywEtL` zSU$PtCkA}RW=(d8(qHIzbHXV?5WH~^7->C@U&SU)i1ICxM$Lb$0Z}7bITT%EPuU#p ze+(kmQH15C|1SeqmQLWr;B<|{#BfcBMBd$8YeNxp>i$gX8(%Qlx0N8VE44wI# zQ9lglUsSI8R8~aUpk8Prx$FvIHnp+?QL|ZBQ%#myUe>3+OZK-&T8whhJ#l&Hr%En5jQ}M=3 zrh}ZF@=awYEurNZm(R<(N2vRLYuJY{jc)bue?R}n)+pvc91X6;rshWiz_{c?ZJ;g} zL@;r<)G91&<`k;Z%Z!0YDgTEpRT?iKPs54+&*#>G(ug z_Cg@O=Pfyr-&Q5fvr9*@lD+fqfL^T9CE={zJ~C_gAah(ZQ-xY-}~DV&B*8M<1II?dZ<$Amzo&*(fLXf`2B=F5DtMS`%I6teeQDV)l=j}?!#NU&Spow>A@TN zJ@6fcnd2Zo?gftGhO*y&%Ml&#vM{2?Fp6I1cTSb(RSrfQPo&bW#tCFV{feX#7*isW z0~~E>QZ@CL(BAktr2#=C16MDDc;CDG5!1Xv(KaRprhGt zyHwE)Vy0XfBVq%q(>WYny)acblAkQgZ*L@KEwQ)E33YqQPG|9=6DxpHct3y@woGRktp85l??7cZ8`e*99z|r&S?$ z_sd`5%uZEXs@tp-yzS;37A%+^W4Jwc36*Z%;KPB44H~xw+~(m6nZ4EU?K3{l-b~-`0V4(&WMA7Z2PmFZ+y-?o zHiEpV*J(NpdMNwV7TDi8vDKQ$H=)0&X8WTk3GeKfe(1&*O@vOOJOPoTA`@355r0M| z7C~-5LMEm~@)JM8PZ3M4f%#!*YaNaANRs@=^yq;4&@q{{$ zX!WvjM3=Uc2YUL7br|a=@QmZ`jAX!hbJ>b@h-&{fDnhy1_`WBiIYR~lyLKEc}QNOk4Ub*ZEMBR-V;3h_0F9`;D%m+r}@;!Ot%cy-L27}H6^5~CLoP##?K}VneJeR5GFjccSpQ4A88LFHf z{%vdNd3s)O?R%!m4=u`i7t&g7X%kM%2z)sFuFy|)cl=k$6&Vr&mKH#6{xI`5%`5E6 z`~2@rcueuRk<5E;hpne1Q?AmPUQvt5_F4FmKGbBJqsD$z#iz!X)Hb(j*`IRU3BBg7Tosb|)nyR5a$u;a(jj_ZS?{^z$jbak|QGhsIzFek7SO^|s%wi>Ly>$`60c_;JqihS8NGAh)j{194nKLLD+9fHF`;-O(>a@IM_ zmIaEWJemSUG#^cqMdn4DE62^<-?aDR1!6q#{{)_W)-h2vQ8lfV*m2aq<6(U!N;O~~ zdN75T)HrJye%%;WAXI2RNgt`!0{%*?{Jdn*qhUpWTV{#wMgobgMb$Oeb-`AW_tKSq zy~3ooNl_^YyIQ8C_r^$0GI{A1lE&luvPf~nvSx&3evAR>gJW_p=nd)7)_s(?H@(xF%62?I-!IU~YbFQ{A_KpY((6PF^K-$}wph zV9OXMi-JLnllf7N8WZ1BEMbJ~a>u1V;&btMP2t#<8eJ3bJ!Om&CX`3LRaohTB_)H+ z%nbwj7;RE0Gzc0QCCd4qDhnp;H|@Ju14*uCr(7ZI`!ytV%lWEcg7HgL{yw9RL#_tQ z)feT?u=FrywL)hZYEcQGL$^GL0zQBS)h#o7TA zApIOy<@P{{nP!auCAxxpMMoGnRH!V~h2^L7eWYZAC@!M8+m?-2rR5z#+V|^?#X4W2 zRr#dnR*|jH+B$!wA+^)Di2SMkXH%bt;$cRt0{qM~p)Ig%2;+Cd_L#_DAhh+|UE#5H z%v;q(eZI|bq8lgI9I`Ws>1V1q;(Hk!q?n8fqLU#{H(7d~^%>x~gX*@Ic)ip82w|W_ zotsymPZyVZb(M3#Z)c@}o_j|Ro#E#Ng@vUrj)X+mtEIiJl?uMYueLUjCK&iY4@bYb z1ItysYoI*-oZ;VkkU86FukFy%kp8?1zpq@SJs9_oKQSo4*yma6;zCh%4Y6D6G=we6 zXE`I=qv}S}Z1K+WDS0`43fKZkT!s*mCTO>rtu4rZLrcF~=5RM$EES{`a2u(mdHcCW ztV4Qwy5rRFWFYFwSvCjQ2e{KeR{VbDZ4X{I@;1|4Hb$uIUDGpje~IKaSPtvlF|)4v znUy(QcIXwU*a=gB_39M!nt2zves2BnIa1}~jW1v5*U1KjH;H6?@|}#3{IO2UV*F>TB1lkslPsda90dQvr5~tI6cE$n)o$xR!tb4N%Yc- z`Eq=y_B6240n=Ai)D}@!$Huo|EVncU?fF;nPv8~B>qIa8cFScs^CPPHjJhuU`AaC{ z+tyWCxRKDeL@)4fAfS`n`{^Q+69fJ6D-@v1RJSWz+E)suHc+eub7G23)`x>`^sj6T zPrsdW3a9AwP4vj17h<7++WfB>{T+M31E!(HY|7WyL|@p>A_m>fvLCe*pmDrrZaP;h zjh!j8dOLRVvH>!28`5HTq;mgV&EK<5v`$*4 z^VL^bTD@oFbAd4_$(}v^@9u$FYpq&h?83#x0~Mv+EvnZO#KvzY-$Pt6Y_cT2Xi>Oy ziDlAEIaq=kz+=qrJpbcp67pj4F~cN@hx#qLjOd^^ ziWOaM+B}Q1mG*AqADIJ|Sbluh9$u1Ldf~U4v>xe-*ZKy|((?Ci$4- zb3LhXTd#@su? zqj1vGdv1$P`72u{WA?WGb&zX9o2~BPiZAuBL{z0fkm>5V3h{E9@iduMBlt> z98D{qk2a)6U_jRhdN;OK0ESx>n%{O09rI_oa#S5o${?c!CXEA;6uf zY)6pr%wX$!r-67R0N{%6Pg%00ZPZ62(R2B8Vha1mgE|@()-!M-m)O+Hm0%ECje_I@ z-XaTzHlMU~PYs`RE57twPz5||GDYCkr~YPFViUe!su2Rels#qDU;v#<-LR*|_Rc<2 zdif-d1X%4y2XU2NKT)#ZXtV=Sca?@&{ro~!Q}$g+c2Rpn_?2`(hNf~VU?Ry-Oe=!= zsFQe`Gn2|S{)MIP8Ik~9-bJbWhMklrDrE(?kB@|C&WeUclD1ACMhPZ-K1$5d#DS0# zH_e-=ikKyr7)pP(7xuWfN5RWXJK%uq?IU+}!f|PSX=$fECT3iWrNat&7~?5^4<@wJ z>wXZ(hLx~s4^3n#Z5koLK}%W7*M+8$siMW9TCb zLWke-HuWXzpTH44nDkDM*%g@GnG4%-=JR-7bRk{pE1IMNmVnx=pcK)2V6~>$SJM1J z3nMMwtbjj#@~5|A1a3J#UIQ|np6ce=13SF{c-?e8@;i9xwH*NtbWGLac9d4wBbR+7 zh#0`QAz+uWS{g|)5m34NG~GDvhM;k; zB}%d`!O=1CE3WLCnV)Y7lc=d#y(LhF$%HH*PTxPY?q+M4pU5Kg`~xx*0`=1{)H%2! zv%Mz2pYaSqt3uzgp`S&oMGjOytR#P|U)!tJ^Q*rAtX<$a`9yNu=Jt+TGVU37R>!7V zA#NUuU1X^2Z;g`{`-Dap?pZ-I=|8`nD3&9o>kT`8F&PU%y z-@zydX;UyL9r5PUbTY%)vfjE4qwAX8Uei{HhKB>%Ljz3mxsXmNjHcJA3cA7+Hr#IT zZx3$p_xs&Tmf%^-fMh4QOqKw6%l_CGb??VZMWZQ}Dw-Lhz5<~RBV+lh=m z)%oG>v(!(BZWsuQriO~S35A+C!zHHHp%_z*!HqceYvrz4s670`Jj$+EG#T_|*Pwju zaOn&$T`6xIAv=L3<&Kc4I!p zeebv;9gjsQR}7e*l0(CK^!4m7CsK(3_7AOl!KUw5_ZI59tBZfyz)mjjam+meBpCcW zBHwp;FyfbR5j%hLufxUCIfKg}3L?;Y|SAWmjJY!~K8`QG23fW}@s#qp8e0 zwNT0MYx+^6IY1M;6Jq1kmw;IFN4y;XllXYFtk)jS_tN5);8$uXur&OTw*0J=c zvfx?;3!S z2B5V0i7YEhZ%4ZLA$z%}x#|%K4}tn4Q2X&1Dq%8kunx0DQ!0x5C!e=bU{2|&z!^fZ zKS;}($0THg?8nUM|FZ3ka(7G!*{Z#wTok+6vc6pv>3qKXCO<`K1ss5@*IKlAzA#Hh zcdhaa=-^uK1mrgriH_Hr9pYNH^=XzdIkLCEM7uC z^gdy$%k8}FwXQl+y;gjNXO)wVRs0@ZTrIv`P9_lvc|1NP5$VP@`C#`pCv@I7hs}1N zrM&0z(}G!zdlt;g-KTMA*wjx2=9_*^83XLBxv9nFJoC)d4KQ4^3XUw;4kGtoJ9oUa z%y9=Hr+(0#R-q7BI^N*xFtA0LPZ`qHbZo*Pg)_}@yB5cvb_-@X6DlLG!Oa`q^})Mz;Hd6dr;kA}7VaO&FN9qEJ9lozA#|p3jS~r$R2zd&%ESvPN%! z6V|uTx-K^8g0Bh%UyQ}R5Wg&gae{-oh3SKzrd+UJa^U?2v*{tVr(J%1E@90#xRXdI ze_waIh}^qKN){)zYfi>$HP4wmsHTF?Fs^la%K|Vq=jFIT;2Bf;RyYp&U zBnZGF4_50cDfoE>(4d*UD^QBk&(AIzr@}qN(NGZ&9-U!L<}FY?6jYfL!9)sq`w8=C z=r7SDhSH{w#1jrtE)*Ef>3dR?hDpF%FeFbgnVC`8hA!Zp@<4wpYRzn7&!9x`TZkm{ zZiPZmgG|EKWw2ujxam+}eP&F96-jrA3~sf*yQ0{fh-&u7MaSJC zSG`ee0%pqL&oYzCkQVwTZNN1@7>=Y}tDxV-M65g*eq7V7bH}jMwjvzhTC*L;*?0ox zkMU@bw9df_M^bj1YF{jHmThJ8M()`bEa5%#1%HWnVRY4DURJRB zjG~v|`BeSniB1doO{!dDcO6b0@?w%*-wcfUJW66SN{~&SpC-WU)97P_BTZCtPj>$d zV?xklu-Do6!<$;oh>~R43;uP{&%X|H8K2X^9^NGU#;?Cc`1#9B+Q4Gh=@iasl`*x--bX{n9f&j=XML?QDpSYd6{cG^6#>%TwrLbvc1;y!zyyDQ7?n(WJ}Xyl%uaK{ZF z$2yXL>32(4<%wsRXpt1D=b zMBqvg0htvw4#O90WQB}h2VCerhgdC|;C%j$#$SP0I0O`*h{c`Bz|x9@#=2H);*uo* zFn!XD9>p9R`0pRx-Cn+7y=eT9VQ`PSjjv2$e>p0Wq3`bEXz^DIg?M+}*2!$M^d~=w z1lZDrT((0u2Kpx8i{VuRbG((w$w5iKLPuj}sV-Hd!CW}!RP1y??GhwO6PA_bPa1|z zXoQww9I3dYW*-c=1aC)zBk>oKCnIz*zw3w)%2HEf<;5Eo`V|wQ?DegGpp)$j2cNF_ zo-zho*8dZgrs>>4DyrXpK&+-sgf|Z1o0XmwMaq24atw7{WJ%*llgM-uwCAhzSmc3b zIs&e8w5b!bsNa`ACTV92JmBN>Bz7GHhqQ-9p!Vn9<_oh>X^3Py@^7RWVVDK@xU#Pp z{acoE2&_2zjpE|lUHua^KIbry8&c_5jNdg(c+M{B-xui;3&^c#kBiO?Or5K|ILw>k zASPq^#b;qrERp8K^7v%=cZ7018Wv>xK*-km`_iwqLH6Ln<3s*JnJ#UnXTDQn3tpqE z`mFtrJg7(@T`Ell(()f)=$4HFW0{GZvUe~k*Ap@Evp3hauI6yKa`W#**CL7ycfnqL zo5+L_Odl`btvEXhgbxzA6{!`+7{e<_L?vr*>|G|+l{j>(WJPy{ zx6Qyteq0;~*$ASZ2Lz6wwW7E3q|4KM`n`9qzz;+NqWtGToR7QaDY0wc(MXBBAG3hgGZq#;Pe=ErKClK2i(urQF^W79;ezy#w)Is>7@WdC z${zX}W2~XA_3P6{n(;);TcncQ@W>Vt*_1^hslEB}7b%|ejtHHz=ev5fJ}L8?`oDN9 z-MY9Y?it0xq2w$K?E-0=Ptmb8Ht;TS(;ds7h5W~=Xt1s;YU zzkMRH#@Fr_*r~(iAI`;(kb4p6G%)IaXI&sQaEN$Q&;5b-zLUoX8LEBbmxbjc%b(gc z7`j5bP>gJ8;7VgA8-Zu&ga@oCD#^)hSG{{4=J#$IdKO^o`iK?ui`wBXfqdY7Id-nW z2!2Fw!5lhCWVe2z(dsS)>C0YuG)1L_(ieU6H$~`-zhxsR^UP`HtBYd1R-Whhc|TE| z*hlg@Nx-M08!NltlkVw-6*cK}1wuce0kE8IQMK(zPbE}L3eD} zK=#kSrGLJ$CG@08?+?cknY>14xR#J$ZjC)voQ(gz*!L>;wHq8MeHy1FrAnW9hrad z{_^_}zswS2ysH5ZZ_=B%#6_+lANaS|cr~2q(;HBHj{fX#`KHzxQtd;o2}uilqU8mx z!`DelMreORt0RgzP6ZyFC{*hRRB!X8CLQTM+IQ392|1Wk7nA(Bv51J!KPd{k$6I@! z;5FEM*l9zw;^s-?iQ<{dzFf1xg^^GB`{^<1lSkX5dBJ^8wMQc6U?MaFFc2NAF_j%Z zf6f3tmpEv2t$RE>u{a8b2<(i8^ZUu_vyb5)y>A2;CrdY_J=4aSGS3Q;RNzOIWGd*5&u(1mEH#QR$ODW zRW!w>Fqgc$nh}zP6*S+xn3gj>9NNAMN}^)`oNTdQ#B}d_8z<$<$uFeSn$O{W=!+2S z6-^78(@$o9ENi(ZHQOVE``Zj3n`pa+g}2SZ&Ot-Y)_$>n4B#0p|305nskyF8Y(d>x z!8(~CfJmR_iYLbBIs()4&CIEfvQ&?a?#2+R z`TD-?=`Wu~dPet9O~c)V(cIVAi2^dU(_)|VMTyG{9M4BbtjGN}5=oTgteP#KYsZ2+ z^j^`|ArUp;)9D60a4t{qa97)JUg=zmf)s`4j`97p2EQaI1Kucekov!gf`&Y@D~a*_ zSY6+Pqc!tqlCDDcc9NSimCRmg@FkQ`tQ6pRUjQg5q81n&bCueH|FfmCW{rLWmX`aic|Jl;cb{1<@sQYQfzOv7=BV@V6tY)p8v)JTU$-Z+BK#}pPgG|`al!_@P z=_rUnE*HZaQhpnSlNhw+`C~ycnZ_`Mzglo?3pAu>JMihd(WCBP97$B2h>=} z7QlF3VGaluIhDY$4Z1l|fG?u#0LkP7hZH}N?@#o5RfHSnY}qEjgA$<=*$MMrhIRPI zhcK=_ATuq0Vdhn>jePxIStAae62DALTl=dA)W`G^Ya;Fd2zn-BqL@VlknQ*n-EsM~ zC<`-J5Q>OIum}ndM3LI9g-5ZW$L|e~N3M6`FGNJsV{Ds+MNRz~=uQwvl15!f)51%x z))@n2^RbP^4f459G-Iu?nMQiuSLznf?`1DaVA8s|tZ1a&F$j1^R;N=UU&9>|BC>H} zw>AR;=NfBySyK$9_lX0u;BF7rfG- z2LO9~G(Z-u?=vS>W0Yv*dZ9I9oy#1j*`lT@7fzKZSu!L9t{=vUe3Grl+t);M(=}%<+ru(LrtWPK7>lZTKs$z2!5`YPf>Mq8IMS9b4tEz_ zm~;)CWt~CBq6No=?i{WJyWm}#*!-1OY~klMFj5CFQU5zCu^!aMYLfi3VE&jO&E43$ zgKgQ*KH~LP)L|E*jA{S0Z^oUfq@@kaYNiJ!e^`O&zr3dWK!;`06Vvd$%M}3^7QZXM z6Z+LMy5IsJXZrK)XicGQNO2MAY2AI0R}O9A@9C!BMLJ9C*C?r(Le$fwO~^vWd@i zlfKsf%(0Q^xni05q;V?PF_ylwbNE+%w6d%YS4zR3#*|4;-CxfCHE|O0hF+%OIGfbN z!kb<0FYQl6hyr<(1!5eb+{TEih*_1md5F%XS@k4UZHh}qO}LWZ04hA{<2Oj^9ysI9!>WqEtfdl zPn0=eM3bj5*Q)!h8MZ+Nbp2M5l#oW;JoHsC-&|to(nlcMm|n-2&L4+f)VGm|8`LWQ zEZzT6j9;=1`XkHdwR_yYm@cbdj@MTY=kmo?`-4C`p3`2JhS5*yU*H1{1@EAneV}GZ zmnr!UpVbcq&e#zUR{28{wNLfx) zu0wQ*k@Z`;7j{LcO-sk8{anZ@`Pam+b4k$8ctjOT9_68#a)t zzT;Sgn1=F)?GbJ?h{tQILA|<@d$gkf;{6R6)Q4eje40``M7~*_)!Jw!di{Gd-`y2! zqtT||XY*HMk;RW%;>dF<8)%E8a-w0*nD?cCL-HFTt49u=RM`r#?N;R(4X=qmfx&X;}pL9L^%BoBZ)cM+qe8T@mfywTqWJsaVQG|e%AKI zhWE``50u!kE~^e@c^hu>6TA@QSM$htWtXO>7jW7S>`Qp-;&|sNORhb|0~?NAlQn&h z7^bhXL}ptVisBa8pS~#zUrOqTTYK!$$KaH!SXFa6#7kdQ3rDkT+Uy;nDOPVV#Na+T zJfo%VDijdj;iPh;h7Lv>%3tp=@pzP3jkn4XbImI^sN7V>thBaPUjT;-8&xl!X<(VA7uT=b$tQFt`0zqO z9?ylSzg^{qqzn!U^F~2Y`;@v^ci-(_ed0)W2-6qz-omjI?iDeDt(%E0PJ}wdK9DCp zB$}hO3~%7Pi+4_uF9fu`bp(1+!7%mfX4XY|%*NKtG?6J@d6>rLhw>7(e!X~95=#tZ zw|R~GV@!Wy!dQy*j027i7df}B;2Af@Qd1u^!(!H#lg)f@!puf8em+m=LUZ!I|5WqL zjPS)^p~o61_k_87xV$6sJ4Qec-kON}y21`KSI!(LA3P_9l;@l~Si=+p{0w(&(fE_; zq6>aZx6HOZt@cYlw>v?)wM=eqd>^xIjN$XO+KA3QS%CnVR#&Enz&vBy5BvJvtPw!` z)HpD2NqeQ!iZ)Lz`NVjc%i{x;hfGRKwDQALTVOiM`6gY>v&TT=_n_O;6Sy@!eJW2X zEvPW4j641*Cb$2oZuc|E%R)KXH5h5;EV-$KBF5*%ciZkXS*lnIvD+cVKAEj?=*7gd zQjLisZ(3~JEvwCtxqhq>LbSi-`>>Ls{xi*Q@FTyEe=JDcv@ZiUbI}t#s05a?09r_C zO)F0GkSoNEdaJ5i)sGOl4XecAGE6D3=K-`^I%wT@b2da2B>xfH>~DWK*l0-`gJVG? zeL4kAC@vx)UW@6ii4v0N$)&8Ul}?==lTYh}GBPEAF|2}I>qir~$_cwIj>esHzi42q zeFJ&3bfF7(`Sg>7ERglHU1A|@*f%QN4mfC&q-@7!5)vUBG+_llzf>fI1?{*0ebK37hxbANs4 zS>ONXCC8|ohRsPdh~gOZ;3V;`#;l~7Tbkyl?8Ux9w$75$q)f9M#+9EC$#YSNdkJ4) zAu%3t2h-6nOV*&J=Bpb*8KWGFlN}q9sr_80Yg+dGLX#49tCvVE?q-$YnhaIXE)ga0 z%WN5z)=WWSTl!7c_ZNqqsE4UrB^>#!+mjZyu2t(&VbR`vZzLYpXW?(s!QTbk|9$=J z0%UHP(O|uI@(-JJ(XK;tTAH5hRDtIZi>MNvuI6s0gDNN6mz_VbmT5tc+m>2`u6d3X zijIGsY+9Eum;CdKFM;GQIyY&e2}TGEZfuPj|rbBseEfW4x{atX#n-InYF&pO+9-6!PtGbw414VT;$S zjQI1t=XeBPaheITljt4X$Dd2MXL*MuFA+i(kqbv>5?TyK5|fQT8Wk7 zyPHs?bgra%Ns`;>79o{X#FmTA_SF!GfDN54#Dl^1%>@!Mn8a*Ns&%8X;R1X4BJU&k zYE{8@Z@%JkEZJ$Ctgg2<;svg$MU)PTLe3+fq~R}%B=Gw&@uPBO<~J`-71~YboVFm zIFA5GdOZE>)<6EkE6HIQw68;MhDvz<&eUJ9oKxDTY#&lTBX^k% zyL%f4j&}K+J&&A2kgyHS9OF$o`{LI` z-sTf*(Vao;T6VenML{$yi)=7N)83vc3PqLTlLID~`FAN>ogc~i5RaydKpv>-JHEFx z*w)*3DC4;Ko*ECHA~JsZ-8A)lG3~bzHw1}qe}^d^;nctFcnk2ChidU`tngrf;jZC%;v%y$f|PW>C08rweCi*lP`5%;)1IRN=|5 z)I$5nz2zRB#hbF{0C{Vo_|o#0iZVFtnT8+NVNbsuV>c6XmHNYwUaeOcM{~-l(|Y2_ zS~SOxosUi8XZShjxdV4gnNF5bfnbz?^2SvQ)Wl(a^_mL+v9oP!6AXWQQVzaq zd7lPje^}aiUowsTK}+^lJVSRqVqSj9YPdI6^kQb?A1NYKE4%?tWEH}_!PUU|8S6&D zS~e-FW^n2%FFf)f?u@7vdrl0qfIx^KP)+kkk!@cCg;^R8M>LVb_aB#4FH`J+*Pyvx zgO?f2*^rQr-o#&va87O~Nf|5^oF9+Ndnfy#JF#M(X}!*^d-9+crI;vIXI#lEvj%6a zOg3c8cBE+@~#ea#|0Vaq_TMET(LDv0tvFrkG1Pfgk9Hfg1P z@BC8WAzgksy>noc-68Vvtc|_rW{_JRb7I3^xB5VM6U<)E#4^$HYfFoe=1@46F3UP+-0_ZgM=v*EYWYsid&m$GkKNva6KN28tbP{zM&!u4 zg)fDb$V|1mk-4Wu;_AAEusW(O{N*#DBKKBZP_!tCBI5rdo-`9IKF_>JSnu4d9p zQsfmzFtwgBE3@ffa$xNWsW&-S19@ot0Z$Pga5npify4~h;@OfkuJY1IJQ#nfy`A68 z)4Zj+^7l(8y2-sF`bO2nXzf3J!Pr6al&aOT!t0EVDIocv8MctMA}FO>q+@d*KhJH@5?}W$nn%p`Opznkh(4av#C}(E zPddv4uN_NZYLp<&?mBzf%#&d;U+G2X;6`S1j4OG~RDvmF`R3Ne75!#Wp_oMD{HBFV z!jVVn*G4f_Dfm;8_g){q$THUYeR35Bnq#q5R!ycZb^ZO7!5-%RO&Va54P0@HB-QSjaw=XWL{cgY&%5Cj0i9`jTeOgSF zMsuS!Luyf4U;Toh>$^oPeSMG`7o|Cfdf?rE?^&&(>_Xn@pWnL73Ba_q$-(&?FF(MJ zyzlthdnsCa1}6(rWzf7*34RO;4j(yI%r1!)G1i`-yK@x{^Z2WfF9G^wvQNHfr(9j9 zE|v;$hL*-oh-H!4i2G+N$Ylv(4Ff*CrP+QHfHA}Go$q#&a3SUw#@U_~AXRP9>YsMZ zdAlV5Ei^rovJ78-4PYj1sk+YZoxFOXnYx?te0$oJw7+12{e~qlmr5nV#dg^w1!ROv z&g9p2StF47arE!MFW`lHa*f+c8CFT=jl3^8G+sGChaA9x>eSI@o~0V_okn4hs|}%M zmUqRk{@;))7>j80CXawuzmhgT$fd9ZLqa+THzM%cZO_<+DESRsT6=$BSg*Lm6Q$&y za^nkK39~>zyM072O)8)?k(&ix#p5Z$0~y$Rv)VMU7r|o|vg^OCZPcs%y>jF4e&j-M zzyY%GNLH@A$s2!p2l$8v^i1OA89(StZ}t<)41cgE#gqp)Hb++>+3exC3Y3pA-dSw@ z>~+zv&!8PQIlng15Mtv$I`NKFe8To9tq)(ZWL>NdX> z6-&#l@RKu6^4Wb_jVK#_uzM$UVthArix!N0PbG!qwAQZqv{JZdahMw_BK=o)YNZs=~wkcp`pLGi^@IHp* z@|saXa4B06aIx@Pl+}}VQivu5$d#tpFLND|yE7^cy9|c|)Lm|XXwyRrtby=zdOFjf zUQS=)Jjc8##QIMt?%5#qE7)Gau=HOQwEEkLhjnI7lEKczg=EUa#nF}^pjrv8x6NWe=w`HY2wzq{O2>HwYV{^;XgZ@NY`Kg~l zd^x}{ObJTW^`@7`EEEvi=g4j%oaVpMHPIwCq2bAsTwfQVL3#$eL>0-{^-R-sJ;_$B zXOr@}$v2PU+2!?XJjZqQO+ufEL&gq7c;{NXp>dR!KCQi5-1lX8pd)qBNeds3SQNp+SxKi$_MgKS47FP&SwvzodHKP zOLF*y?dm?!4_6;6_kK`OKoQXbZy#v8J_3q3pPtysAR= za|I?_)oR*#+JX;d_HaJ0>EFY!yA+NP)CA865s5!Xl&W+&tx7c*mIqHyBh?+I+W?W7 zb2nPEjx5-zyJqrKTVEAV{s`Z-`z^No7WwHkuu+M3RAsy)fXg<|>8An9_+n0A@FI^c zq$U`C8DpCy{ZKoUJ}&$)662*DQY1zvQnxg|${>AoVca$lgDo{vWR;{Z-Okj+?r`nB zO{si$M(*={b7mfmyh9EvFS;u|d+L&A8hi-PQz8c`xWRRFqJ)WV^UeJ|^)}{0aviDu zJUj?iEtHam{3D6`d0db0U;FoY!vIW`USNRntky;m>{i=5k(0-_2CW@gta0^?DEJsO z(enFDo}DAYY~QjV{W-vZRkIa*l7`XZ1{X_i1qQ9Qj{B>s6k2op-X(PO5_R z+il2R!7k;hqBKkL=i|D&0MGb`T#=U3W4CyB^)-Q+UTeskir1!-<15cN{+3VSPC>G^ zELUdDTr;_zJgwwc6j@p5eyk=}qIRy^#t`OWA>+u#Ylj#aXbaiYs(p z*o^O%#$5zHFN=8ILs(YQiuV=_M>4gzXBl-yHG6LA)jhg)XE2O_*(77pEHL6vxo8f_ z10~p7aUzM&FFPPZz+i|(d(D^n-3J!_6tISC{JjVz6uMjA#dz6fe~_f*M-Wf7I2oLi zD>Lb3U~xny$$M2^?h8()n$dVV+)Lk0r4dQl4FC|gU&*on{-RP|g0K$sd{}%tm1$w$ zT6g-9ozLKp_$+Zw2fLNFFekps!2KU_r+ZiMGQ_eM<9%0-2jKo;u*>c^plxS7^V|rx zfWi0Y!<-mFT4fhqzV{tPL75k!Cl{LlnESJTj?03wA%FK*uX}9qspG0!>(zfkA@^>H zx%Gkcmft(SuA{R%9wIHPL7^q5kV#`|)0rWt-QIBKE8XWM`Ec1jw{ZekgNS5>id6!U z>gR%sOj;Oc%0&y+swGnbc9QR(@IZUHE<83fS&ciNObn|lr*4c3RmQrk=u&H=gLjss z&m!h&4fC5FCdRM}=KOSs8g<+Gn0#=ttXXX(07TX5`_-gG>A~oJt>2#Kv(aM@RKZ0^qAXq3YR8>Dc(q>Nab?PcrINHR{~-+=m4H`-X`x+m z7iJ$q6vJtXTol)~{{g9BB46DkAm7NkHKuUQGW_%E-F-F=NLKNaEP523VR!}pXS*Yq z(4WsEjXSX>iEpm0g{YyqonY@~q#m;XXKL7>(--F1Rp1VPv_m9oeMMy8wYN+$mp8Wv=%zZUX=5z~^2*1cDhp=}(5+WWsP@f3yU7j^gv5dxIy{uOn2|GTvs8^gN* z6;%=cO+}Y)tg5Evc?7Fk>|v)mIKLJVlHIGJu(sAF6YT^%ISfz@fqaXo&Mg<&#y9@> zWCxa3X}~B`>0%R!v)>}db;$|{UMXQVi+eI=5abYsOsMAO9)ZaWC>mrXxr0gnxr{aj zLtV~>o4HNjNO9VT6|{Wd={W3!uKOmNwT5D8>be1T-mf-iRkC4(C)U zbKv+y+$UR_#(=J$DY!WTq=Uaw;E@dr8JE)Cngr}(DvEsBTYezNF>7;`t}61p*==a? z@vL}FI>?u;j`Ips%aaf1zqB;f)sjSkAP|G?pMw%Ul3?$WZhbQJ)O^I0q!&IFRodHq zux+oIefr5l_#^Wdj21FZpH2v~Z?Q z-DVwN0Sdf)G?o(MhzVQOGSDjUjHR%cUlw09P&;^qsT^S$J;M>P(OmfRKT8aG=Il$A z-R>i?<4NTWtCs01*q4;z(Ai21T%pg5Xlx${7lXu(Q7!Mk6zPtfvx<*1sh98JoXUcl}>(sN-syGc*hIE}5bZ+ia|Mu;CG!-H61nL%j zuWx{P&&nzL9{!^?JL%XhL5Xdf)pVO=C21I~kA}LW+jnr*rJHnLYxD}bef6P;^U0eN z!veS8ma{G~&Z|9QT~nRrkc2I@69dy76#Q(*w|rRB4+YGqrE{ZDcfCBKif*a$081-9 zNLIAM{N!4>6Hu7|2=g-ZGC1U7R{YyOT$1}GIMX%NwSfIe(n~#3d3f+wU)lA>!nS)a zV3~dTY>^r)k;^J_<)YBJ70Qeif~*epN`X+EG4E(*$hD6MzwX$@J0bi|Ax~2&pM9ai^0ec3SSWU7t`Pfac)%GhLA+@_~qk^S{>0 zt7Tk=RoA=XMmF5~Y#;W#-&WFhBuILu8njA{hEL!qOAJ~#Bv^B7eZFhEb!SsX<#Dqy z0nRuv22Xt2C1l|dVx;Z;NYWw^f2x&LAaGnyKFSCDe6L{TaZf)yoANi=&z?L_|#bBeS{DX>i5YCf&bI{5# zcKKg8Xf6D%Erb~}agjwwuMlOZjAHbD%+|p-8B&4;j2iLh$M9?XQC(=SEft_tR~G|y z<1I!FJfc3nc_cZv>E7+O%?1sMHY?kQ(S;X=CgdgF7|%y37)`(DMa20`7MDWqzB|b+}P&>#99V7YV3Nrs@q{FL^VdzV2?z4MIt05^JX~G zGc@r3mMvf+RkF&iH5Dh8KwUQDbyt4LPg}S}^O|ODzlmx2y4iwss$F1lSE*}Id<74( zniCz|zBv#ev(`Bd)XxQ-=69<5zEMET(fEQkza>gTStavER_wlfj1HoH>GO)4P0}`b zSkE0_EF7^b#`39DNVby%6UN(CwOfx_IBTf+f#_~W1x&Vzrc)DB#nAd;a@xLuJ2@AN zg*av%+OVWv0bAAZtFgHMK7-Wzz@sH3kK>&DSNp}po>RTM-PXJW=VWktUyMgggvwAK z^~Ah~c|81dAcZQBiMbhAF?~TDjV8opLv)$Eggl9mSII>~vZo{TiUqzJzCyOC8`RiM z&?9)pct(7t>)LY5^cl3(fSKH#yIv1wk20-;Ml}S*Oom_v5G+bx=v*ZDa96nD<&?BU zbFR#-6=si!3-kDoZ+JVhv_Ns;)R(Mz(uyK`(yQrE>Y51nU-i9-X7+l&+O0P`GnxWD zn)PS}VRR8bQ3<9i;mN6EmU{oN3?dxRPmN#5PwI&B)NbDAP|OzoAkluiqtHLOihjEp z={MXMfGw!K!CW3262E!SdURRFmKDO~4=)&V2iA>lm5uGM9l9BDfxjZ{W>2^WwpOxQ zce2a;(|n-F9ANJoFTQGJYdm?t%PU~sw4ry#e+bx3`N|Vtgj0Sbx0W|p;;WMBMpckn zG>`|&Iel1BZkd05IjIxu#fSZar@UXt+CTP?^^wzZ$-;kBuUESzAg8E0ew(~Snaw@q zz2qmWF_|H6Yx|Kab$Rh|;?5=xW_Ba1f-oOHPkMI2pXuiq+P}twH;w67jCWQizm18L z@%QQXl%!~geKlH?iYst8=o<7)u$qFC(>M`JqMW*CE?ZFwI`L~}(+Z4b(eg`Ks8JHp z{$vWYRJEfMdbHO;4?8jCm*2{a#F!g;K$WN8FuC>IBzZB-$dz^i!)O*pU|03ITI2MV zQ$n7_3suu&M487B>U#x=Pwv6vD;!k%#q`v4YM^cBHc2m;K9VP-vLki(h>a#=GBaLv zvf(2nNeOk|&3`)0AMQHUA)Bkspklz<%qUL_x4Y^oz5zrk-n4 z^X$#zYe^ItbQz>mK9_o@xT{*~;CQG^*hKgQmhCdp;-U8ZJ8kqk3Ycv()HWqk))d{3 z;%M9)l&&8xYY{G>UZIPY2`yg-4j#+7ko&i#K%+VkO+TuWXZ2k+-KNB0iI$$&9q&t0 zcgtgi0ZGzf17@LoyZB>9PwAFtBI+d>oDhKtW>?;SUD0?>XiZ2EVCSDZxF@*5xRr&l z55uqlAu>%XuAD(bq0~A%2Fodhf#SGCMPiDC4^;u(W94ipw9-2CX*VN5cZgWeN+{pu zgU=edz~`w3=lP3xm8-8jViidHVfB2)o(-z}-_-cShihw^M)3JHXq2*z%11Z-9#u=~ zR&bxW`_+9gzhqv;?q}3i_MUkKZwft@Ncy&F5!6_1ow0kPmXB)t5w}nQlh24%^4@M7 zTsHH0Zh>>1_X02dE%tOB!Vn?Um>CG-Bv~#Z2PYH?i2Rgb{+;vG!x1m zvRmBW#%`=x#y^v8pSw>#qg4dwUcTfmr?D7ORte8t_?^*Zee)!41I@_(n#cz*E8Fd@ z;v)U==dJFfPHnllSx;E_J6S|j(@DM8oM$Anq;PCXY!OmN_6qiej|f7MVoy%^uW&GS z0h{ly^{{X>v;^!7lF1?#lcs;r`r3_C@r^TaOPpS^C@Hd!giS2JIUIGfSVzg{UpMh` zy(YtQKv@6M-lbmrDC=H{s0~7Xdj$pM6au%tzWwnNe9KX4_h<7e-D}|LEj^b87D^(vYh+8n4 zGmZ|{v9ka|Ls_v4IDE@~6q{?x>i3j|V_=h!aB&!ZID0Sq13~Fyx8sN<{fWJVpn}n$ zeZp=+gw;Dh!2a;i0b&pZI|3VWG;{WL9L{9!9YZ|vJ_ z7N>1xXknDTQZq6KM^P~rCqiO+ec=uXU-tK}*;PnunF|KaufCNdOMTx`)yju^IDW0k z3H-X@un6ZEH~8K;d_6}K=!IdH05y2InEMmhIAM@^K4%?xZd0x-DMD5vM@sg~tH_xA z|4%q@g_F-!c&dMy>-K~rZibfAj#Guym0szK!cXydA+0{Q_*vxa0!xYBE6J%Sfhk3N zqtB07=Mx%tRr2Gqu^%a15ERH^v(Ycdd_nzx$2~JEdDDgOxr%z|!`|Z)P$+BUYFHKp z3h(G)#r(}GGjXol5#4$GAO?2y$dfNKq7~Hd-k#j9k}5J`={U`&v$68sB>#iShQs7%rj8>--4U-nNXweT>S>>pNe}2RgZN`Gu#~`*gi);0h49 z_LBd|AGal${*)gk6CISi-^qk1EW*Q2hTo4OIAEO+aru@^RA+h03yHUk;$wO2E$(@N z?2DjD&09Lsy+7SA9I<9$&)8#=f@^uOXRadQ0)8S7xP%3f@ zlskcG_R0*|4BZT=e0BPdnK^{FMQWcC<`E$_o781#M>=c zPq~v_|4-79JK2U6^r-?$dEkSytt;O$?;3=2-}J);=l%;>2*wKd8tu_}{gxvb1EC>I z+6d7eT?8_B$NmpjSAnO>=iW`Qlr_N^pI_0jcp;z4Nof zpdCIZJ@Q2ZnDrz{TtVClgU|rpMYp8GB}tEvq8fa0FBk~_&MN^*%5zuAC?gF!*|}h% zYfEXvd0C5E0S;bUloJ4abb_T1+{o_(XSaB+j(ZD$3mft^$@iB<6UxEfI;PTB4;9ML zqu3t(7kXb7lk3=L^ozriwLlm|Iq0r}m+pG*oix>;0m_}dIraPxTlZd{ZmBbgW&+x9 z48((tDT$Pf&>)#FK|80(CF7mlTRJ>gNm!szO0v}8s{FmwPiVx7)X(LZjsTUemoF&du+<->$`;a+Jpz}3gQZE zF|Y3u-{aF?&~4wPJt_}|L_R7F8W7)oO@U%w&;JdyhIin1GH-k^f0S%tiwv+_ zD1>>d-3_$l=MdEKh6Q0AshNl1cr)9uE~gcD5-((TC!ufd*aVL*m_4Hf-6Kl;dx{F}!fkkRz-Uy)W(>s*7y$Qf4TqN6^F!e2Oo& z9AI~I9htDoe&6Wr3`*ApfIc0tE4DQ16tWN3Sk-*~>p1R%FH`Kl3xZYNXF+~T(eX{)Can>4b^=W88 zEa+8dtSen0K|4}#s4pj+X7m4R(6|M?_>CZxg0L!Jt=WkBK?4dvFx>zh0BFho91?v$ z=Kj!Ejem3i^B$7yKzX9sJMK=xKlqb&NPb5%c=|3F;{t(+;<psZUcd9*e z&+=#Z({tU6Cq{L-!H9cZmxj|K3{|LT598Sz$*2{xv$iNG>7#VtDMzsFe~%WLDT)C= z>Wt>UM%jt8_6mw2^NOIy@{C1nIc9h63V`GiQ5E#X2jjeIUHHuDjOKs)m;V(UUAsr0 z;IJ^J-ETpdAb`yL7J1kO$(y^o8qr<7Y9o7V`@aY26UaxOLW6KBplAy%uK?saT{vuA ziVckaPBkA-Hhu5{sa8;+NHq};>uvvaC6cHHfSh$lFwv1=WJdxUuVfcX^$kt9Pj{P& z8OAN5Z>0BqwT6nY8?G5$xPS~Dx{<*b?4@Oai;hHh!{|=yy-(3EJSC5rsfGV#JFQ^> zX!jp~$}pOuK~W8!mJxM;|37tr<`VjUt@vC4q8cU;}zLI{ZbKML|iUPGVg7N>KlrJLxPnS06cQ{ep=P=D})mA5INzWawy zL2zlq1wJStv-bb6^c7HTHC@*Q9^8sM#arB6ikIRVLITA#xE5`3*W#YGIKc@7D-MbLY&-J~MmH{&B4FC~MT~u@dyV2VP;Y&*7rCK7Vr+ z>h`}syXJZ{3|GF%N_y)XH@>V&dO6frS4Hl6>pR!8`Neh54t~`175C5|6VrFpv!H=j z={1qLi2akWc_g}e=3SW&!NJ3_FSQ^OoiUZ1{uxlIn#E{?`;1DA@|YK|Qk%vJM$xUb zJ7PwQ@u~maB8dn~EaZKvhCPXGq)uX|bAtn!2q6q~pco||8LqT$)z2b3xP@pM)+T1A zcV$Q-_9r3%UXPSIdd^#|ZovDPB5`qkp>>f$BZF}eVbmi{2QhuN*prlUCi(^qgXb_67;Ax01N1KNR);ie55gnK%haQ876-mP)vBQZ?bCT6= z?pQLGm(tWoQsLMibB_UEd#EHLj>6yk1yG%DYZBZ&GAiHpVMNCX*SwumXWbWzvLxU0 zoZG1FLomt&N*^a2kVUzI4s{YuTUQ(-g;Mp65+`cZit(42qXNm-l|u<(GkjVbyo7GR z6|1M3KkB!jpL#R*yf6btiesx+BxH)IuE(fu91+N7;ixh^^o*loHtCo5#Y*eOb>68} zk3H1{jT{EOA0uMXko4B9j{;kdss#T>R0jpbUsqm$KDl_5Eoq?6TL7S>)?<&s}r?l3D>v0M!SZ@bnMx+QN{IR^18&e)vK zI_NR=8ig05Ix9H$s^p7NO%>mQK{3Uk181c`kbW^eU>@n$il|Eum}9o=6tvX2#udOu z-+U}V(32N$EcvhIge?8;TvF??=cXcDoRrQPAn*CH#nD~NgxwR-@$acCX`u^N5>y z=Qs@#`?-Mar6$a@i6p|z{LAA0uR^F592}#F+N4*yaO~5o7*er@~Dm;4@crYc}fe} z0e%?D??WFzI*lW*O`NM+Ke$kRUV8o+L{lZ>R{glbtijBSq`Z1!WnE1TpTjWZkAibY zk5?@fR#&-+Vj-N4R#}a3ok%MWFm`y-cxKc?E7L_=pBssaoVbaYoIk4ENjW?O^5mxuvqAC}u<97Dh$eQ^9O&tnny2V`_b=ok zXzWMrisqfcD_DUO@A1g2IP^5%j>8AXwHb0yk|JH%uejxU)uV7_urj~H`}iZfy7Zux zZ{LGczxL_tz#&jSLbu*ETp1l>seWV;#B57znp*D6eZ`~ zlM}939;m&L+Mqy)K?vQ0b@==p3=>8C8%G5XteDCzlwF}koaU#9*GW%A17w)y{(|>gUS42t?i%?Qk`WL-q=_G329@8wpHAIW@?~h zLKJ7*-Ga#7g7?kB%9(JCHD%q*Kq1_zfDv4sAvmwLGrwM7lWZj;`oG} z&_uEt*a)Z{H*EmkLVlEvP*Y=_mUaUgh)hcze+2BXvJ1l7regZ^izhG4hm^5=wWylm z5h5chj{Gf-Lde}cGG#65FtUK5Qc~Ii_(Fy_znC~ae`LI~7N6OLS`>C<4NmK=Xfrgi zrzaxdQu>OBWI(NIG}ty=lnWZ`Z_<}|#7LrgMnr-nCRRu5&Bym;_m%f8p!FTa7h<}7 z5YiWL$yl98{>UnHw_%aXMG{B$WKFymx~=c(8HYM%tD)unbRv=EUC420esiwlo3(~L z&!JKe{SW*FaC@UhK93hqaJQ-(Oh%^?@_KBf-v}dkxvX~y@uBEO?9QgF##z3^gXSM0 zMfdd{c3%kW>dbO1`UpGfIV+P!Wt~JIsKi>cfV0HBwwU5gNT87CnA*mqYI=t;VZv(ZI3|63{jx@?%UW|KqBlGPFq`%l_@5;{A^ zg#u_XA+0`sTg$dQeogB;Yy2wt6%{$}XifS}EdkJk43u2}cvS$vE~pgXkf~>(@zJ#z zCg%+24Fs8$vgk8pE1q7p)e0^~q=xa6u1E>W$}lc}H?SN3CMEv)4~TgzSusv#mU=}= zK+D;~>}P|0iczzd{W#7f*dMDhG~*9<;D2-Lv`Iow^HokR;bVeuzF*=Dv~vv{=1`8B zMXL&j{``D}urxP4`zUdK2bvy>=0>$~mllU;#@!SG!VTfEmY2U+liq9=6w5SMw8gj)<#N_0X3mD}+7wo(YSlqR&stu4fU#Y{gYKUQIJxR? zt%Pi7LL;fViQ)sv+-w&=^qOez_|MJx*W#Z7FIO958f{_LL;1Za3Rs!3Gd!B2M?QqO z8;Qk9b;Rl#86TsAES*eCez}@A*p{{YGx@a?Dpd+AsTnIL& zaVO!VrkZjm_57sDB_45P`s)UA?MAWx8XUYjaf08Y)$lN9t?ON_otZ`To`Dt*S4Nt3 zkPChVwBcf)X)PE+Lz7AAS5C# zWo0&}96+QDUTb}ek`9zuKCk_C;reFVEN3_GWgyBv5O`Y<3*hrrq$Mz+hV4yZnK#(& zr8lLCk?NqOC81d4A(1b7Lh81x#cfHj&^@s{?M|V>{__JL^_aDjkO(d97*RQnd}KWl zV9HNp^7zOKIWIlH><YK$kK%eofVZga0Ayl8SnGKZiF6;hKXGJ47uUp*Rlr z_WXP+^-mJEzEVLCb zwRNm8RF2l&0q3=k!&ncq`j}`xb=P`yxAp#ujAI+nK6u~k#`}cu2WAlWEFWgV%Xg1E z%UC??K_2USAA7E6dgR|-xCtDBU!K?|Dl%7lnQEUV;DcMuYxmaDei16uQ`xT|VH<&uGMm8NJDR}Ndh>LRAb+Ji&6 z=uYBHMm83!{68EOozEf^iHpr&kNf5rP$LZfL(V`SHz0%Cf-20KzuuZOi2+3@Sv%tl zoN-;Ke1)zc<=kM89=+Cqw$4CaH=wPvm4^;9s8PSwdeFFbXE*I-i_?P9JdT9jj(#+M zfqji-Z_K}#E~MI@7Opu^(Sm`Fw_1h1=|`TEJnp0nojvI^$jU|e;HyqYSny=IJG7ec zdXMSQ*JqviT-?NG;8jm(f1TOz>Qj}^p`Am=+wN>RrdLh$ouu;_qc!$gs2V z&G#E}UZr6sw)A2KYg0LMGXc4o78dq<={GR^jrWAmS`~!JrHbo2S_kyX*Tl|Nq3am_ zBd;qR$>c`ENl6K7UlENh{#Qp^i0ulD5)#Z?*)9N~!nYx{{@JLndqxM>-m?*?R* zr~JSQu4i62itk;!!tNM*bsP7?a-0I6=;V>&;3Gw#Qf!6eq@->FmMaCsxVT6Zi4 zR&10O4geaS?2*5uidnPMyVij%k%3>k`5%fMS3-cq6~zFQWCXsWU&!TbV3uyMHn5WS zen0$*Tf}3PiWo84>_CE*^cP#;jDm*U1$wr374t`-!c>CaQ<<#`Kyh)bRo1FiAal^x!zqxTQ?f*p zk~jL;a`)P4T(pJT(oQn#X>g^FHCmqw=!6D%RT{)x)B&qo?hLc11Iby|VxX#@9 z@?+&}yiP>UUb4h=vL=BkzuDkcwawo|yj3}|oK71r2I_!C@2&^|{uTh!@X3&}d?Zz3 zZ)A;Xfwx`THzdf@PBaNg?_-xN-NgLadUBhMuks$GE>g`B&P_%gLZA)nGW?Ja^7>p3 zSoWAXtx7-bwpmbb)@d=3bZa$44^`*3c|2Stji}s*B6e9kM9a^TEVooZbbJ=d?`&rt8l80)#3mv6w<B`FlW} z%kuI-jhW(m@$u;VJ?h3gIuF!#SkCf?4vjwl)7t;#a64V#z*no z*LUklqhCoQ`eRJHJ@Tc}vw>dKK5@5%dQ&9AcOO4qOG8|Xa zJTxMTzgN;B8oQd?h`>RA4UJ^{iG0Ug4-j@+X1~s_Z*g#B%A(C4r&`bSuIK z42(h!<1BJq&pwpx^;TVfsJioZ5qxjRh?l*;*=yBrHG}?15Tm8l)^Q(Hra)`Qt3*2@+VkLA)1H|$mT z7R`c0F8x59=+6fdnATV=%}6aK2@F%DAdM-^V0KASWOSKTS9BEWsK5QY9A+(qOyrnM zi;AJ9r>$lEis8))m3gx@G|gkJ7%i8Bbfqs2H6ZCS0a)1$vnAFPJQWSTDKz_1;Fa#m zPz(NVeWR`qY2_p&gil3?J$Bzd_Pc%TTfidC+_dPR{H4puxX960kpe5b8&8BSRe@It z8SNEuwY?T%C1gH@f8hIO;O66?ojn-TT(n3l!w3TpTN;Q9{Hl0G=>*=R0H+{RZbe^ ztet4#xWJv3S~qa!S@KC?1Q|ACO~IF1+ ze0d(jzDFMO?h+QAFyE8LDplYZKZ9|tK!f8jy=CRp)YKS0p9(H@z`AQ3Uqp}d@er}7RAf+TRN$!leRH>WpJ&DinULIbtbwX_~rzK1XLAZ0Gj+$%v5qPSuyET1E zlR2MZv1LqB$K5Vl%`#KP1=`FNK=N1*1C}n8HdEshqX9HU5kcvwylbF4lagAT}y;**wMrcOzTM z9#;{SZzibxI9cjgzvSpURyTIh@EE;RJa|o}bdO{vSs?>9Ptj{rR+7QB)rePdlMS@p z$2Dtl1dq&~EpDgi?4Fj!zdkT0!QH+g@<*rfbDRGBr*(sKIg0W}cR}zD^wKJLQU+dp z?I3?N9)w!GuC=9TxAN*YUnn)tdJ2*t zrPZ^?r<&;UrOBAju8wt#COgWCuR}2Zm+Ns75?3cIWDI84I_IVGo4MYoXWt=3o|!e3 z54z;U-iCGwtWFB*nar8v7RVK{tl$Z0jlDufO z`(cHCJ`7j`#qx!ew0nzVC-M)N0((OB?^SrO;e&2qiRIjjtDb{w8HWi)ny9eYR4v@X zamR^=cGazmQ66-z34LT4V?Q=~!I(}{2z=rG=6#KRk}S1V1YVWe?I6eJa{jF8bh{r- zeHaM&NQ*=vNBwbWF{&4Sy-dAhJ9Xfd@Qg7QSAah?rn{L4ktxQ!k5q20BNXk45suI` zE2m<~$*4fCvF3=SJ2o?-b_m%ab>FinL_?>XAV#E}EF7#YO+uhagyBL+u2Zp?r^2Nl#9z0@xUq$7)4M3e#YFci>g0j(v z0+4`VVgcxN`E>Xh_hTga1ySqRl}cioSrpuv;cPu+1?z1YZlTr0gX;vN*Tjm?M2NRQ ziO%`2Cwz-3=(&E|r<$)P%mydSEXH=(mwW}jh@PdBaVZh{tx--E)KBiSKUGNh%2qn6 zePYELrt0FkYUTD+(}E8u{XhGOu#(`*wfDC&aH*gqbEPHXH$%I_OiViF%MXq1I*C&) zQ^*~4^i53-Y<;6%5{oO~tj9)|+{rEB4>JgfSMsYH3;_uW&7%g>7ZL$IiF=NT=r|6@ zNJO>r?-{v;5k0DzKWlIw4oQ3;|GaO?`+G~fRE)+J3D=QXC70I5mqb8F;w{oxKwE`$ zb0qQ3JmwiQ`g^Ns=qTHe$xv^e5u!Uz79rGguX3vR-#Qx+a*mCzvTZEG&x_?DW0fR( z%sGeeQY(AA>>(2?3<}1nK4}#l1(U^0xfVWATtj2^+obN)o$S$T5IQvCKHDl15 zNM&9qsX(~2gP~Lq176feK<&^+H3n+yWwy7}9in)bcz%R1a3u*fhZyG7zp>~BtW0?d zsGS54KdU=af125!AU;V2`M`?`gl)*WVA_s4B&j!KknWIGV~gwe@M~q~CJ?R8CWt3f zLFjq!#EL>6C=@(;(Kyi2Qy^AE)2tPGSbf)DO>AQ7R@vdAGH2pL8=iox_EITkGNj@oR^n;()jJ( zT(Q|6`lS8L{nx@?D_2iNH5Y`Cbs#hdr5ykxILc16Ffx$D@8p8I-=JWOhYtO`S~nx! zU68^30*UpJv9|V}tQ3!>keaq{r48l<9`<_$_B~X?r&cR+Dm_^${d^GMN{kswXq4W; zte;YnPlcE_Bc}Ch%pAC%UblbD8R!@55X3=fguzSADv@gzbuA|*+2m|b4T@nq>QiZE zZLkZ^vb&A8M^Ejb=LxJld)NFv$l6Mb?Lq^qa2@P!)&5(zT18`;7RCykV4P0rv1U3m zDhU{4e)c%tc9BT|P5mCjHbwys`zUyML(vVr*fv{WqIK$+PG#)6`_wFkjW-slO^VC8 zjD+yx|PVsE!f@Wt~aa zkoSO0zQ&^IPjD0b^$DKMelyMx>zb%ZNY>dojJ&7Z%x^m3T*Q9Nd^lKI0?t_ri;EcXsU&v2+Ij<5p zHMm1Za;n6<wnTDQ2gok(cNC#6A zb+zxztq`qT)t>zEk*pj~OfY@TVeGr>E!YJbiog^f!6g--U;Jz0+UEFQ0{KzfSqkwlVf_ zJN?I(?*T}&CwKcyH?C77BtGi<&v!D`e{WB0FKx9)6v{b{w@=qgLVW#hzyE!!I{)%_ z=GXJkfHE!hkd;3}%FtVjJKIj7ht;8pp$4I2y2G2~>xcl(x-C^yWK0G&RWd z#iLKQ&y-)FxAG&ICL;lV^F)bR1>t8WW7ia#QI3Y&zb6VW(4`vwtXt?Jz+5GYd z_Lktw$r34rzs-a^L^?gXgevtjVAa#~{g!VQT=lDdCtGVy(1SXu@1{emKWlz5(%qxd zApt{#gOEb+t2&>f&UIZG??nqla6f)W@XzJ1Q{4>nj0mlR(>rCa3}ecBL5s2Jf|<6| zwF#=2mvX%C-kQBA7JPTBWsUsvBILTHPLl6kB~8LJ)Jrh}%WefeA`9w!t|Dh5!8N}Q z0qNjE=MQ#EpN(Y0hF6Qeq4xpT%Z2?iguczAXkTZa0MbBr3h%;whS6)x41cmA z>K-!o^Sv?dD}I3i%$*w2T_;3t+EOn|yy>9Xo)fr0t(VTFOoWIVhMf>c! z|L@U~ee<7Zfnlh*or1jrBNsyt^7);@g6<+-v?S>qlxr`^y*uh%e9&)CKMWsH zottZAjW0W9f9g{BEnchc!Tf`K*>phi+xFuNg~{R6H3hcKC@Bvnl9!uJP{7G7`TiU0 zgTsNjuV)MI#%uKq`#K4}Xs38bBKM_vnkO&6ptq&Bwf$i9346R`T##mUw)XqTy)ms#9*i^V4uJ*57)H4g!LJH$FFyWvvj67b^E`6j4N%{ z{Cw;jwOmZEX*+H2X@A50uKK0%nId`#S3{}x|Cq<+rJvBUr}1cVz$B$HrR$3Y;|(+o zxyx|F{Z+}~rD}HEgZ2)m#Y40jN$679{e!^Zf(5%WzJEacgZgJByHun?Iu;uS*-{A5 z(npydO+lcde<5X}CQ))A7*sX!5~6J>wCeCXdCWq@xgBJa zZN^xGKPzYBn>ZOjLR6PPo0!fdEI9}r zS4X|v0IwT($?~|rDm$)RVS=49QSCeP2fJifv>rR($O!=6YoHkrSZD@>z7n_(3(Wy3 z=0=WJ@+{~#s4rgLiGK96^fogc_Zv5|AhZj3>e=(>qQaE<{m%3}=*%P)U3-2}{t29l z5uH=s65OB#f>qJW@`-33$*me%H#iRyj)2b5YsCCA+3i97>;ZMv+c(xnf2rr}s`vh7 zR!2dT(2hm*3}NH<1*?@~YMRhEq%%enVcB zqw3=Hd6%lnEIml^a~VZdC|Q8wlfY^?=7eW0^*4}b<4F7*)V5U!KxoTf4ou`m8K%sA z1@b4gZrF&6qX^<~$DPn??w)xLhUISJEwC84i9Of^K35CRp93J=vVtpzNyRUqPCPzC zqe<)zAd!Sm`nk#Zc z$%q#BMN$qt*=m<>MO54!I`;(SCl)(2RB*1%gpdJ^(1iGZ)bf}J9m#$=<10lC-VwGzccX|) z06-_#1iSeR1LqzsG~W{u6QLaraoPtmHmh0dMVUmw@M{Q`DfjSe2rr{g2xXsA;}J%; zqM7uS&lfE|XG?wz1kRGbnLXzJcu4nvCcXEGKIvKY(RlTL_h?GsPvy${wu*)3?f>ZS zaTxw4B)<-b!aj|`JbyN6Spow3c=Hid<0}b!!D_^o--FByVnN?|z~5ag4D>+%jyWZt zbX(8HD}L8%oe;4ed__5F@SWx8b=JJcBIBX%aPVAj{r$J3x()2j@OoO+z9!S|nz}_q z7SK9m7xca-&+*5PA18+=d8g8=qVlpnWhGUb!%fYfwaGcs6(d+E@c(1s!f&h*dHpBN z;Zt)kcb1EQZ;i|)8}8=%{-&Aaxilu(DKq*N-dnQYv7Xm9)P>@KN&old+=yl*i-NPz z_;v{xV7K?W@Xe1O9~mq;CPVMVB#o6y%3QPA+J8Y=+H{tF$Em+GXO&St@xG~XKy@tuCS@c zy8gZEpC?Zc$9qhbK&Bv5wbQTv@r|We%#bF@i5aTZ^0l%5#3hgTHSX83qGjY5T112` zu_kHYrpy#Y^o^IVO-NLl*K_>s(pczBfF-)%<;kmEN1GuEz!9<#yEu*noDogsIlCGE zI+(49oGy?4N0Mu@IYSj2Al&Slf4{im@gh&PWpPUCPe2H~-R)_(V6B+E-{Qh5+ThmX;SZT%Q)-p*-)iGyQ1R-< z-HdftTW!;cmaIJhOa@x=gxncZ%w?*N7;(|$FmgPpP=C4$xSZMQyrC>VXBhlfRS1V; z4Ebb7|MLumtQJ9M-}wp^=&OtrPWg1Pbg>*?o?7)sf_cLDg{>j!Ve{mM<41mHy%>Yc7@oX-|HTa5~HTW!UX1-azdOV)BFHCl&t<9u@Qbuxyn!rK)P z!UlzH&5Xo3J5q;_qIBPG*$0#zF{gsI656pp-r)0lDHBt;? zgm%RK%&OlHG`*oHbLr!m@nm+$_jVTAQd7+l{{(Vu@$JKS_w9kr2_vxtn~c^5`>4pk zxDRU5;O6MN7$E?j0%9iz=!#M?g7(G!NFS9nuSt*Q@V(OwE%e|SLwKmsQ%mps^9;dw z2#czztLBfN1Dgxyx5DS|?|f_ssW$Xes--9L^|`G9BRpVcJNEoRgNa;`WZm2)3XVp_Gn9l9_7mk} zbcuWDi-U%vhY=j^aW+f#8K%}Qm3tW6QG=cAFi z!MT=twARvALW1S@Y{-Sh3^j!3t^I?)Tv+cVb|Z((mXD1}msK|wvzDyHRaG*2wS9g} z&nz`2f*B(7hYR`YnMXtj5?um>0q&zB>%Op-{6i^l67z8z{=@gi`l`R# zyOu`v^RxSY8?ldzUQ3KVjt06)R}f~8z`&dQk8nnJFis2qs{c`^=1NP4UX=xkTbR?~ z%C6hy*&+`l@qA%UVSZ_Us_`MFT`$DO1WX<3Zl>kHZ}ywpV6MmJdr?*3>y?HB{Pbqp zxMj0rB&Mg91bOC=7Y(ftYp{xa#*KGM$UGYefBK zBS$d>!xojn$j_O?S54C{$>y82QVl~rMVh(dY{gH-U$X1QW1lB2JT0N18Q?Ua3?7S7 zDDS&j9K!YVdPl`f_DZ!l$8+CHbM}I>z_S;{)QcrQ5l^^d2W94s}>L3jx z#_9iXub?W`-Wn8)K?wcmM50t0RkCY-aDYa7Y}YGOuWzK_`{zwHZ~!AQcs=exT(8SQ^_F1C2n?g0`a-l|Por=4eNGe(__nM=uK12?yZYoEKeCH1eu zHLl;!!W)d5`H(22^f13ioZb~cW5iiF^Ye7>p5hwmwaW9d`RiYHuj|0xY9aV`E}vIc z^1&*!^tWdEi#X}l-q1Da#)4pq6_)c|Z@<~3u(!DP?DFKY#Zi$feGc(LB&1t9S%U*1 zOm?badQz9T7t_etZ`STRtuA^=Nwta)G;8+k8h^i7QHCANZmO>P`p_zO;d(3T z`(w&_#PoBk>z?IIS^E-e#{}ZZDqhX4ZyR}Qv~ouGI*2o(9f`DqHf~rDE`uuQwVO;U zgOX7lu0hj@*@;A9jB~j|YSp6c$lgZa^ zlFexm65h5uW%vTgzUtKI6NL=1>AUV|n1UgJjQ#o*DUk_V(B|9yX%(A>(?>6v<{EUi zuoYyvUCw|U$_`evpQsOh|FbbS{Kl|rPkqc|s)y&iUDU+GX4p zOP?+Cc{9s>onbt%zgm|GhQHsD6BtvBx+RN|%@ZO$U3@JJF4%sEy1o*9o4vLbdH9zofqsR_Om7qs+w4qFZwGgKXRL zll9kg5?YPWi*k`>(>?7h7;%w&;^whg(n#U(qL1c8@suZ9APqsUPNDQ0d${+CWi(uN z4ldq!u`$Zz>iA1P<~=qI~~MEbBl zSD#4cOZNSC9KTz~HxKf%So*4ARPj+vPMQqu?`7!__Im9l@ee{YP(T?r*)KZ9;-i*? zE{QbgPFUs7VF+RZnUxM^zYixGV`gZ^`ruFN%B)`0+Hen-iCiQbJo_AQ1~gMXtozqu(z$-2%fxXwt2 zJrY;2%*oZ+RS|#DLh&_~`t3IWlMiA_ZEY#D{j=0NLiHNgKkguwd-b~HE-?|2>2zaD z57)V=++|4#5WUa6y4)PyaMQvtX4QGO@GloW2k||P`mDuU;qHOu9Y1Z0nuz6nviPHmtOIh8WMA95vGDxbUz7xFc*u7M^kjUR5FF>11={Q;O1;_3_#EyC{5c+ghCD zaqbZEgR+vZ%nvBMeJ*DZuBewn7X~aUp?*sUeuaGrrm^vN`+IRd&3{+8;-%YavHs;U zXopGSLpx0umz%px68cq0AEJ%nDqv;??V*_zXiv3px~|PrhJ}% zJ9nfV zSX!t*ZIi6r3tW;!cB>rZf)9X)bH^hQs?op5LCMsQ+0Lone#zav6ra`I`;uwGwUXxu zJ4xPH(PS{vj2NikBY86pt7!H<(7+23LeJY95)%m5g7J1DZ2W@23;AB*iQMcagCoWR zww;8DFImv(-)Fwn%+7|IY`~}KXc&wJ&SAOG($?VF(m>nNFy~kE%^W24W~uyZgd~f> zg<{qk@RQ^>BUpDsZ)1aJQv+>N!;6-NQy?&ak58445A(g8xQMujaFbAzNRya|K;_h&{7VmSBkA1&!`= zVj=K2_F7N?O8yc}BJ7*jT&{~5ZS7e^HkLlmLbYwY{JH`UOHJ&7?uModC3SbAiUEt%MOM0X+1jtsypiX`t~uk_q43 zSd!jk{T%_RHSltdIY{5aS>NqP8FJaBSZ>w_SFhLU4MbD0?t>E9rB@v(m=Fnb6KV~a z;7l8Far-QQVM-qh24li+yiFmpn6T&_6ddF86J>MA5$ac;g;)LNHt-{lwSr0cY zc&j{iTC!JMZQj4o^hWf01PRIR5^;!5pP#iBmwSTY{nEGgnLt%~e7d8$Zj!G$ee)DN z^aK3a3i5*rJ3D)udXtj%HC~gjw=KuL)Uj4e2n$OZ1-lmeWO8j%myoyf&i^7=lAN%J zh_~xb9F_+gmWTb!)W}|O7Jn(=W@LM0P1nL~#e?&KnYId>0A1*+PSo2SdoR1QVI>+L z)%T@|&e{G*IE@A!F3sr?!rnTD{X-+DK;A?wUWRjCh7OjJSWKW#?eWCu$hVPyhBK2u zD#b0j`_$jfRDu%l|81|E_i`;OIpLp4{~3|k282v;?YOJdRi`}nRAi>N^z%qdPDjTk zN%!lWBJ~|@sQ~j~wyBcCZSb>>Uw&2dra3`5=Z5v^sE$!@=Qn}q>9yCUU6K0~!H==+N+^&I`QeLC;el1;6s$LYrjw4l$$ZIN1N}y{pA$kppHpS9r#f2bRHJL$ z8&4o*fD!NF^D!g8xOjnw^_j-t=nxXhxdVG{xgV&P3g!f8I@xRLB3iz*po=q9oZ-cI zXie(!woRd6!X!%S&y%$Z#01=e+FPWp$7xJh9o3|*x#4^Fwc%YYn2hY3(|Z{Z@%j-} ze(^?(7NgZ`&MK_}AS$FayW$tWhZAQ#Uw|uu7v^hK!9E@-y6bYz{XCNQjfb!Y!^HuH zQO#3tB&7VBfN3q7q+FS)OCOiV=^O8<0jnN3H7_kNHA_k#^Fq^YJTUGhkmbUTMIdV- zeWQ}!uix~SUsiG9hf=wUE`~YtwU_9AG2rp48c6vM zSM5{Kwt^yQfVKGZr?{FAYH|D3*FHW|D#VXIL5EZl*sUu7v(K8^Ew{5kDgGXIvJQi` zzXEQ;URAOUF9J&kpd#*B3ojbE`T&!yj(ea#$~rJhWyCbYtQ3Csg*v$p93(ea$b=6P z16o5Vez9reg#;an-y|DoQCZ7U^Y~V!bWP##w=fZAwazM79=II{m%m+is}KdwrWVVrlkt zI`KoRg7eIFurvn&XCd0BL7Wnr$C(Qmr5jpQAysUstF!CYAFePQaLq!i{~&0$-p>z? zQtJnqrZHFux*Pv#t%d`VQPtl;ouRf(POHhoAM+%a4w5B;KK+4j9$0LDw;nf&kZ=3W z<(_0uOAk)$4ifjXH)27Gj=WHAZFmibkGF}ha}i^U%`a+~F<3%YUfVBXy;*^IJFKiUWxd~e@LJ)W zG>{Gz79;i?br-YM9gAhP(1}Ij!(+KI2b^n@okg%L2gV$JwPi#JoRKH+;3M)k3)54GZE%I#_$>uFGOZ z?6LM=lT};g%z#XVmc@T935?A9-w}Je?|el=3Gtq#1gtmh8%2cV zy78Lv>hYj>1o`CfkF;rF^Me73*HDO>NmA|%(>kKQjHU18-B>9i;Xua$lWlik+>Tm zZGLmf9_j?)rKvh(a0Gl2!U(eUf;5k2&sUbj2ZY#m`?!xt`Lu}E0Duex9{~Acq0t1N zT>uvQgruwImztm_sMT|JZK$iW9a(1A8o>-}+zVI@{R~uij=^?sOlCs;b7!50C%Na|@R+uFDN2ibn_L^;6A;F+Cs$V7LdT=oyL2#d~#7qOZj+z zaF~#6#+?%Z)^@hoBzytxFsEd5I)tbO?aa*B1bHlPKRwJVMstY(MdOY^Bg$1zP5L1 z?45IjAZ)3u^{uU@yY^CRZ+l~LJ2ksx(h#Y_ImX)R!46grc^YDE>u+A* zW;nwuzWf$LW)m)t#zw5>( z{%!HD1+TMR+HO*fs9Cc31p?t! zFy=V^d)Xb9l{N2YI5M(Ll0CXO{ozvR({0!~va*tM>&i&5J$fB2N1K$VQq0oWw0qq&uR%A*VdCjiL}{5erM4`Gr=niB zEX<_=a-V8zUCE{n?k(_R4RAyN_+Ko7cmdyB?dJgVgi$WMw*K}AQ$Y55O!hdoEnI@^ z$}n&$8=E!S6T8m6_jLvH$8% z;-JyZE&vLcUNq6!V*6?z$I`vdcflr*%f}bVk46yDc?#g*u0MagD@X}PCoPx6)RNZQrRqU(TqFH+($PJh58>Wta5&Lsk-@pOnn7h8&A+^DaDFgAwY45qNRAy;>C*;C%9{|AT91L zMT=#6a5;I*}1t|G#$1(J=9{5u|(DcNMV3xA>vez!$ zY+ucdQUUtC`|RkC_p?HH{sNqb(-z8K*%3)9#7kJdU83`*=J~+&bDMEG3Fu3{`r72Y z#6?N;85U+~U6k;aU-)hmu$HD?GYXuKMw>hWwLHl#q-qym62s-}e!JU`Hv)c`deMY= zVd>G_6nVEA~T-0U%v5o z#(uP~>{!ZN$avewcERJ2kl-QrLqvI$DE!Z$2#ziT=+9GAxlqmaB6L=V*dXZxa6hdrq$w{E8+qpn$u86*d+AjF4-pm?7Sc)a zVaX{~FwHjk01U7DGc$fBJ33(Z2a&*CE@WRtj~SK3_$viOUzz(8)@~!*_R=u0iw)|| zM1fR@l$l;B8M5-~ninJ0ZKUGPG^=#PaUM%#!f`GeS*moEO3ucsO|Q8TB5T72|9qE_ z9eO8+OqW$6Q40C=uZUMl{o;-OmJMn-q251`RH_geOB6}OqLhLpV9r!MR@Z#l1TKjr zzaPSCA7`~b!pm6$D~5Ul(I4uX307Ipe-o+wGcu6bpr0a@k-C}KNAn`tBH16%NFt>D z5UGh&Bt~LeX-po^V7+mdT*?(YS}p8Kxkbh0(K1m=!4p>DY;lWueI+tUL(SOg(& zwHw%b^v+0Af<&%##YWX{FPmz2McBz*B<#bM*6;MXnJ}Hz8o|$xkL4}X9$8*f5)V*_ z`o7nzE8fIL$DYxFO@4ow0JFwBnevr8!!X65BJEELI$SH5k$bW06H`g?M}riKd52RU zVD?^QuOyo7>GJOU&LZ(SPLEVqMsq3uE-+nvG2*0|^!-9&4ZI#`RI3Kp5-tuw%7)HL z7aAW4lwNG$Gr|w^EX|B2$Iq`9*B;^gO|pLjvgDdRpsrZ`a!#h9(cdam@x{}+UTHpV zu18u-3uh$Ip8r)u8sUi?54=>*$NcZMnWO|{3mOmSB`!LUwB0_SU# z+pZN4k|Wi!>+bCpZ<+kr_w^=aC*2h_Gy^t`2Ax|(cNdZeoYe|8jN?B;uafPMUD49J zbDE{ynk@aAyZq;m#7tfB#bc=%95w0%8XNXZZ5kWpL|s1BP)*RO=1`sQj~Vh6yFDkr zM?r^*FHIl!tCXDm^dvEnM9qPu?zLEF(wa#h>o=B^RsCrD_*qn7 zDsHy?gkL@aEx?rmE-@Gw6M$>;tm^Ug71uj(jWC3D{9B3+z~5(Do;su6^fnGH+jkte){YY($V~ns`{Zq1Z+KWaDHA zBF*CUeoL#lJ1Xz&-kDAthT%i^3TZ|+Xq#8bZh=DKB#^H5EqX<*C&=r7vCqu5bo+*r zObj@)2Yz{7_{hDrewM2B$i@hG{aj`8^zxN+_IbaAb+Nk@XnzYyRRH&*-UBED2L5or zzd^_a440tQXOo_B@ZYO92Mj&ZN%+ANh*wbIi5vFt@lG%N8oC2SBb5f?74!A2L@15e z`6P1971hwO?-JX(OL=?+z@8%Jr)_~e1p{U;VKjMJ{kQ#2B5`EUHzj+T0oej|pibVy zSfPnH2c^|rpT5nMzP4!gQiQY{^fiIIRM)HG>{(*fIjqK#%2L4!x!U+1PLheu?5J1S z``9~V7Hr%;OGpvx2xN87G7zfW;kdV_DATJo2EbW@!SW2EgRa?`>=&L}yR2jSZE%{M z?0F(D=$q29aG~leYp(ENvUESEDThcQBl&33&*;Ef;{BWLKXoQUZXDgHmDA(b>6PtP50E>9AOS?|&yq)uzxz?( z**XO2wc%9$oCAXS@#gvQ;)^!Yz=vl6ls99q5IARL2!}o5>lUz_r3yq=N2Z1LLh!lG z-!$fx^Hp35@y~C!c;{B zN6D+erdRnGLM+Av1{;~)@0Xr)JZ-_TCJ3*a?_j(Syu5Tf&?IkF4`>)GjUyuMLJJ3L zX{bH8tjl?A)8rX(^$m-*dY<10;Kz0BBiM8w*25jb z{+FTtr8TDYU&OZ9+b7lhv%`(pC!kqtc;-|R)I<9Ix#rkU+VZ}B9k7bV%% zR@!?kY##N9TjQgN_yv^krTQ;TD~SSw_PSPH57?WGwcOYa&i4B=+&_Kr1|fS(l^L$J z!eFK#5dQqzCEB*&@d_HPC4Ht?)>xxA?`DHz*{05F0c5#Y1G_lnd1hRgjpTn=E8>I% z1#=e}fbM?P)=q6`ni5}2PP0Y>E||jW(i(CYFN3 zWwcFeT8Ka2Ara$q)OUPWw#!W0FKV$YinFMFM_S(=8~7`tFi(t)I0W3Br`oRye8Z@% zts-IC4iixHOiCmB^~FQ(V3+of1jBJR{`PPDw}uaUUkzUw+Zi@aVr)Pf~>s)*Fz2D%;N}0L+-V}1fF=(1B zsj+Gw3uER4Gnp}eAJ*~1Z}F_afd!s~s*^t{N|I-dFS!Itr^!~j{F+s> zw(6R+CRFVQ_{NB1+gujP#^r|klSYZ%pWb%5lk(~oj?K)vf0QxF?Tm_r>a5P;IDb4) zPPFuPJpXdCE3QqiV_prFjyzNP-qsp%);v3gbJO5P?^@PV4`Ze^x$d=y%cQ7+2wgLH zb(S?GVv}y!%Kn}2{$XDY0#3z#?^0NR&l~&ALD_0BozqxrG|j6{J&OM61%hPMJYOBR zFCs%)IW;~s9R6{Jh=lZ6UMEI9h(tRc=g+=@XsL@%PQg45-z_nveOuG={;VgF(D3`N zb(<-CCrrLR$JK@Tv(qpIhl|YMh5s7` zI^{V!VhYdsZBKSW5UdTFgp2z1gUL>`FY?v=NUmV0@tl;@ir%Jz%QW-Lml%0h>$>{X zzmjkE4RRH_WgP$M*(vh}?)G4QxsnsL^>s#n1#1ZpE}G@Z=Nud^wrJIyUL&s;{Z(M;GQ;9wJeFbev9VKS=1OrJpB2nhZBUU?FrwZ!*xSUJ z;IJ#eq+Z?AOD#egs}yP&8J6y3W@Y~bbl+*^*{CIWU`Z0#K#i!!CCk1%mwElfo?UH> zU5)P)VE1_QdDH7p))zG-;_e1I)#5)`ZdiCY?};^_!F%qZt0z$>aTG*D?N9#P=TZBt z2mcTsLsl38y6DE+bN=N|eiLwnnifR%9HEbDZgSm6CIOajc^=S!e{`?{Uw@!^*9B|F z@1_}hi~%fsI}_KmJK`P1!tB^fLEGVN0;7OV8xsgWN?+Ja$vlcm7p?EccW$oPe= z(KC8DZxgH=^uu#)=5`bTawBs&?Oid#!-QDq7X3P4=qw_}1misBGo1vjh}`;4mX&gf zU#+YeA^M!mI9%p-qvTf(A_qk8RyZbzr@YSOBx6=OWjel)5P~oroTcSlsfY3Y=@oCuiqB*>04hGuZ{Pybm~F{CE4mNS}nww7NaUJsvdM=40rXS+ zDx5@`HjEaj@rF|~2*Cz-h z{Ahe8x)XT%nrte0xP{VZ7>)J1MTST)z}M_4U804g2Ew}g(Q9Sy)Xfs+v;T%+3cHkH za4{;=FW_(DTAspiHDRiMxT5xTXWNtvGol)Ye)pT04}*Z{9{GJoUCQ0o$Y{SC6X?z? z0_|4#70r-d_r24R0`mV%LhR%$?RJLR=;WFIfzgldSTCtnFQK&j8Cyhm)70s@xa}SX z#a;2Kri9@AH@%&*VikUKt5xr@0{66V2?tR_PxQw>hi9W~eth4ey*`V-3D#kr(IvVw zc{uxBw{gk*GW#h=^`r490+6i(FS_x;FOgXjq+=1y6x}fe0*L?0P znA(cCrL1qgY+H;>Q)^K`uG#N>5Z5G-ue;w}Pm}voC!D5j{}FEB{FCd*InrKVKY#@} ze(yD%|{g-BKt(QC9fd+V)*2D@V76jm1Onn3Uu>OIBByn= zfbL(%wcZAh-~FW5*~f$IIf%v1zJ#aVy;h%Pz2yzYYGXd}UXjlYH+RRsg(BuW)*q0> z4B5&p+t7_)MUzKxs9T7K*lyne&!u#+#b^?D8O~s5(A%g|KOza*Jzi#=NEV3Y5tt?S zT~U8E?_^7Uyd@Qg%Ao)B%#Z$p=HiYn9?5yUX(s8cV&7XvkF zFd*QL@nT?{MU(3sX%-E$G^&*VzugyIL|!T$C-3x*aEtA7i&gv!z+T`0crx{2GWu~c z?`d+^f8pcep^qilmvLWmGO?(pD6*)$=vxuLqW>~?@oc*0p|UWCn8c}1uF-!v6ed+B ztA`OxS7e$y?e-!GZ!an=#@4I1y!LB~{1q{h3WnAHzfu~Dv=ptAUL~a^=_H9L+AE53 z1b{z7l;eQ617yI)L*hKIBmDTM^%{wz2YUa&`P*>RK%uku=x%q>T#;bot!P;w#C?G4 z{Jk6;+Mh>$PYhD)0dn7j*FgL>u=DP^p<0m=S+H&`wH#lrQnx+qJotxni#EfZF;&KM zYnJx2iP^=o-1_yA_^Gi_DxXQ^oR#EF!^!fZ(4yj^oK0}Hj}yO%_l|z9&%v-(D4F+( zfbgx)E)a4Ro(j>pZyDSb4%~ah+P%!4Yq;_GEwOkKS!YQk+C^5&rxKKs_QEfLRz44$<|6(EefJ#r~6A~+qF^Z?xrA(*O zMB&Ly1hW1P3()>-OK;1*|L-FcBOl7YS+2{Bv5H)gLyq2y(f=(GkYSzw|AC}GF-30} zCL9@?kh&j3&Aq~3fmd1a?>F=q(n|0a#EMvt5DHPHlJVp60Ycj86lUP8o`EN5N>-aibDXo8XO!#{w{SfEB< zi^NFv%M}#gE3s>8CMGE?}N_3hpCt3*f|HIidl@c|hQZ$QF=!;WyQs^s4^o#H8kg2vBNKhlkHp?37 z&LqaMu7wq@B&4lbk03w=){$-ihQl9Od~I#QOUbxpRKxbb&g!K+@q5w=^_M=z_Jy%CjlEihPethJ1!4Z0n^GpVr3so+NB;lD`2M!M!Nf41b z3PljBD~?Z}`UZKLP*@A7?v(s%T)qK8Uz43cMq94M22G0hnwV!tcD*e9fTE#({X>U{#W)GtgW zSsRlVK7>W`1e8+7A#(ES^qTwThjc0A(p?0T;WozvL}3X$FVYFGsH8dxNvQH+m}%ts zU6|~#-zOC+qUU)VVlXa3#DUT@?OQzy_35pHwWp_hcTIN z>!U!4uv8Mh(-8G5n?}AcCw|NSr3ouVfoFqgFG(`}MHAyV(-$nF2D#@WL^f%XzhqMh znu`*0rHe@>wQSO)9bOt~MtoQ&W`mZf(}#v26C*y*alc>GB4_+qgGbwBk&r9p5GH5M zqkzuD$C@bRi@pyivbJ$VC$<=83MK-i^naKA-!pjo!hdsRBB>_bBSz@nh0jxcb;BH_ zV-5fQzlglOdw-U67fD*4^brYBNdiwOUFn+e`)dIEu(}yK$H+Jbzib!)hcDQQ-{qTB zF+e*L2|U=wZ=SQ0uIYDdq3My0S3Wy@UWxsa3z;Z}eU|dOf0ssHoazdN(DYdZ3cn;u zf{u=jWvDM{h;Es>RQSs-j<;o#z6HTDp5e?w)9yci$g~SbcoH0%zQ(Y^GqlSn4%4?g ztIP-Ej@Wt2#fHs{{|cL@Ft;x=knxS>`hiSmvdj1t#wC!cDN{_bQ<<-c%0yu^EBOnZ zU4URwQXRDh_tT=JF{%&l3xNdMil{M5%d>m=x$C)IK6fv&?bb1WUx?`W`CfI=YyXO& z+iP*{AR->LtssiEXAB(#E;tG(fDTAp-23602;r|83@&2ND;O}vFBT=93n1U;8Nl?# zneuWQ&k6P>h(t(k8`SQ_bcVC`TjYk)?Rmhq7=a9q?=2YSqc+)`q!h<IVRLg3?Q5JW=PB{iCkh4iU?d1h7NREz1wm05 z@y6eyVxE}dAi3(Xd9m3~zKQ_!Z7UZA_f zpFr)V<~lru5iz8Y=R^BXF<;_53wTWxZDd}f%-KqWeaU+e(`gp-19aC*PSu+r#LU2Z z8L1s-mW?!KCi=;l<2u>HT+Qpa&^O6@g})pTdu(EfT)$va>$rSjsEP!iawQ?eJfdGT z)Yd3i)NfvVmiRJS{uY?pTe^`^zL(dJch;vR?9Yzuf_zuHQS&coz70)c`;;v`N77U> zF7SWwDw5VL>1GnV^sXMwg~Ug17&iABNw!+&1&NC4#G@9b1lo|6_dHuh_SXT~x;zDC z=E<K%JWrl?WcMCQN=0tCW4fMrDlVaQ9UW{G*G>q*1T~a%f9FeX7@aL)`!#4 zqGzA&<#w>eX;Kw?p)vPoKOcRDr;bXI;$Y!)#H{iKNc$Y;1m)xMF!WV|l3cB)@#^cl39%EUb&l zMk0sjJWTAAB!`y`YBl~p+=nkwb7^=2X#@6oK|U$ntYRB`VjE>58)a8Q3_JfSLnU&s zosJy=+Tib`+m>Gkf8dNvU5kLll=Uf4-6?#waXIqFaTm_uV1CFr=+Wjb@#W2;O#Yx! z!`svA;559`yD>+N0gb?%`|;61Cgl)=Ch^HknhWchE+4{Z-Js;|jH38Lvm3aCAFA|QON8Y6Jl?iqU(3sSICgI`Ppd_iLNkyx!AV2R zQDEptZ*z@YbsA6?Cqa!C^4?mUTBH-GcKiO0H+Y0MxR*D$o40fWgdX}|hz6mDgH$K_ zsE+!wGvfg-;~LEqs{@8QPtjNq$`;9v2bKEuKn8Oen1!%h;tuToY! zFzU6s#5;^o_Pc?ig=4CF{9QK-0Dp@1v1`q|oJnizD?s_fQ3_Bre{6K0|M@N8{^6(+ zShczvRXj$pSUU4?6bl5I<#A*KW$g1lpYYFL)#M!RhURumAPfBh7iZ&VfB<~Petuia zTkJIB443&yj?()xxzIT7ro6wqCMT}NKCPmBEK)};g7-WG^Bt~bp7f~}WTJyRI8q*2 zi;Qs*1n;DdvFvDSe5R=J^9Vs35kkyz7HPz#(3lJ&wa7RcD5pEg{meM;L~!ypu0W>gp=Xw$qSbs%Vt1r@y+rLQk&6VyRE6vUDCWhwFbO(c?2 z3VcX21+A`m#k)KCmyBLjN5&P8zvrc-Nw!tt;&lW}eKcpM(YntV?DL4t7>pf|D4FCH zuRS?G%eYgirHq-~p?0@7m#K^xtdl(-+vdq1#qvz^(}rJhdt-{0@SUN%S!0#;ypETL zqG%k7GjwSKo|p@<_}&Q@QULC)x3X#k01px%d%jG*LM;Blfv?%Tyv%r!$o9fp<%rnq zclL$*;Mjl!OM5oh?P6eIh3z^sX)Fa?vL#U*p!LUHDL`vBZvx2w*HRA1fALKt4{*$j zeH|A8q{XY@q}yR%=L()udO3>n;^Oig)A6Vl^3;95siv~-+b^upoX#F(C&vm z1}_#bb6f-=FX%o@k1+ppw;S$^bALUS8`8Bj2I-}BkV?!ys|y#Xp=U;t0J41r@Ujf% zwws(R-MD`G@jjc8p<1WeR&p5N3cSi70Br=3*BGk~N8nBnj=hKePjQzBb3|`w!cJUeVNe4`0rIjcyo^{TJj3Tu)+zFyynf z7)J9G4db3s7F@{l6VEEMa+`TEZsm9a9TGjq)3Kj2C z$Q^wq(YF~f&w>{*7J;mz0%JLG{)?e9`B$Uq$i`O=EJsDy2mSB7yzD$bk^p?S=~hn- z;$1plxhnH*fGJ#ou?+$MSL)aXOMq)Y>{hU>p9$(c`KHkdxF5Dj z18i?lScimODj7`R zb?7G-uo$M``-1~u2qR)}x-Y%iz7cz;(c2J2(=8l!G)*Up+?AH%qAP$kXFIyIjA@a9 zf$OE5Ax?}CTf7h;UI;5*=-#IijbR6Lap^6qf^6*b*AlkFQ^JR2;&-8JybP-UDDh*! z`+z9b%q4wjxLS8&3^5XjoC;i?Aw+L4V-;J{c)|z36 zJK^YiAwg&(VME&1C**2!p>cj<*#sKH6VewX>FwNepwBWPPBm72oK+EF@5G$+9!WBD z;Lo2`v5fnEEo7@p6Q8T$_SBImyDrFAm`0b5{VF{azKz2Z=yl7-EOj*md3O(a39LJ?!Jg$&Ksn zA@;d4-b}(OCeFu`;Ih|XScuF$mFDsX?GBgT@G}DUk2FJv#{F}bHKuv@PwHIEB0Dmp zv?+6s-)NsJ3_si8rIV`^q|1GYhvc>ZnY8HV?b$+1R!}Tnrd*=eHOy&HB^OyAhCzVF zszw4n5R^;v>oLQvms9YSb<}o^ovBPncE&DfHhzG+q$T4fav?Y4IFgN}gnGU!YTNRS zsf>r13DHL`__lQcGVSo3dASLRW-A;C-RCgVFndxa+s9LVvn6 zavJ(%NFZ$0R=+dN?V>sj6V}eN@lN>2ep6=B9-s5j<3$i}u<@pCl$ySyTOxH4N|N`| zTtZdk#V^Ug&>9YAW9}d!HjTpK>G{fr4A=bG;pFelsq?q6;#5)C;?*xm-dk*^oc)pP zO4aIeOb)5J(*1g?>b-j=OnGOJ0M(PB^4^rje-!_v~A;_dp)MTn_IOnL7o){{tnA#;nV!d?=VKTkeB^U{KH1E-=eprmCc zxmHc<#&WRgPfD`QprXL`t51UlN^JhLmL{dyVp^&tZ1v-sFi9mErAEs%w+j{F@)Ea0 z%zNH=*8oX>bk6XqsuTkwwj8!?i!8Tjw(VKX!K%^})g4!rmvS$Dd2;op{8MhOCadw@SY8xBNc1p6x;2TJafiWA)W=gW- zprX(=&zZLhSWYE^jh8u>;GZc_08Z5+C`FPdOD++=`G;v3DdA_eeu?}QtZSt*UFlZM zTs3{5rQf8wle9wy{;)R?)XaA=U;~NqwRTXGLkyOAA)E4poC$8e3#8~SH5R_#+LGA5 zXFC=yezF?QtD(*f8Q|f!2(XfLlBtYjQZ3XD(M0nhovt#?+H#~esqE_xi(pQx)X@x$ zx+gU%-MEh`shAI8PYGwsSz;LGK`V{1VPp6-_$DDm%XP3njjy)21tal7n!_?g8E~#S zS`A?SgY(NiY(b!#NheJ4UH4QiK-$08;1VDM>K)HGhtYv-hP{V?pon2|dj7Efn0($% zqp%n{zRNLm!q@*qI>=mh80}#zaQLE6Y_-(b|ALZ-ruhkgBm#mA-WOI&W&PwAd|_gN zKqUWy%%z6)jPKtC1K+N0n;~VMdv;r2H)i;!1;U9Ort3EY#f<4m#~k~rOwBbG^}3uUi6%W}>S6yx zdBHNMPE@WL^tN;2CQh0vR0tLZG7;hPJW9#zh1fo3g6-b@uwt2ZaQLuo_gU`smQ7=Z zxAcEv9@C#<(3!QJ4iR=iF=$)n+rPCw@TSvfL)K7Ooi0SW zLXJeDWLEW;mbuEXKF+6}I=TY8(NLRzVY!&fdF`Qdb#p&+9x23;60;Xc0}PBL(X^TF z#C+B~R}pT)@uesjvXD_6!A&>x;%ryuKIN%^p%g!U&Y?VgLZ*GZv z+n#?@#!f!$|I*^3E?HX2o)j+i=wi!pR+^}X8 z`nf>?y^mk}-U~TJkP?pk@Ls8DDFl*^6)IaF{RTib{=xJJel9d?L#0u2GpnO2fJ|RZ z>pKu+q(M8o#>@IB2O!h&FTr`l1`ZgJC~UN@TZ~c81{{lRCfUe6j0#0r8~zw>Ncnbd z=hRy~7NcvwJQ(E0mp0@Lw7wUk>XY5$O&$M8+e@a$K{Bt)!NY2uT`Fz`)uR6!B&Bbv zKI*;e-3##Q<;rrk%5l{m6`C43bA5(rq4*)VUbpGWSgK_sgrfZnqYP!E8;#rGB_fQV zhPn5vw@s<(>MNX6v~Iu7HtvQ;uK78%hbB`RGO9*2FQS)R&DbZhBveUg;TE0wy5nRo zVbW42tmKK<|HXUC)Yi~!Z}yA}Fgsz{cZm0uvwqsV$eS8$<8joNzH(AytPM7A$XBsX z+{nP01+rl7hPx|orD?lVl4MVdNEZ{Aflq5$fR)4qqrq&AjXxHhoklKnx-KqcSJ_{4 zwax-`JFW3vE)3o{nEx!-Z^7%ar$1Uc6HAjs6R-Rpo_h9^Xi5@mj=ko|urn;RK0h32 zD%rq6aE|OA!juO|;v~#y4jk?#%?&Z>sxdix=y-GHZ*_y2xSN%GYc;JHO&rimtXXkS z-|QDNwKf!`r!TE?>^~KILm(&W{?IAVtG?K=mx4fLE@`Ecu+*#dq&9;9=!dJ9GCzwB z(>#`wWWE<+r+cg?aT!i-D>pd}aQxv~`)Mo(ylAA9Sibc}n(Q9Y-PhV|x3-UFCioz8 z#)aUq?VoFAAx)Exc>eq2et3jcMKozG>&Gsu9i7KYK5u7ea`(&_!b?r*Dk7tdjL&uK zda6I~9Yh%!xYlT#zyG3?>vz>N>MI7_M`^^-!=*$eeQ4Wo(4N3xhe^JtDFbf2YU+M- z6@^l@K~$L3v8$#l^!k@aY&UP!+7%B=FXwRt8sQtqly9%1BZOU*WTPps!k2_04MJ6W zG^8@d*BWgyTXSBfabyX0Ax%+qRj>%MM7x+d3UTAYK6^tl-Rv#)YB3H~CsL3`54rZa zNX^DI=>2M$w~;Feb3gt0o!|Aaq-I{ za+vbBu7+76qu@CH{7sy_h6C3t7I}ngHr8uU2kx-iF^1I$91q*pb8$Xe3#tU>l3-kW#ODg;Oy#^~bNgdpEiPghQlBI4qcnOH-PaD#cz}`jfLLndA zxh^y&>SQNejZGz3L)Bfv?WHsvQS&pgbJ|qS%dk&WZU#NLqVvrH`l3Qyv|pb*?Q5Xp zcIhTHK8XIvSfe|N2&53x$=^1V>@t%XYX3t&S)W*aY^a`{XN^L3A6=tq=g<3*bKOg7 z6C`wBnxXO%=rbC@u(gY8&zy@8I7Q61u$P}J${=C~sqr;FK3NM zTud%snU46MWOo1B`B^FKVBdS4+5KmSr%G7N9&awQyM5=Z5{YsJ+2ajmcK_UI`#hpN zk@?Uq;LIrqPh<}iva)~ez^SG;17c{WfVx&+3$94OKa0yO(t-#FCc{+pbLiwG^{$ z#VH7Suy&Y>xp+Ct!3r^LemTqC57}_-fsq~x?}+{x)5zVt7s(FK#f_)@Tb}Pvap9;3 zNxZ-fck8BGa={dAQE(8lpmdUYNA&~A#{!0S0#tsueLCH|b1n}5(9+s45M-TX!R1JR z${n{9`tK;iUWn;k_H#n>S$u@%au zz{?8bxD4wqTt}{cuu2K@lR-G{mEu0tN{2TEvR03AUKVA|Rj!90HGCdgj_v#h)cFCQ{KDcCjP3A7- z07IM@8^TXFVAW@VR4MJ0{hoXLhz})MZG*YP0KW|;zgqBOawo!@5T`ji|g+x4BdNbAf6lBy_u88q1^8wsc#wYplU|L zZCl+2Jl4lsx9#@AF#vEABKTY){70?wnL(6w615_7Vn&h&YxyI|7>B1C{ML0WFyyer zM11Kg-AVAt*Go-@5IOJUh7oq8=y2!=$ANk-SD>$Dwr&Qu~6d?)GdJ6|CzJG~{)XcB<31x?19YHhN(_Z^u;S{yMeUGnS1lR|u!6lMC!p1PI z@9wI{L=&B_iho)Sa^L%}B-6rToFx~uFnzv~yHDHcF+5!yeKB8Jp+Y1$D+yDYVsa9mp?_n2IVb7_+5L5gyvD+6S zv4LMAjyxOoAM&EP1gGC+9=1@UQC;_Dc*W#aEVZm~%eIOWi1_ z#8i0Pzl1lFwb@Q~L7bNY>U|Jv%PsbIgCS*qM)dT}o+eM0;*W$VjLV$sf8hH?4!R|ip8}N8( zkj$JOy3l!@c=<0D4!>{lE}N^Nj=@^1IpVg=zPWk)UV=_-{^u-tkN3UCr*qDtWOs;@ zJ`+#kUNV!X2^NIg<}3s}8ry0DUw5=FZBM>RcQ*0JxwbDxFxvL53npEr?*6(>9dA#) znsdAHl189j6wjW9!k-pT1KdHU_|7JeW0dvq73Jod+ugX;*et}&jKoUAwfxp&7K#7E zhOWu|m72I>;PI3M_S3G3(t&&1L+seX72H`7aojtSXYBceKv4TMETf)y4nUli(t=Hv z8@9C&^_@KGkCn#*go^XhW3pO+ug^&qQonxM-~LvVBmcOp z25C#H8$t|{H9k#MkQr?@Ge2FqA?K#%1^UiRAYfA!Pn3d)_`tO8tOA46Yq2o{aWf|5 z;%0A#UyOk5A)uSwZ@$&`a<|+SgtwncM)5Dem4;Dz@LXtKMp@7 zF0;)g=Zas5a}+e!A^bdi!~F^ls68%)+t00z#BONyP!KmeBFzbHB*1yJf{V!-mBPy@pCxDsEe|+S(B(Kin%$ zSB^z=+wQ9=dj(e|j(RVeEq5V)r`0R|bH#_F;kPTTz6i(kw)3lp_B+CJ_@b9{OLXAv zi66eRh^pV~a4sBA;NuVXsl`*{JF|)Pm%*FMCaeAkxMKJ!HUgRGbs@UyQ-5fO{dqf$ zPqn&9bx%&OG=auO)a0-7_2_EOlRb+q6GdCVZIiMWUsG<2-)1Pcs1?%hx&6x87ub4# zGGYX2$_s8Ph;KsK(LJ+g|7&}i+J3l*XvFDo5^HJRyJ)VXTwEa!$VOZ*bMOx6sBHAz zHQB3JcR6wT7Pno7oy&P6jvpT2={{}4tz0j>4?Vt$wRB8)@s)%|cc9_0{yZf2++3!t z4EEP>W^@pR`HP@bxKZpW8p5dQN}9gMk;c18sebhh*n;S=Klv5&x;i!J@~7=m(37T4gyFUQ0HW#eDRhl;9m%-+E;R4<8hmw|w+&8a?sVj$ z=j>KwhM*Usr@iL+kk-le0E5Y@`2aCT*=bmH&urvO{*W?d~T{6i#5_^NRc4o##ywt{V_)uHrHNw(0(|4l66XXBkD|EGT9F);%%3K zv3%=8DgD*1KsQ9tjm&-g*Ms&5fm*G?mj1`ADPb_Qu`a5OdJriT=zUGZkS(^Yd0 z{WOr`XA7mp6Bf|}z1rUv2K16&8xm+yqMos$v_u>WIYoawt_)b>XjQcoXW>}hUqNh` z#$ikRU>E4?ixlp2j1%5LQ%6qT3`CSje*w~`;`nnl9;0sm!8&D(4YZ;6r}a~bpviLK zRZ|>y@BZ@DA@A$8-aCSal<4%Kzkvc%WjOr5CKM6rfbgpU$9oLRK1*-#(=qqM_9w(l zpA!gJq-ElDD3Yv-%~juXjB85`$GS`u2BlqvcsT** zjlEs{Zjq>U|GH`tG)Uiq6Ud4y7+s;Ux7z+Le8+8pYRci=N`_{fkJ_*K;hR%$c`Yt1 zjuO%lc%(kM&9_I%W2H-*KY^ysek>9@Aa#w8CEckuH?HB!I zDi56?56CK6MQ`kfPU49MZesIe{c^huyd822H{=rS<@Sor@4^c8VDB3 z5B!yt*IpVpu<~fIj4^$pwtb2U-`%a1*r8%L2->f$**^2oOnyLS|S>MVVt29yLPIKaYqHfOnn{Xp3;J_#aDm-j{05#1K-H9?wh(I)YA1O4A4@E!sb zhu*`(m9@0sz3GDRkI3eAm3$M49lh#jAfV2Vd!i-P$svl87F~(Uw3ejZ*)IG z18*4V>D0#2?b4GXkrJNVK51V_!wiM>nv67;CfPTB`SIv~<+0xjQ8l*$q$0jQ?MQsR z(9^uP*0wqf90fi;S^C61KA1h)x5j)OTwQ5@d}toxquP@Swev-k`WPNu+&;#W{_?qV zZxjJ{Zl^Vtvzj$Z1HWh17A$E1;ochT8ak^b7uf70Z{!=CbgIv4ItQBchkCt+9v`#f zLB9ynwqxTrAu49oIq;ro9bnw4y1o-F5P^HVTXyX`li~%8`ybBUIx4C!`U9O|=omn{ z1r#NvyF(BLK|+v_?hxsAr~#DD0i;7fx=R^Cx z7do-N)NMYMfVh*3tJR!&zBV*AST1?n`?TroM|Znc zB6-RoW1@Do5H}iqY|~^kW1=O)TfG`bU!k{;)nZ$BH5wgW*RIZ+&A5$2eM4=PrBYp` z1pDXCquwNT|Ir#tGPVD0B)W^owiRcS)~{ILtE9%DF{sn*ig6;6Xc^WO-B;xt>SxcD zue?$p847EZvj}Oa(y_I|++lnpqgQ&g`5^7@A-Z$3)_djezjMB=W)6^Vs~Hh(RBf$8 z_;`H~R$kauA1<2ApknN@QWsu#1UDP~rAqbJ7Q1{f2dZ>*S(mWF9pn|as0TwDiFadA z>#ALNz3(?W!Pzwumny!*b=j=L4XU{kx^V@Rj|=PzAC@6E^2g`$XMJ@?s^w^-kM zsU^FvuPT0$N`H1IZ57&ocozBL!n5{x!9ODDcJ{+f_^*Hjy{Kr_WQ$3z4<(KRQ6r)n9^p9_nJj;<^Chk6F(r~TU zZ#f*F4|X5NvbN3^Y#pbkyd*h#wm2{7Iq0bsdhiDs8f$aif2-n>V^2FJ|2X_e+Qft-u`ci9hnl{@og$oy( z6t>q5vDp)cB>sAm>=I9h9o2(Ae9&_wU3ew=bxbAFIjBEbjQLljWW352m67j=`;j3P ziecblK-kNrWBLY;xqRjv@a8jKNg?oW;1Y@Rx`5Y?#5A@E1Jt@xh1zh z=S`#OO~5n9^=6~*$du6^{r+Cte#%x0U#fg=Ner8)xblxxUE;4Ki^mk~TdM~1`po^d zy1uwB=q*24r*0meD&O;&_1Izxoc)qWz@p7!LF)U#*~eq6>#{X}qA?Oj`l=W2krx1N|;f|DX z8|0^@dTc%JS9#@M>;-XTY6=I2RcC=|Z?zo3SH&IcBhR#? zZc)|E`6g)gcXt0=H765E+2<0TH;Mt5)CuaZFyF>=8<=Pb~S5hAn9JXqe1m5<&~Gr8nO>3aUtdK>c&}P zbT$(A8}s>X9&N^hw5!vqnj(A6n;54|W$Nj`8~uG0=`uSB!NM0UjH^Sv}Uvfi|`BW z(>#O`!yAXMH^f{R|L@utLyc+(`#8q5Rn(Pv4~vLxyn$8{ z!)ED&S{_k*4PpCHV@HiEPTN+6zba6Y_IF!0LALW6gJQ)t8U$w1eHtAOV^;ATbB}21 zds5QO=LFx+7qrbV(FpZ+ImA^dXw-!r3BIXUciExzphS@*CtsEB1KZH1ieZcM7!>W*SwJF|@qzV{=|Qto#P z?mbC#xQ&Nx2~P2S@IJwB`*~+x?MzHCrbte0>RP&w!ECIr$R0<0ppOk@AkI{r@JPPg z)hIViC7sM%XwCW(5nXs2Xd9N6vaIc&_Cow?o&FgXpDS;XpPtdTVv_yEpOW~P zz_!)!M3j2Ixzk2RR8YNfNvc(ek_Dl)2kx zxQK3ZpheWISLx&Rq9Y#&v0tN2KeA+0v*tP+6Vm(g*w*~;uaRht?M(pFKhu?gga%43LQYMXqc1tV``YLN1y)Pkl>HC-_ z)py*}6ZRU73TuKAb1c_kGswA6R%W*Tbj`K!H-hZZg@g1jykOHD)k5qwLl3ri!;$7N zE@VUs3<*rZyYgfDu(XR<+q2%&SPB6QpA=!1K%7!$FGhS|Z&>TYm^~a|^4ll*sD{Hp z91m`0jqD#WVS{$;Rh9&4{*}m3%VJiv-%9(*J;v8*e8twLLC40u~@u}{JnV@&H!?c-~4_m;o?||7c z@~;o?T_P{*)R&JhwvY4Gx0DJbvi-6TU%aM5gDv1pK8wh}nWON2bga8+m;FT60XV!l zU__}fmi>iqBrp{~RaxJvYH*c4Htd4}VHi^FBP?U~v4&Gl2MMNU$$s&1< z6?lTvr8Fg3jKE*yDdP2Nr)wBH_YRVHhb{HzpqyT1^SwnTyXLx$J@*CD>+OCup1*tB z4VQal#$NPPN<~W`8An5h^{0$_jA{fO)q_H@ptBv@u) zbzv1h`Rg8g$sEoz9F^x9-YS^dpa!4W9L6L(Z8!|>{o`}}Ded$Av$V{~bDhXcfrcv9 z;7p8bc4G;vKQQ-{3I)E`{?E&Dh52aCI9UcnnSeLH<6E-2vR96NEKgW;NVAK|#Q47F z(i-H((hSp8@4NA|Ur63?X8QeXtq-j8)=A|6FWRVa_Oa!1GO-G_Zbr8t>GjvAjmX+M zS#y@W8o&4;_xO%uNy2TG=mi$VIhN3gq`JJ`+8;RWCAEitaPDRbjDid=E!L;WL$}DE z5LO??9iP2xTo7Y<*SMy?{%e(GPbv9qUNAmXet_HYh?Wm;UxG=L?h2pt}w8>$c!cZ}BEhN>0QW$;9MD(~%!bK8ju z*&J3A{;nGA^epQe`)Z%hNSGp?#d0`MsFnUN9DNRu@*&*o;$R zNM6%F;GXh}i;s^6-9M@CnMN{GYu~G*FggEZx~hI2EsM%%VLlxZ7j3U#f>@S;@pTr# zJ6mTGKK9cIN$T(020K}@!_%<1w-&i)y5SP9+hd+wJM7&ze2=8Ed^0VEHuO+}zExr< z$4A`k)RPjJA#jH5&tOwp*+)_YOT2vM^BMPadM#Q+M`8)-*Ut5!-D?NuNzoI2s^lr5 zfzfpyDy>^?#S%AB@3~Us;ZV2pYVuV6&Ti7ldQ?Ma^0DJi`WthLS*K`0agXzyE$E!n z?-n_$_e`oszckM~6V`Fv)71$797poS2KEN`>a*}MS<2PE6f%{MO8LxP#ACy4V!2LK z`O-sAe&BH&kL$(v3l1-@^j+)S)c%>YKg|PS{CR4p1L@PHHS9e zqM{Rc{I$C^>U=69Z1jlBu$>qOnc&#mfA;81>Me5eGnb5`qfIa#TVVZQ(Dj6%zX$uZ5*eM?8W zHKK0TRY1kOGjW}&`&JNZp5^a_lvQQF+UAUL{MabX`Pysy_14?89^!vCdhCsM)HoZV#>sq(T=WOJ z{qlrfI1U~!SNU!Qmv2?+Zp8z!67)GFwP{y*Q^(;ZGy(g}XZR+JO02T)g`LLfq`TF7AivwdyTq@& zsVg||tU)eQ|J0+XYB-VA<;4Y6>&P|Nnia%faIp{X)~${6neKduxS1CP$6laAgJ*jy z@=Y6*6RA@9xOMk|i6zDv%|SJ>R2tV;%b>87_i0q!T@i2j zlFWm84Oz}o?9-z7{x&G{TH3j`-j*E3^wP((#Vf*orr2};vaI@H9v}Xy_)&YBL#6}X z8?μ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 z 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

  • x#67zf;q2|!I!6W%~`d`^=0aD2jv$?+kOz7 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

      fl+( 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≤TPpa*Xa%i1*J);!t{hum5B)tA0DOqZZB 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�ogH@M_rdDz;JosbK7|-L>*X~Q-r*O+!Sp*kHoi- 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 z

      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%0AkOoj{go_ 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

      {v*VIH)YlT(-R2AxIZjH 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

      3>gTNW|<=l`>iy%b3=Eo#GyQqkBl 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

      D1^oWWC&QTaLjN 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

      XB5T}%n(;SR#%3A7-k(Y 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؂eS8YF&1yM)px8trA%q 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

      5-gI;hCQ(IYF{#H5h_Cc}!Tjk5 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%0A%J7p*k%c*)t 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

    1. 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�d&u2;i}Uk(8l1j14iXu;1^QMf`FmaR0pEz>w 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

      #sR`N>B5U0|n-x|XV-i@ZAF1-X$d`;2& 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 z zyj^)8S_vZFmY6()KlDIm1y;)}iXS>RrfH}o}n7_`kzqzosDtXd4PZt;%g5T{sUJZtG=PDN+|Yv zgj67(B7~k;{V6QMAoUQ3+srodNTNiG^5AzcvKnb#uh$_(k#q-d`X!^``N;PuF@`M^ z>u7;xO#TEUOBWW@yY*4llWG&wL}v(K^_>{KK#y>-HADwZSdiS%2H{mg9{JBOr`6%|5S|Nq|*uWnk4yI?`oyJ+m%1}>8~ zswsAv!JS1rB9u=FnQ2RWZM$WQ9?}*w^G(_y_np33eO5taLKB5;JNpIsv!r|nX z+GFN$)=gwj$w69OnGf=fq>EQ6dyoe`*_)H?N+{6R&0fZmAdmmN4&J#|qnz$MzhTK* zFi1<`tKA-ibYq^&4lU|n$r=#MEOH$}&229^W+P-U-@24?`2wWAhDSFpc|anIn5CSw zKBT02#guVmzQWhW5Sn;RY1zcHHcG zag6-5-2!Cq8Bf+HFj& z%tva#Nlf;SHfIGg-_9fHvuXefznBH2M~VWp)AmyZKZCc4`d#0%XCbep=`)7=4bV$|T^4{aB6BK-dLerhj0|ltQ9&0zEhJwa3&igK6qTl%d4Q)4&N&d7sYzCo>y&L$)Zkw;p$8-ufBlqEZl1O%$YB>6>TA&;Ic zou}`Qq0aV+_Tj-Ug!a`vJ|A`&>`6^C)6Uz0@$!HH{R=k8`Y?iiHXTEr%B9~kl$|Jm z@|$kiITB>~IJIDEoD_WCy?RnxlMB8P1oLHtO;E%)I5;4}3$7K|_+2?qgxP&g`DpMg zv~jCYWLQx{_>WaTE!QdJPuBb)-y{d(GCgFBCYB%vrRYR>X+tGRqrFHgJ>=RF1q)pq zLHf5NB(oD+kpUZ731{p@2#-k`ycv@PuDMeG=&AofnjzalSGGM=ziSI6Rk1}@;gVSV zRZ}RSRuvk3%mya*Dn~4?ryOms{rd}bF2v9MzGRxx3#w#$m%AgbLOrj0Lh{rY*eqwX z5U`1W@76kYHf0-p{ut}%?kcp#}D5kX5@VRc6{f*(|vsyr@o0f<%?vpK&`@b2p;yypkpG1Tv^9GrNXNa zq=Q%G!E*rsXP-v(yT8Hy0(u=aRNs zufrbo&dNpqRh? z?2LFPm>(Htr^{C%%qx3hoeM1x6(*m(x3br-k#=flkQPuYaw#f-D_rEdjiRK$JTBWUj~f4 z+w92WR%F8QWneD*1VXr-F%LL}!HwU%ZB_C*V1o%qe=S!+D%navhSo8JEqU`E_RS-| zszg&aDsjkP++mcO>;#Kuk@i{5r{HgvbA)igP+%&dEwn9)qU&P^@Wh$H|C)^I>kq#m zaF{z}*xMPR4mbJPj{_k#ZRlIrkTy8@Pn&1*7o*s!qR>^lW~j_57~wg|g1i;3nGtpj zn({^!!Vin1n0<1g&`-!; z6?sD5m-i#8q3@u8R7fHE>JB871-kPq{DhzkkKpxfN+@LBoF!T;g4RcFroV~8P+(`| zD(2r2B#RHF9`Z^yH3c({0!~$TNj~lrekGfiy6Y!A2vXWIg;L9=GnhkjhrgDEsQ_Q zL!DhK=iu8R6t?E;bmL?i^fPpSX3Kj+$;u;3E!t}kJlM{=R;Y^DbECa_Umg7K88}GJ2U~#(NLPy ztsw2719`Qv-ML!7P*~RMjI!)CWZz&K*c`SGxvv8bFu5I2xe^|i{IVFztcdUNC_Y0$ zDK~Xp$tIy}IPk;27tN5I-;-_`{{x)+QfOB$eupxqv_CfsJ0Qbm3tZ@4Lp~Yl&%XUZ zgbhC@#@BiT81j8;-fwBpPV=IPtNHZ)OV*1xdBj1!ZUxbUE4^(QJCVq4}52@?t{!4$o1!?#Hh{;j5LXquQ zjPkP?h$&k98TL>I`Q-#wo~`>2G6m=^GI=gQ``7y|)ml!_g82|7c-s{@Q@wJ3lt&5G zT+|mbT8bf)-j-U9OdW9HX~OI@uOPmDcQ#5y6ms{(PceWNvRo9HldMfnJw&dUIx-mQ zH5*&+eS8V^Ljr8x7Xl!>O)|9M77yfY(Z>9J`xab#JKbz&2_bWkHGv|G1|@W>n%X6+ zLsqcTJUby76l%(NV)&h*Z1YbU|E~fF&URfszYvEkFD1=}jNOA8BZ4}jk2r)qYWr&u z;07V_bZNux=OF1dw`Vi{G=xbC_zuqz1BHzSMw3tt8d-%j$4>{+LlhvD@0;|*v^Qj=h0tR}WI<~G1qZdIIAHx{_(oqwLr6cJJ%P>^RCT!N zXE@@(sW*#`Auk$2MepkkTR(u*r&A1Rvu?;;zG}Vw@>5V@EdMFa;Rhw3G?=g3Ga=W& z*upWtX~^TN+Q{E}cG~X|)t|(yAbmx2;~`rCywkoHonWjDZT)GLEH@s4Rn)KX5lPVU!0Yr1eIikB@L&xwroG)cpVd$Wm{gM}kjDYj}m=IwXaB+R&>w zkGvP3d`j5;hC-Ft%!#Js!4aR2ex1q#j18(5?9;9yr^@nZ;U)%1T|StPVpE5pm9CYT z_EN|_Vj;b8;*3}~kEbuZCr8Ft?ycJ^I72RnW9Z|m3gpxG=x_Ox?pLdSbGGn=r6EUV z(S|*Z2stQ{u+Uz83?Ug>d(U2bK$bv;>`?z>!1;S2vp#9$U*(+s=cW=^2aPIEI2R)q z{^x(YJC7kg^mEqtlP-v!!K7K0#6jExDTX4IJ_u^3z5n7pDU^L%veM<3L;m|2=oR@9 zcsJf8+fgJ$$=YQX%&A~T_e^n5d z7UaFJj45y6g1k>5qHEW=kmaADI8KX;VC|ad{%JM}qQw0z14$(ySN`!F8TJ_@-3@VqV!TU81DrDT6nAJCKpQ+T+p2^pV&}+|q0}0Z^uNhne~E?U zW&0--eb*q6WUcGrl`RxD&R<%L{|jljs#r2mWFoJa(O1%jD^R7N&FGcH1DK={jPlzB z@SQqH6zkPM3A@4815>0ZjPFlv^kF7=iDyoW7x@8JbcQ;^y8vmJd??<1bso(BSxasu z-9-MjQ+4%Te^Cg7y$dACjSN#uijBa`2@d9Vx&Kzgnyk}4yNtM;S$3e8P(6oNWS%f822!8 z%z6iX!j>pG=Hl74=nUk){UwE4;R8zly|Sq7IfMeDxo+7jjKE_dL2RX(B*JA0`cJ8b zA|Hl}#15^(o&Od1-^@-1>(%eZ7!!UJJgdIN`?wAYYa<-b{Fes# zu9ev;S-B|Ck8|Tc%Fifxx%!ns&}U@)^6kkrv42QhonE$>XcBSn>$fz|&_aE{s2O2s zCX_qGN_KVoSbJwC`Ugd4=hm&F|!@Q8a%k% z;hYSX8Ie2jJakawB*KV)Hwu{wW`5OawMO2w$0f4ymB<5+(JJq0&$zb06%pr)e4*O8J(~BIhg*_$Tiv+t2!#}z+b`V(WKH`8kitIOi zXnc)pkVaj^+JD>J5S1^>zeJD%`3L__4i0}qkL(NIsHqOfdO5Xv)G`dtNz5l9loye+ z-avOtof?W{4FA`6wG7IBZ#8Fo9D$0+0xQv z08V7;KRcyz3+ii@NQt0uJjfMm56>S!cO| z_9jiCNRBB^bDtB^uH?TIdi(6u<1=5jY#oE6Vz5Sqz7?2N75LUZx`D#V9a&`X*&%jE zN2lDY8*uGDq&F_#M&3lSXQ`g$K_SI0B3I54gvnnbVb*p7pKl4+uPvJpYkNjZHq`~i z=Hm4e*s_C}1O8^Ib~Q4L6D)V=F9C<<$l|++)gJC9 zIE(({v9BtJByMi?@|QS}QAk%DPG3YgnU3$SR8Nt4m{1<+!y4qD>Ml*r5r_<)g%TDx zb|Kt2f#By2JFpl0Xs2yk0w8qI$C+gYK7C2XDia=%tE)Id*Gmh5s{?HcMrGjD9QwxU zS^zlbYkb_1EJHRzzR}`ej1X3yy6*AQJP4X#Hm8~Y1wl{zDn5O&g7DmYwwebEP;^yu zf#g>R6iu(a*DsNWa;gxi7jLD|i$D7ahi}ajy${0%;+`WOv%~zydk^V0+Ef zLkQ{Oi>+LZR>(75k}AGW4;-Yk*#4bpfrF)9OPv8enA#~m^9}C@(~XYj)}#aAL*)OX zd2I-y{rni@HrN20d7!K^o&rtx(a*|r)DV-XoNmPu1=VHZ^DcBxQOw+grLDvt6lju! zN588Fu@ZvmYfs-pMsEckpDZ<)ll9}h`IrxNBb7V9S^t4uxlV($Z8^9#FS}99KZM-( z-upkfWl%uq@)?=aJa`?yxwe<406tO$$Ku2C$ZO}B?3Vf&u*_6q)=tg^_quBq+|m6g zly0fXIzSwrs4cmzH+%)0aRq+d)!tKHU0Mkm1n(?w;BC~g`%5aUl?iV*~SRY-=17GJy3x>&p#{l z;ltWW2Dz?Pvuwjekf=MQFd41`&P^IB zAHSY~l3Ce!ZhA*xC(C)^rDud3{v*2{X|V@SLTXjDvU>w<2 zsgbE3mw=N!$D-*&3y4o}Uh&`m4Nb%`Y@c~8kil>}feDWT*q#J*k9GWq0?#e5liYJc zGD+67C0B~UOzC=tp7;z3(pCR*(Xtw0*!LS5mhupWC2-O*@jh}X_Sk5yUI&jQP~dTrm~Ofp*q>wffzMvZBXw}Ls%8Z_FkZKPawh~_-oFqu z5%z;oCzPy+Sz$R>Q2UisTduEadS(266=FH&(J5+^F`ot zcaklQk`e_NOVBG;^8wD*@YEqDA-|3Liqh6ssQq%Ok9t!F!ZNNMy6${I;pgfCBg`xz zE<+VtHE#}a!ZtQM4(rgkq_SMLT>x!Tp$B=%dC1SDgedhEH(=hSnRm2%K<(;xJ`!nh zXq2O~`tdIi*+nnUJxbC=MnCeuvk97kyGH`&L{1mf4P3%G&3^$`g}*%s0}D|9g~{Xs z+Y(epUVCcO;)mR-6W5e8??BK$t)2dk2&n!|zR}Ar2lb9KPg3HBxj38AeNIQs ze~k+$?riDLkcNKJTamd7r>5v{1Bhfkta!@d0%Z^EQyDn~ zp?FUQds*inbaE+toiUzAfyMc`Ooz)5`|;$g^zI>Yt&9zqP7g-*9qm(EGWw8qq4B$! zs|yr*&=k;rbVsH=`*;zreLfU+ z4hlph={bU?5ci+8JQi;WV)p>wEcF7s5UTPjF&9G?B+e9@`rQy@;fB50=!!gps#u@n z&7ctc5Eh}|94K~f_}}2qeZU<)wx{L)3K2&BQY1{15dU$3mRKMT*t^yKHT-@6o>e-r)_BJOr2VtG=q894LPB zOzxBN3s52#$dtNx7s}r$j~x$?fuqgqCWkHxh!%TVccW_o%1H7newoxj#_w6RcIi_N z75lbuwSpcwiTJdYX%<1m-<6DY`%R>U`Syzb-#Egtq|(d}KZT^h(z{nVKSD~Q@mn)p zEYz$2YZhMp1Uc5`2V~^WA@p`4o*`!u_**dE_FXs!VYi59Z;Q>Mpic1vi{J~OMb{H= z6;TEjUSqs~|{&YWmsNNrBoRrfru&IwiOgwA$YAPWn_P^mjVt>K5NuVB(tsBmQ|k$~AIS+{*UQ%tfr7_rWRnf)P$ZH`yq<6cqS_ykon^^}qBETwZBzUx zwtic)kADqHe!Q0EkzxYuq`n=KWFG|I+jnIk{)0@3f`&Xi6i<6Go%f370E+GODoP-% zhoti1`*CSPAS<@zk)UA-(Y+N<8L6*=Qsdes(=V(LUCXJzyjgSVDNi`H6|5krGDn|S zITi){_^`FgvW5aBs(&pdnnUP1!()okbmUb^`&>8rErfP+_jK7^1Ds!e%ufwHcocd8nUHfm@YY#^#*$|XbtncLC}g~I^~n&=@{Rc6IVngdlzIAz_absE zr9D)CdKcW-E6;0d(ShStAxU1HdQe@8=ZaZ8IEhcW?W?V>x(t*&4x8&TO9uDLb)4iqtYH5oFOk2r4sy1P zEKGi6Ls*-CGJQZ2U=nj@OyC*{3dg;?+I7l)nIdf~`FznIkeiBUcdplLnGr zJ}jEXts+cb;6&BfSAF;xBL*+Fg4_nu3BV{;W9DOhBA^*pE7+ zDR8`b%;U*=noFkpsV}abK-PI_O54zV$f$6nh~8qk*(o5b_E~EnKS7Y zd9((3_&?^ICEB61I(cL5&2?ywBFO13^nh|DTK>Pu;!qk^KWdwN9hxGtSVv`}klk9N zO#yBgYE$B`U4NehCHMM&wWZBLSYx^v9m6@~^S&o6Esq0I@nurBIzK>e-o?*o?H$xh zOgcqW_kk}dIhB%9CpbhbF!~#E{`rE z=ZQBMbCY)DzG&_q?lJ>4CS_l*9)uvzdk29-F*8t+mzG#lDUVzZN&1uQPknviM@Rgr z2i6Krw8T_nLGDs+JK0()7(CDLoqul+^+RvY6fs@~4GszB?`PJaYNC1kiFN`M5F^9x zt_I|)Gw-FY@eI6iVq(4r-N?>aBb-9I8#(ssvHt0uh4LPuYqLQiNQ*XU<^FioXAd!tN@!(KG?nkQZJ!TKkOLpQeAap_GG$ zbA3b3k9d$i?G3ZDZhw&qn^74!7HFKsCD(ZOuQk?QlP5k0mI7c2}CXMr)UYzcD!t(sr zm*1gOn6$TtwF+TJd_K>rRY1afJhAV7*C5O^p7ow8z^lhub2+Kfkd~ctTQM>Xvh!Fd za-(RFNgiKh(qtw$sfptj3zCuknLYAn37OD9LmeutT?!4|Fkmh(0RA-|&t!jXB6Wvc zMZ=2)P;e(M#k*<|3R2n?mTxa1>yQv1ch?!PvRrP7;TnPrquE~jm*Wt0?g3{X6(OWN zSL)rr2Kl9zLjO&oJ7FC{))~ zyu62qaD8dbDGS^@c$LLopl!o@v!f)RcM>PHopTe%*Eaf}@19uk1X1g%cAyJbh3j|A z*BOsOkj-*5mPL9Bxpp6`zKjOJXTQ=_lYjRR_*vrd>g#sI&*|O^vkXM~!EmE1ySKuu zfMfd1Upp9o?JkkY8X=x5@^<=f-H&=yuHBDEs>gCo&J$adXA4*)G+l!4v4)z8EOl5^FY2hA%!hw$*<#2p zdPE!fyt=&6&*2)=cMTLdkRrb=&s&F<#N}+a%Ge~0B)h{pex2_S)%%Qj<=W#7|0661 zDaVnZr~Xc@GYq~$QQv>1Y2s$-Z3#)a^Y9pLGnb?jLx9Li3oAnn;+>U}WHtFowHzbCxQy!}0N08Lbl$lgJqSmoc?!1E&o+=TIhC4Zk?&W>QtxAm%$kL;vp0bDp zrtEFcH*rI8Vqbg!ttqk5F_S$v%tSO+O|^3B457nxNJ5`x5SiZ}^ChT85X<=lwh0z* z#7vn~s(k!|TrRPr-qL)CKHtaj(@v9w)K|HWZjFI`2*Xd;w5`Y~m9Mn5R6uC<&&RRr z>x7M-jfzG3H|{)BJ=e9tW41Q2d7Jp>Nm!02MkLq}+H_hxNOT=`H?DE~Il2wln@Df< z!4&sP#SA4Q?+|mLhYX!H9;o3t?PMdr(VKzio+UAk!-|Gu&!56RVyGG!W6766JWg8( zC?{*e8&k%OB4x=@7EFBqdN>myvP z-X9F)%HUajx=#mdFFNs0eKD37w`OUY7#(Df`9|J2V~o zuVf64tdD7o6_t@=C@fmfyH4~vLLKhz4MyFOKX;CUK_j zKdLJ@k@K8V=-J4a5s`mm3`ecz|>ePl}<{G<(svv|a z*Yqe-vO=W~eIvZs@8j~dK5Rr8Vtf??b2XCXw>MFO`m-los2 zBKGg>h3YkKlITFoToG1v*z9l@N;X_ZnmB{CZ3GjtOoN_`YDN+JGy2{ixZeGugX%L4H+6`fpnWI5f-#n!Hzu%>Wh@tgP-UT@Zrl5 z@ySM_|EclB>S8UDA`1OHU&ImD=d-P@LAD6m^=~|IparG(_sS=Wr@*&aov`S26Qf1u zM9H&BFkMUCJ>5x(63t^qKaUur>WGMf#^(hjnQ=bWi=>0yX64}+ovXMZ_TW?D)*py` zQSs*f$QYcHYX06FzlNZ+Ow~=H^oWaR@;WaiN%a1z1={R0#O+Df5jxTXCE=-^>knj! zy`kiVc~33)IP57Jp`%4?LGYNRogbnjg5=Jhu7x(o%@@f%Ye=9BZ2o@rAwuI!3pd0U zg<2F39t|20hvBo|j!#VDn#3vQwER^VZOzi8-dusS?7-d842j53rozOjB7BwxUh+9(Y`d&}dVB2~mG_8UPRy@>UmfzpPutFyLv;QTeW;52z z@;rnmmB$>*HY#M^w{FTV&x18Z=W1XwGx3?S-q!VN0^zmWl`YOagYL68&zl~16Pwyi z&)<2{Ku%uc;T9=cqAPyB|H#%s;wSpL;LzGK0tObTuPELlF|uaW{Nw=g-@3WpR=tg= z$R+98T|S6nd06WF8c5MDOlj163!Qtks{R$l#O`{#Jl!5e681WkigSA{JWPKL^se70 z(Ve%hZ_6G)_QWQ;M`JuNRb-~vpDBm*Wj#!ryhaeuKer3}d=c@NCc1`qA7XbF^o;tI zz$?6aGq1fY^b2U5Ro)~aW6IJbxt1S(ukQ;VFI6VqpTsIkjxr;#@8OBI_7zxC74CSt z!7C1Vx5d0kZ6}Nvf2)75Fcf2YTVb(M?l6q$j_GeC7 z@hfd3JnWO(K6tScU!{XZH{A_4THLVgd1xE4?Yz>e;d&cE`=^VLa zkwB$}jy%!L$Q!*gSVw?7#?EM^vc?XhTd2(a*C~1DCkgBQBC^D=id_Fn-=5EXD4|mMAQfwf%z4p!@#9}m*huH~ zD~Scoya&^DjQy_wn4^xAO# zw0GA+ZVmFE>M&EY)}sDHOYo_VJXE=wUhvuQ*}$yg;ER=vh;}j@fB9d+;q(f_QCN)aES;19@u{QFEQor7824t`>I216zO7piixu|2(>=e z480&!o%f40x^olZ;cDA;JPcrWH^M1GqlI@buMBXey-pZz0L_AUngsTL^3|HnkcsLF73eU1#=O1Qopg8#up8{Hz3z%dY)_tAtg{35#}O z7?3!WSAK+8C~YeJ6e12=>EBrmL+x;=%aLV&;)HYME0?;Qj1YX_@$&Tgb3{F)o?g>u zMtnm1V>8;vh!U`key+%e(r1r{eGjG*?}0w4ty^y(ir>S5(t{h}^=D(3EO%^p-z%K936;I~PHgJQOUD7;NAo&Z|TTY8m927%= z)5UGweCfzKo~QC-tO@>y&z+eP+u+V=l6+cNj6^CtC`f#=!RcqK`!wlAkrA@q#QU)Z z(T9?`*q&1%*>iv4`@uF;oIR+y$R>vrB=Y~^njygk=*ltrhRg4FR~C5rqt^0Kw|;aE zVhdjtEGTT`o)wkMt0)I@Zy$p})$!+9pb*k*`9phJokZLy( zxxf4cymaGQJ~!<|VwU;hsfvD7F&k-zM&uDL+KU;hqHV-}ph56w2?z0AGUNQQv=xcM zz1+X-B#57+K&6F+AKKf(nW>HMkRUOZ$XfZ!2zsO}|HftnQ9iGdclOq!VBG!9kf|<; zL-y2NToys0(T#jsW-a7vX1X$S&!ggDL4q@98wo%3H`%o>0{8Q}E_jP@BkV`uM)NbG z)zKn&`8ag)M(>h0~wmQJLyX2+c?~?#T{>{Y&B0?@O1F^y7=}eYz5&XTG=h za9$cR6PDTkxtl}(ZvE)(pCZJ1Wy@1$^$_@RM(y=3=|$YHELD!zT*!Ik{eojglvuHC zqF8HxK@^((%8Cy8<61G(Lh08=610u;xR9YdLKFPIJ$`G2M41AP3jQm^Id$n`@%1QZ zpP;N~6HG%B1yk!^#RlTt{Cn!um>;}%+@D1{k~HGx##ua<7)pKc({Aczmf8W-{OqkgWZC}BKp;0Maz3cD1IEc zq90Fuytb*7Z{J5^{|IWWM6Mvtvg6op%K&((T=YD%%uGB~{p9y4d`HoFtwWERJmD{3 zByj4=G@^|ve{p`l0@V@0WVXL7u=qSp*D0~#_iDX%9uYrbut@2~e^3drWfMQMv$Kfb z`7`Z&g?WfdF^DO6`ybTUvdd2F<;HEQ9b=MSdl&h;G|aTRyg}GCU6Ea<)rrpIn|yQQU*T2WU>+~yM7+J7<=iIj!=~&* zSM{rp2;FmtzdpwZ5lVZwHcvl5W=q+@XACFd7j%4mVV)03GLQAcDNhqS-ZNRpRnHLL z>1)>$4O(EMDRNCs(2=NZ9rW3E^cFGoc(>PsVq+h3IW^>pXOJcMehV+oA%1?CKbx*rv#d1H58qA4lMzMSg>!0C&g_7egUDspykD@~UyxD6 z)xD9=SBhKyMiaB^$5%4mQzNjvFN^KJok$rA{9`&^iYO)Sj4p>Igfwm6s%t1m{2j#} zcV22ni63QciAe-}E6!$8EJqUk@@?A3oFWmp#qLD94kHP0f8RWCGm)qr{2)9%`W)68 z9z9a$ejK+#`}{8-d`7kYiFMktFZG!GF!evuPMj8fU}NR z-YlR$W+4I-t;x6&myH~d*UEm9{h64AYKS5%h9o{MztFnR5D7~XffP=e#I4Y{b5zd| zm6Fa>Ip0MQH#K{8?ME2dGI;5-B^MW*-huDpX+NYn3MtQb55u>&-%z`!m)O_dXgP6u z7cwdy%P}0?3m@5?1_@FB5cSQkPC;tJlbz)a=%@0LL3wC=evccXs0J^2>(L;GPyb3U zO$Xxo;vXH<4#^h2P&+FT2 zEAwTI;1U$4@Fi@Oc!(Q{Z)*@kKtt`8c_J(Y8mSWj|oW4#%wO2M3SpO%Zf5DvAllYt9H8yvHNCvpy^^D@?^4Z=c=wF zT+!;E<#BovSQ6`c#isyCgWJXL>W(6jQbnZQT#LBKH~q2P+5p4&0`lVTAGr0>&GNXL zA<%xddv?o3fdv8FG`?qca2W8 z;03X~eJc2Rs3#Kk%zb+NO%8q7RfL4wPfr#sq{AuC(~o{Ib=#pS+7tV{nsE{;)aO2%haB(bude!m{f~7a<-|l%s+|KIJ@A7&Lzh_1V6caxn z(@r-tZ0IHNslBXrCi*9GrS2|{(_SF=lW(;a>P(RUZ%O)@&~BtfxJpmT4pm*jC~%O_ToThFraQSgYj?5|moe@e0|s5h^{y&wuCOEGmW@p> zUigi~vpIb~y&fO|l)ffCyEf+7*2?qk4OH}MR`d@|5a-Jmrf6Jr(0tO&%r1TxiBQrD zGYMHlxvQ~!ugL%ui}`BZ@+sl<@2DNO#R()rGjez4 zj%1t4TZA(j8VZfi!_7gmKH$S%5?i6}C}HD9qE^=SC$4@)ehXDrt6LU2i2p zf1ZB3^mLGTMDN+cH#bDw^7g!>lN2Ta0}mvf4W^KC;l*0n>1zld|Mshp)c~%?b{6D5 zIFICqF?TOqpC|6SDQBAlyb06)o{vtl;)9q4K-|-xgH)gMHqWO)|+bkS&KBGi;E$!8<8Dj)`a@s4~{zBl< zi73OLPmw_(ay53485vHqJ~tM05piAM4=b-TqDrl_ocZTb;JPEN+xR|-+`rdtd-XPi zsB{-x`q~Ufu0sWjvFC|~;}43i>!*OF@qSFVAIZJnOqOd23ZFBz zjtW)7RC3OI+o65Lugi(bUwkW3`8{{}K~FtG|1NKuEU|$PjbLf*>~};NP|^D^&X8z} z-=*6H?!vwL?X@pMDM&})?9{*i5M-ZuxTik>$%z5s%wJ~_pGbYoy8R?lC-W!r-W`L^ zA(fn8MQ33hz-E$2M@gdimgu)<6~NkZIDE4oK>)jaW`F-9;*#2}|FlkW!}Btw?^~ZF z_AGZ+GXBd)NUvz%mvU1?Rl6jaMEnQMdpv>6_ebFJUQV{_5d)Gb77pBIK86@wdIiNn z14JEp#`^KI9isEA))$rO;5V{0@)-*=jJ9<2bO*D+^i_7#uE;|~rgzn{KVBO}Y>@$5 z&xXVQdc@iF56Z;TT68HS--I}>UYl;u^dkYaRXf=hrI0R7ZF==G3!Ez*ZJwR`4wqKB zs91_GsL?*ZB>IsFdE$RQUgqyWY%{;H?ukdRFCFQ7Q_TU-RLk1Ge%eTg^>e?kXAd^> zxCa^x?8s}j`gq9sJ`(gzUW-VpqCC!WQHElI1jGrsbZp5d0r^t=*Y&R=cIeFWn-6#q zG2$966mS-aM&qK_Il2)mA}`f4`vD;hgoVrhC6PJk8!z%o3{iU`Tm)MzNu{dT{+p12+PO!%NDv4j}r^uUjRm``|avn%viL6aEITpKpEh4l(i!iwwH7 zBvLL!u6>{kKB{aTp{XU_CPSzZO5) zS_*#}X~h;#8rZyGViB{xNUlpf5oVJ~LZtV#Ohrw9;%$+VQ=HvK>}WN;mLD)gz#5= zi|v2%j0BfCexkFvhGM~2o4)LiCB9UV;c~b5aNkEcH~5%3V#PZSC2Y1s3|*ewi#=ng zxv8e=xo;3zJ7{cU7PF9|VMVt*twzH04_?1&&`NyIbpL$5zL`jWX~+#Zrh_2;$;|C@ z2TuI+5i^fbGM9c=7Kd+gDS*# z>nRe)=o+I!&Kl%&}L*bYh*aT3J!05APdWgyXAP;9OGk zlfh{KQF|w6qO`;jx7$T+%;^@YQqp1>)QXAsCx=5xrX$3E_hs4qwHxHLMR~xc3PYmX zU-F-c)p@v<4nMfP-H`ZGT5|oj?*)mwV$qOM^Be)~JO0_2Fu{lWV*IsRV@Q{4QBP9Y ziS%Hn%l(t*5fiXqFlfyQvBq2#k}>|o>0kJ(Ma4(tp7dvhsqPu#I^xLtE6W)El)H-S z{z)K6_MT~95)HXp`{u;wc~%mA{v0KFFMvW{b6SU@aD)rBJbF5^8wItIW3J(ODE3O# zsx@*!h*o&ZQcpgj!UsZrdkrG*op|OT^#&K_9BZ(fk0B1cK`UijH}1#tVC}0k7i6Cv zA9p?Ig&Yy@{|@u^z$^TmK1DY@swFP055|ZgMw@+yG($Ua5sFQgV&_I7+oQ1W7L`cu z;qH=epG2Mz+pue8C-K!eWYV;_;p;Sp;!=+up};8fP+-pwSZubZY8P8Ud1h-)ACDs} zHEz(2H<=>8i~hjy-v=aQc6!axU=qnkEj{%tOOaf0!q3>M6}i%VXSbZpL!E6+RsA3% z3RB-c`}_P4B4z7Z98Yn>BWsIdpJ58Ip9uTZ=(qzJxkR({$O5ta_B>bmRSNN}kDsGX z3PtiQ{mzLa0`Msp7%5FEfWzkb3ObAZ$fv2H_m|f~!Vjm8{xE42F|e-EY|Vo0LcT## z*b&5jij=SWPYfx6sYh)T(ojI%owX9v5BF|?r`o=6h_fu~Po_C4cy?G!U8k`|@jI%w zt*mCqa9~%X2xld6u558St@0?lb9&$Y&CiJUk^6ysZ6{$=$d zw*S1jQw9;Q^p4%}%@!4mu_I;uipZJ#V|I>Ng1FEA)61DvAx@7!P)7QnK(-~@b?PEt z5}~v8eT|p_iiJM6zp%6>cAbgaI^Pu%#|ZvU`EFyVl(QHwyHAILE0N(eSIZG?WVc`c z%Q2MxH)3h6w~m67G+ALk`-sB!OF4x#m!U`s^+hs~X~?8nb+q?jREB zo;$7xQV~Cw%W4K|heohJ?Bi9_07v1+zq6f8cyw9a-HRUzKp$72qV zd$gLdj!{iW7rl05_s=q7zTTPXV`&Xv6M?3?yMLp?HZz7HV+duf|2!K?i;%w%v~}&| zBJw{cHHiOnB0(yS;<9`%VW~2Fb#M4yq^WUyO51V~b$W;H&%NM)Bl{`w;qF}Gey5mD z_DBTG_3JBA8vY?i)sahBy&irc1*Xxtvk<#+ce{Z0In+L2oVfMx4yx%B))N28ph(uI zxaiA4Se!e4MBnHx>J#*Gk5Z@-@7sYD4E*~^^pR`vjG{Y9#L(B>-j!2`FFs=G({~@m zjfsNdH)n}y-9qFy?QbLiL_oX05c2?c=koVEQ1wSdeeE7IY9wy|WVpM*aU)FU$TmKBJ6-30 z6?g|_%q<RKxo9pG$bOMMPKd?n0!UKU-+!L((^%3k9?lv4(ikjTJp^h2R$RPqL zIWF&swL_)GK_>|WKD=97(CmU}=l7gxF!1>PN&?DXcuV)R%}Z_P5HGu2BGGN z$j@HOZ_G!j`F91UwgeJ%E5>E{cR6A{9(#Cx`)T5jTOT(wloOxD3c*he?~#?u)H$ub zl|t4zt%^n!-ZtikU(4~@`jo<#gP7JFu_9Y5n^_@Y!TS{5Rvk7bXIC7kvw^t z`JUY);y1%gA3C^<8m%)^Ck@z%^DcLf&vauXc&oqG#qUbQS4be$C}Id+Cw^D^70)5z z&czh=?-azv^w~t_)i-#^Dms5}2M=*Pd85fWf1UV#p)D*oU598>3~j#j3US}Fy7pT> zj>I|o@pR3z!HkD(K}xoRcpfgyF3>oK3I|K#oal4+uj@Jh zX{2zUT;hH62`L`wTAvTgBl9j3yOP-=@-8lYHs|t28WsCbxk&@!@KO1{49y_u4vT%v zDF7n33C*{1o<-(z{QzB83{s-2zs-N&I15g@7ufWXz|PG%28QR6$-iVNBk&4Y6ldu5 zxYtl99!;)D-bBd-xC z;WjR9oogh9DR0@?krS~R)x8UMgAlv4S!N=X52?~k@$|;Oki2YO)|B6h(!HB@b(s7^ zxLrio$^LX?g{%W)}Wk*M>Q)MiE=%_VO6L zDKRiGxi*{DNp$-@(&;u_BtBZvSv%Ie;r!o^znjJ5P-)C{Cgw^#oHVv?;+EGzhEc-9 z+L;&gMT80ohFc>gEK|wV8G-wcC9e}3^~Iv>Gk;NO`MB%Is}28R`amhz{Q<>0 zD0F^ZC`WO}($bBVXUHp^&R6A`Me@xPQkQl!pxBr}`%_UA{O(V1(J5Rf?oT3%>SA0- z$mE@Wq%|Cg7XH6qEQ>&D+g2bOWJwxQ6oE_io5+VuIy?HLnD&E5u84eIUhf0Yw%R_hRrwrGN>YdmV|L?^vxW2Lft~-V$4H2ukg=81B+`RAe^hoWkytsIFs7FQ#P8OjGb?mw zVBui-IN?+g@tsl^5IM3Asear0E!R)u;mEglUfqjGr5so*tA0hC7^bc`aDFD@-NZA% zK?7kHb9-0|iV+^w()V*x1^#J`KXiY}q3Y1nVIA!UD0tO=FGu<>JZojil+79?D^AQ2&r4ao`%hFM^_?Z1WokH5t+qAq zq1*7Bp?95vr%UlT^PUaoxCJt|S5{68oJEt)k%-!`b=3QrIdu1_kr4GyUA#9hqKb|8 z)wvg=Nb8|V9C@=Bg)G$n{P(({W6KMJ_a*eGsn;6v4{kuF{Oz1WQI*6%B6!VvW*Z)? zewga;@+U!Y{JVW;ZXun4+hcO>GXnW@C+*dLkjNK$k8jnb;c0Sj>f|O-xc*nQEcZ_M@^?7-yV4`~? zac+ZWQs2Fti;OLw6%cOWj0}<{SCx9^voBxryohA zpn>nEj9!$=4AGCpw%DyRO^jI#x! zU8Rzu&vGjstBGED;I;#4^|r&RZktg!QtvcKe+G4dZ^T(AhtTwf!`HsC2{i^8Mp_Zs zD3+5tt>9RVmSYTyZ>$}Ne-zicyypkJ`10r9m7TLF?3TQ3e4-7RzZGMr*#t;}@43W- zV+m;9`Z-ErZ#ZIj>G(Or4WqO#a`eRt7xFoDG9~^xLe=7Nz^n4DBsjnHPUcrIO z-b{$?j(W*+;yEIJkI=pUwg+6j;m6b`dEq~Kg6q}VI{J!Oic5$E)5P=?(cS?tYZ zmohU+YvfuKc~nZ2C{?ZJCWVN;-j`<41B}S<{!${m%K}kv)TeKDT|#^vXV@j#U_`O} z9FuKHA>M2}Nn>*t5xElYSaAI@@&3zA9@<;r*hIh;A>(Fb$GB}9ymyY+GjlqeVyi&D z(1aSRlsU2g6?SUY;t{gUm7P=qm5{ueIrn*07nMrE7nf3G;jgewxY;rw^h{$8lq)5#%l!4cuDjn7>6okFyb27hhHb0oi58)yE0g@i0` z4u5(;4&_g6gX&&8pg>2v&4lU`^2NpcavyB;NN&l|Khkwb8h*F1>9GNtg*H3Bto{#f zKGbakI?bqd$bNWh+cp&NMh-9qUPsFI(TbQ07ts)vGkjIk0(BFchZ0`0qIzOi=+ocl z(a6&+$;-P152_hkc4b(QVAEIEj>R;ijmt09J0*l@U6z@T{;Y}c9*VKjb7rVFjpQEL zVvFi)yQMC&r69e`#CIil5!tCXR#xbjHayl$-kyUEjU|5!>Z9pV`(7&P+2VQP@53K@ zzSILzJMPx=nfyUzzjdj@RX4aY3ph#n9YqEEy6EhTCbG<)D{tRSjf$l44rMwS)ZRFD z^So&%s;-#)$;tkK@`m4RBZ=>FHtH~kbY=VOA(^Dv0 z9F4yl-ia((ZC(z?9+YjOm21Q#3X_wmzrDRd{QpzzeEm&*V^3~ZJ!b7AQ7IQfwsMuB zZTDA!eSe;!`pEI}hnFcy)JN5K*IYNF!{o)s-T@VqN!gX=>wZKr+jpN!>(wae`~Jk7 z&I0+I7gJq@zo2B{r-)`{3-bDcPtG6PMtmoKN?k6|Lb+YT$)JLtNN@d-cA(0E+}hgU z>+kZ9TxLzlv9^*#X#2`r>lhArZD*?N4zodMQ&fybgg=Rt5$gZieGHj@eas{hKH#qC z-kC7N09dum3mA1+!BxzFckNyX(u8(2wk@6|E+?2jnTjqTYrsz{qL-7nobPPU8t{e* zo#;eoMkTR}uetl%XLoDY!fCn4+$@;LzAmNc>qXS0Sx&M3DDn{9Yv)vyb3H362h%Y($V+C`wxzLA9Tu_cdb1>*jRq#y66 z=HM?^8Mlw#nk4AX7p~+!LgbBmuWvUcV&71g+BT`%#9HFs*z+a^V#K?a6#b49@gkoL znO|LntN)&k&h#imwo`ZUZa;_yej}>a9__gA{$pn{uLPo`qAc441d(m!?aU*20jA4Y zryLHqp(dW(CeLv>3i~>1WZ2n|AfuRy%%#uWiAm>_YN(*(8?zv z6`N=~lAV#6Hg@QJWF}IcHMe@tTSD(%zv?N55?Gfi_t#t;LCmMqF*FX*h>3o7vOM}S z(Uvv|)6n2UT=3l28)F>AXDIYsl$s@p(N=p`>Li40hwP?ToNp0%fT@zdxen1E%s&<# zr@&37oGk}LE+V;ZDYEU9G`#d*-`o`*2n!xhs?<$}s9zATeSP~S0xY7(z8ZBSC2e20 zocS)|>&Sj=`dKe@QhODz{F8^l=Id4F#dYx4)z(q^HUz#>*XU<{;|OgwkQ%+a3q>*e z`(HG464g_}VPzk55k(DGdDD61TC5((gujw1>FJN!BSK-;HFbZSB1+RK+@c%WTA3|Qc5SQneyPHyu zgrzRhe&)J^>}gu{L8bjD5MiJ_n|gpa4`nq_A!_9IECtg} z9w7mF-^Ms1V^I2{T8L6}EAk`Cbn_ZE_OnS|vUBIgoNf+Zr<6}1oAFi-P6i<3NX&d% zo+t8yGxvvHoko-{V|x5R8ye4K2HLQt5&tEM*sZHIB(TTeZfeP8#LEi4*J_hPCR2)H z;%@^~W;RHPQLI9b^)`LU@omuEL3LU?)Py+BEadk7w*Vi3;TJqitw^jJNZ4YVOT4JF zmD$GHkW?h9Ufm+g4YS7R&;O0HBKEGa*tC=|td~rbibf=eug`}DeV$ct z`0u%{aJK=DDNcVxwUUrEl{b|Xr;E(!8xy<(9WbJF^ue?nu{tjJS?5PiVt?><5^?nfG$jm{+K4n$v4Q_T)G|ppLJ_)btcRnUE`%(V2=G^WQ z69ne}_1W_51tb=e&DNr{NFaT9XTb^=u?v|o5uO$#ewU8^lU`^d=0#5}eOt5<@x1m} zU$Z5N_;7akqy-y%(of&KRJW7x2pSpAu-PK)xEd36;cn<|R#{hF*t?P6dl}@OKZbYM z)&BQW9tf?zX?|sW4oUilZdl%?rZbBFmlg+^o79|X_V-k{j^kwnp7m@qy$ zM!dU|zPvxs2=6cYe4hoUNNA4frO-or;aN;`nzCUC>Ob-n1Ou|+<$M3?wf6-``nFqo zCfE^4PyQxnerh2uH7G5$(Ij>(Bdzxa<`5&oX*M{r2)|ED=7l~75K}E1DJ;3+@ke`1 zp1j)Vt#Nw???z9ABprUk-Y5-|F`voZmD^EG=ku~gxq}!xW*s@#EQ!+Bm!z7$Tt(vg z^IxCa{}PQb-I&Zt58@>yX)H;94hH!jTr2s4NaV#Heu;tW$OtdVy_dS-ucLqM*FujV zW~pjZhQog1JSl5k9sCH%uMac48p=eKMcR4Zg+yc}oEnKU2_~VR=+FDnU4s>UETe`- zA}afGGt#o^kdDI)MjR5!*Wr~cl-3(WF>O7c9tqi?LxM!$qs6U9%Na6G*k6cK+4sQxzON960$qd zcJUD}EJqzecOUjbW@uea4f%r5;7pY~w$;^T&OS&ly>2TrSL(yzsqG ze>YQ7nfUVeEY05zAOU3!515$SHu_KF{Vt}b3rBW>xx%V+(F6H@CQ%M?}zia;}x%; zCy;1+xxViCS!D3KNXKSuM`%vRe|tDQkn5LY%_hf!^vxc1)W+k`iTD$Htn~tXhr{RX z`_I7jdz+PZQwFhST<~%WVMlOL(Nd^hC4vNOlU8b+i8tqB)AZCPLhg|A7>~}`UQJO}; z{=3d$74=bK*Iv|n@R0=ZG5>Hfs4#@cpWSEM_^1mO!Hq3{6QgnI@eBWKT5Dv7FywXC zzl8PFvHNdZ=E==V6+(W8J>b7-QZc`Dky!M1O}_uW(E}nx8PZZchZ%J(qAP%uQl9%Yji9_>`ASahLlyO%oPuR_%#ee5+ul(J3^elm9ZtXWx zuIWCB>RdryzW+Br*Km|Q^;#Ivs)3{LkLc8=&rsi`-Q{|zi1?HielX>qAx2wPpDa*( zMa}5hC;=k}RF-~vF_$?C39)zA^C})9BiL$>UQ`PlL?oym<~9+35!$tKfjw|=sC6-J z+=SMi;cbh8e5iKQO6h&94tqQ22kK6H(Jp9wrrN9v0aW`9gvL%2-}L3u&{Gt|{-FC! zr!5;NZ_Oq9i`o_9RXkS|W_C>--kk2c0piav{4dS^(v52iHbjvB^`Ud~- z^4;(a!QokXsmI9jiB^p+`-Hqzk=a*2B+#V&FoA38H=@q1dOcLSj|WUOatePR6VH9; zP8H;H6Q8F|bD49T~k+eABQB*?W_{x68Hn-g{?eWWS7xNJb?Uie#ih zNmly#{Q>u!d(ZpzdOjbIdp_s=DM>f~`j;NdI2W56J#65PP5e}D@Lq1zYPCFJzm2ti z@xd7(cQA3CgdoM-jrBiozwR|ZjJ0+Dne*D7#u`mWGKKLmbl`EZZ9EtNae1WE;f=aj ztavB4g;^d8vpQdV$csXM3NeKy<4mm0+T!`aCW^T+De`TFA@X+h=t)efvv2z)Yq%lRxgM#VFUf0iAO?d--{^@l})z z2I=Z+W_{Sg4vBKY(%K%se}7(o;`;||TO`r>f&%!Euo2h5BZ~zuSb`3-m0^j&(WkZ3 zYS?-2=>-~PZE*5ZzeOam!B&#ntyKCW*sa?2<>mcf;2&b7q5P#|&&Sn<`nZ*`agzC! zutYXSQ8vb;L>Ym%;^SximnE=JYfB{eFf`4Riaf zZN&Ma@sXOI_1YO`EIX@tZ^o4c0$z9qeLLw2A^qzjHwpAud2)d5$9O#!?mUoDEm;5p zMTH345eYE789cN+atUj5#RIAqY_L;(Xje|58J!ABvbo7?FrTB8Zp8{Q;NpY8*DQ?K zX{eLI^Tz^Ioi&R{X*e-*u_f=aSP?ewTjigp$iQ~|uCJ6|hJ`T?n4CIUA<3IPSUc#8WFfTljH@|o8?HK_EV^|^)^4&Yg z6CZ_)KGmEM-^*2Wo=%|fRX8cng3?1)Si z>usz$`#PmNs|@}79j>G$j$l2nM96EqVQi-ek&TXN!K~50%$?KwFt;)3#V?l!K&;(5 z`9t<1=9E?h45d(GsS>fVWc&lxvnLHZYHi^osuz6c`K&OV@gn=zr@yiFjZn^Nls6_H zY`#1G(HTQ`P0Cj@La_LaB=v2aGQs|y%ta5~^1c1~%lmX|3*%((6%n))v4BGFcyYZT`UTXBofRR6_^2f-(x5Xy z)NXiN2I=U(wQ4$2@Bx!oO9FEQGEm{(sZcViCz#ed8(*uO0gQPvjAqXVA^WJAK9jgS zSX=5|_}m@;$r?XVx3g@y+3b#77`>U+5mof2IYWS}3E+!!5@5yXdOi!>MQwyWT+V!E> zu5c+Zn$cQx3@OHD<>_|^*5$C7-~Uu)uLK6YXL~Op6^w<#XMcp2JL5wMJ$nYjx8O$^ zCNe8GjWMBHe%X5t)F?;wd0j>r3)Y1LUov0Cl&%vDOiLqszt2YaqKY==`daax)#k=p zEz{i6WihPpXkL28lZMevc2wN=Nih1^i&HdyDrV^Y?_ znlOc$h&Xldzva|+=1>79M(T!dvWVIOc7cHy>2g#HIzu8{Gr#d;7WSc<&|yB*@Lo7Jq$!!2-iFv0pT>PG0Br zLqlQ6Io`OjylfA_qk`_Sk!x@!b{hUD>Vx2si~N}*nuz?pGJ#cD80XJxyTQK4*9<2U zvKPN&hIvbtiGCtBoLBm3rnUx=udMI54f9}LrJ4cp%3i;T>USTTe26&~3kM5wxX`bS zirRi0Fv&BlU-|bs64Q=;9;@%ek`Okd4ef30^fi&8-Ot^zc=CGcgOl;#pxBakPuC0c zN!B=mEyGvB;WD6_W|}!1yu~6TKrNrVhI58}NzmF!*{Ek_f*TG_oXSr$!Qo{0DoLdqI{1yY@-cFv-4S^Mlbgm6 zbtg4dAi)^p&Y!3aE@j1-{aP-TL3L=Sb4f|eHV(31Y6j~KP~!DF`|EfAn4ufL(diGD zzN0ey?i=tG!Av=G`k(I#(DT-d&6Y(qNN%?r)yt*@GvkV&95N>GbRAUXIDP?>E8eM1 z!BLE>lj!PrDhUyH`4!%-wPR8nQ?kv=eh5ikc^Kt$1+S`EiE!U6f%v|stcjLP;A?lq zwEj8^7L*)GcVH%wkbGUWvenhV_!@#&fU)}3uI^H#AJ+e`vu z$H{0DOTL|10~Si0IoNB&2!Sl`e2fLTFjqd4y)fz$rY<{L z#p-2ZhD}(=VapOAMjeP&*uIBlUtJ?fu4-VQvafNr#xOGTl5%QhtAg1GS72-H|L=P)dw zGFfepnuh4H78A4vV(k7<2RRBXjsu{MN@5VEuYp;xb;tRf^} zUf-Xwn8pZ9a!W4T(tC=jZ!~YQzOlwKDy0FxSre?F(Um0@ZeZc3dui6^)Uftm*OI|> zCT2Q)vZpzff$7j}Eju}mbt}WO2?f#+rZUvfeXtgb@8980?VP}R358!0M<^k(aeOqt z)d>q0U0-_}^I}OVZ81g2GjP7#xQ^ZQ7I?_V*N#5 zwi7}-m`@hDG1PP$Q^U&@W0ocNdhhEqj>bW(w3(W8wzb1Vi)+Qc4-HYpt7Pu^ zf{B_kMytD5z?4k+LX~d;-0F4}{Il{4EL^8Q-lMw#s>g%GvabYSnpf?DN=G9m+@k5R zx~YKfrD?H_B>kBCU#01$A`z1t$9}%Nya^%mJOB9O*-=jO1P6>^;^uly>Z!|^6irB%XcfU6`xjSo3P0n0 z{#%2G>I;!baookB+z?zVOxk)&crcc+!|ptCVaDO^V}T2@=>2#;-_YU(#OF{&M14Go z!O7p|o?A#_sk5Eirj!Kmo^pBN7q^YMAMDDvSo|@(uEsmG)SC6ny(^6jd0O{F%wVs(2Q)MfCqjEf{0|8NP^)ekE|$ zn7+W6ZUnX`i7ubay)g8iPQW7BU2IS>r4H!K!3wQpyuc(5`eO+nuk@OM#>Qj2Leoer z|D(4Ppi+bhewxyM+u2d(fL>_(g9{)|x@dmupaa&H9=I6j)D6Cj6~$kaq_ENB%hbXpfW|{&gOo2LsKO=(mECtbirDShL$N#L2>y*Hsv=kg5NQOXMsxDPWOUdFz{`&+A zmWQaYTy$>g*=ah6=F{!fTQkREE>88=oCR38N_K21WyQK2tedwZ2Dd(ZI1^g8O7DC>&N z^@HK3q2wpFcQHxQ@K2jhG(MP@IeqQh6AX_Npx#+)LhonyiM%gpkxPrt<=Gzp`TzY@ z8e`W5p{cDI(#bq<)BMdu?`c(x{$a82t-lY(8Z>_TGx!TrZAHBV=i@OlFD}1gpFXCF z_8Fbl*~H+^+MBrzBw+11(3igR4C7`73~y*sf#ZnS>bYwIcsJwgll7zLA+Uj;MBU5> z!!(qGNwfB2?&qAis?gV%-E18(tiFmhLmSB-u6%-6zC4hRe}XPnLFs`(%HV&+G^&CV zF>+kqDURv|#;Co0?_T&23)iLK+`J09bHd?0veK5SVN9poK~%EV5AQ@;Ko(k4+z)!`rd=Wz+_uZ?(d5Ai^%#Sp)? z;9GDNY5XF(Tmylww$DB`w*i5B@}SIAIwrFInkK1@2QQ|QQMu1|z@DSC#8s{t6^#cQ zr3pz;a7%*B{h1RGG)b<#6$u7krZ-=t{ffc6>UEM@mkY$w?2^eSt3mLfZ+E;$IwtIM zJMy9Y4#s-#zhwVb1+}?sg&gOPg4@*}{a_RM%z?s} z1#7Z$M_pNY@eU`G`OPn?82pLNZy|dF5~jq@Z(r`%<3dxF=+^<5v#_e({C=^~b?6t9ErveR}!>zjD(ar@e`~y&#MMtO6PBjD8U0woZSOo(ocf zc8W4j4r0B6^GB%_mL&UjB_vVr>Y+N z&f-JS9r?er{Ftd^cUk34E0zaL-MUx)37twuuAYDX3-hn+&fLFSiJhkY0hQ`^FzdW? zXW2;|th}}Hn0$(eaeo`_I#n02w(pXV(Bl%!2S<;T>JUu+IFJ3Z?N}}|Ht?G-0t}|~ zWFBm1WBGK*udxOKHn}{G?wy~&N9PvK4z>BA)76@?z}{CF%l2u1p)v)sthK z(7H0&{&fsa*yp34T?53Nd-t9=?8i(lfj1t%#js}ZU1~aaEn2K|lh7ER0GW(N9iqk#U&;zvAo3i$JUpHW&oK=@Jt&@ zBU>*_nqG>J4JZRkQJVx_JtqkHhXL1msNue)VfdqyJJ|5;2czmAH>|wo`6jyH5~geZ zR;|l$!Ss9NuAyaOU|%lj`>jG3$`&{xG7Z_eR|5fsZ4AwJlT@@~R zjZs=3Q=TP1gy;}|>z3t0OmTYKcjI6UmM6+a6GW}iR_J~12kmMMHkWdU?n}p9mI4y> zXWjTny7J=PG$t&#eJZ>;s}rN*Yd>}>j$rE1*%{_!ABsmvzh?1=dYJ>`^o~yDEeB&V z*E!ovZa2(&MJ{VBsg8Ang2lsNkD4}f1j9uI%+K}TaZfD8@>bQ1ztr{^eOUY_V}K^+ z|46>dgOOPBjM|iar4&4lT)uLH$cN^1jQd0^?J(nrR_{=-1?Ji7Kd@K0fJKKX-G=3U zVR6S_$Di)l|M_)TcY{B(32(pmN6cl)I{IjC5@WlySF1Jp&~?Q9QH#=hOcYut zC5o+KqHx^eJL-=Z;Pl~vYN!DE93318rl?2H4(Hh*+XKN?G{>E6wiC&$~;b8n0})Y1MsH zi&(8A`@M~Miv8CgSs0-Q%?9Za1_FdF%4XfM>BiW?c3BSk&*1N=7xUBNJG##rN%Zwy z#)!4Jx{4xRG<<7xG_QmcgH2>F`00gXE{)@b9aTf{PCp?WH_*4o@oc#w*Y)sG(#V3K zWEMDlI5p*UNEz=@$QzJY-bLo3o7!8{su*HPwOHwX5RA^IRB3$J#*{5izdwe5(ADQ| znttX56caqeo8WZ>!q=>iaYamnsqtz4q4V|NAkN*|t2P8K@84L?{#Za_8vl=yhAuSM z&2HJ55COxEpU=gYNwE039{KhI6|j1|DEmm|E5g5x-QlF~dH*)@gfnR%e6!l!qt%Z?bxr4;qn zMF_*%j!Vq?$0ITB2pw7R3fK;Iy)d(ThyEiDmrsb?0L8ga_HwVe(SGz^;lPF##FNLR zwQd9hu|)E6B-=Jx$VD9=SM|f3dlV5)B8uoF!u#aylUXEOzHH|s`T-rP*@8Gpf-z#M z^ZqzH3l=1elw9BQne>BB$B7{&=pKE!%rIlmM|Lg+L{l9_+e2d>b*H$o;?W<|<|Jnf z{PHrD{?!(C7kvyk)T4{`nyg5s_7p>6+o_dADImuG#gDBoN{}F=D;=!R2XVb}pQtH< z!2TUElFQr_lY;Kd3o1#0bCi7Vjpozn7EGhd#TNtwzi5AhaUxthT$sXi&k;Q^-u{hS zCnWPuN%b}D!@xvW(vhq>REi)juI|5$vB$2^r&I-_3(IiH$0#X`my z3qm{$wqG?jq3bW@Hzw{qNbq{_rnZHES7;N$&R?MgWuItYwjxU`h)JmCqgcnNk(AC` zvBH=|c&z+UP7VtWQRhe5&7ty*!WYg4vlx2PL%*DM5aZ+dq!uTw&_8&`q|@mm>ik>w ztKaVeQ6BdXHat;46M3hv&H?-2L3r(jE3gEf)pEzYwZ1{<)k=XyA4SL~Hb1FhF@{uu zX0az5+F(Z(eeG)CeeiZJ(VQZ42Ex6-=o*T*5R(z(`)42-oGuK0 z&%OVF6#GjE@u%gJ=_SLsRKlY zXmb8{dX8QdO!EF)sjK~pIUJXA_+5t3b9#U)cY6~hxLNYu#Hk?u1CR8X##$f{=1rUz zIWTZ#LazMlK8#3ZwsJWf3$7GPb5hN*7_zk6GtbcjVOJ}1o=JWH2a}lkAYN1SA8%Xw z<1hdg(Nkwr690i|C`Etif+^bb626<9&j*h<_2Tyr6H&Q|N$;kE0XTQB3A7Bl;cX&^ zNZPkW402lLxbA-$vcG@*;BH$5M7s`uhU=7|_qV$=@BIwq7#%=^Do@BxF(UM2=t10n z0hb zdFnZuL<7t#loNfrL5bN4r_&lY&SGJQOxeQs%V16v{!ie979@mHFlgtyqi-HrknX8A zEOfsjrx8ts3A8!K@3B;2EMwwfr<0GcB&)oXDaizr-46=P@7Q65H)-YvW;zUU|3+!U zR||nzS=9+N5lH;vDffK08X_Ytlw3a+0Sn2Qavno7Otfa^@jd2^i7Joc&ZYl?FzE{~ z+RxTwnm$GOzM9vVb^qzHGHF?ijSz6#`Dl&>TB-8BdmiEQC`l8k^Rag9Q&GjOvXsBHlxZ7xjx$){$W``)TRufv2x*Rb#QS+(q85an( zN*Z4}5DMz!# z`ESBIjeUBU{DPi!RjnAa*G~wa7~95B9!Zihr4yhX*hIkZSB{|PyXjTgos@w0v}%M>q!4@gh`bCrN7{UYzD`ClM< zjd}l^@i7ciA~pWJ_dV|Qt`e5H)WCD*CXx1a9OSMw@7zDZ@Q)xk`A{xF%Sw!aWxcxaS!offNoYyvswB+%jG{lgib7QjV|W-7~MZ?ANnI)2j2VfuTE zxv~{22=ldNa}do3qb1(i@7XbM4~uG#irvJ7{jKArgVJ#0z{7ENzteaQyzMAD@PL=PnJ{9Sp#Uk!d2)FwSy1i>X&frPdo z6O~_$Wt~}X0t4$~_iUH;c@0=S z{+hk{n>_5e=Kl&pB+NlByB(5!ZOh3Dn4vgZ(n3wiZEr6W<~zS`f``)0X8+fl5F}=r zq>!)JvG}g@D&MzS%w(_(46WgX>>bUG>oyvwHt3f@Xj=sjuZP7(`?t|#CAg0{Lk{ha zOGM`0_=LHQL3iA)HGq3T0mWlAIq+S9An&bgNEYl2wi+;mw1mw;ld(z69Tgzqj&1|z zV>I#+3PVwV<1A#x zPE1t=wLtuO%oOQ~Hn{cj^aGNcyWr!|=A^NE4DU#u`m@mY8Y0*gDH{kOsLV65Ftb>W zNfwhLjpou2zig(vqIv>+tbIF9(Ii6ZpO}Ga5q2n1sLK!tjYCDIundi)F>ue@SJ&tl z4`EsHHN4SBz;W61<@pjJOn%*c?N{zG$bB;%mLEL}w;taw2z}xL%1!SimuEWAs>k$* z>a759$s0eVPfvrzu9rVVDG!39X!|19&BH*Lmk4pqvw$?=exk9X6l74&Z;%bO@6E%? z?S<4C486pzbgW|#tw@h+dz=V|DE}Jq%VMbz$S}5Vv|R&C|F-t#*fC;|@$(udnxCj% zTu2ssuxZf=x!((O<`(Q*FUxwmmskJ;@P@2T}X7ApX>Q- z1<_!vM?LC~zF%`>c}>578$)=%$$%tiB#Jw1{Oa1vLB~sZ7x(guyz+MS!9x%h^nA=` zPzj@LA8}+-u7O77iV!;VLjJ$cUFNwFkd(l9U!PnKY-qLOt*(}VUog#O4k>ZecR2Uz zR)HwEDSiJsa;F`mO9=IU-4n4SL4lFJX$^v04)U!~kAmAu_JNlMPa&T1kN%7Q7Qml8 zPIIw-0i24j7f3cIK%4s`n9ev(fTXqj^=eJ-WcRCCSJFAUHn{ct90_g+ro@zdaT9JbY;wxBJ0o zE8ufSM;#CrV%q!W4uiP#y_tV(v)~^(()XvI4uW$&=Q?{If#};_GCCux7$WdI?Oa47 zxXS(AUe8s4z>1D}sT*V%plY9d_}e!Ow+;ArVy6(CT+Ko%)B7;;j0ofL6gNm+``X7# zM~!CTQ)?6&#h5g}9j<6j3UOxMdEd?IAEeHEl$7T0h7&>P9^HEP^(!q zzLV=a7;s)LWw`E%w=Q0fea&_g(~I{90hXSW-9=En?k>9DDh2;A7R%KV7IWN5ij>l!4Lj{eBEI zC_u6~_eieqB6xESeAlqjfHX$gan?U>Q1s>S)`5XbkU~|Va6UH;Qqs6zc>Q+??0@*0 z&xxHuf{ORax?}3#xO2F6ORE7~oH&~+)RG`bzcMh=NgWBz(+n123Rog!yYVf86hdA+ zf7kd%4b3CXzPugY55AO3dNc!qkiy;6GZ?W5dqa1|z*(E_Kgu)(hzKZo#G&?jkKYbnG?FLB;{W=e^0_mC|F^b@(Ih^kQ#tv` zV)iCp)3yIb>NA4kEz|K6bL%<&0Xk5sbZL84VN`lHYhNS^qha$ z1(E81qi0$3(6H5_a*W3tlWRMS8MgQ!c!yfdV15VPOG5t(yST^MqO9`$=T|Ys0m$yD z@k89t^o$ZC4TyXC%;gig)#)r8Js68EXGu+OpPF`J&zh* z+G&4X0ov2U4_cz7F(>+5UAx2vFw&0{F8$q`!yO=Y2f4x(;+pfOWG7T9vhDPK{RUy{ zKJ5H{Pa!>GS@9S}EW~V|Y2N0%>YSHvL*h}>fcqM6!Mmye)0+4oqIuaca5@TN1D4$< z%pbrV&1A=ga7!RS!&@FhHVAh~;ri5k6O5()i;u0}^Vjit`Pn942p>CmPA)49IAV|e zk$+GKg|CmeS-dU*Vtuqqnvgyua{C{6n&$ygv42E73dBJ{KgR7}LL?C0Y#a=Hw27G$ zt^8d@cd_99=j~%tJecLM%ChqCB81yH96q01gP99Ko6|?zvHSdA&G+T0*qubr=DNv@ zse2$gnn4bP^AY}*&z@o8;+Fd_rV%g|%+#O}jK;jd{Hy?@M?er{iEb*R#^i;4{fE~+ zVj-Dj_U!5s1~gA{)tAI$oG?5+8Ey~6rof%?3@J?f7Gy2Yx({o}C=6*AeXxem$ydF< z9|ErZPFPnf$2^_&bSAo|5b&IJ)PP+I<4CX3rHgc6$#UOV)!rOc->Ehvrd-9?+iz3^ z8;vpVn?%v;wmEd?`1f6+_ahdwUkFSp7Qk}X#~;1~xL{>NR^&(#B__8rQ4%HiA*6zC zjsD|QFM7}a0BS}?#& zKXP48a#iqB^ByCAhgfPM^Zi7y43_3ORCI`$VeXUPWcoH zc-|&#;`0QCzUX9sL5RVSSc9|HSw&dD$MC+h_YXLT@p3#aQAX_x9GvG?2Qln;x^iAq zE>_*5@}YcdfWg;N($1~;VaBDfJ36|bgc)nrq^4K=wb0a_-a)=n1suz-%9mI*V!rUf zpni=H;4=N&^j%aq#0Qcx$R-G53dhIlH>Y!vAeaBr@hJtwsaTkpy!6GIG^YDWadcSA zYmi8_@f8a>S<}^t&%mEEiKD196T>dD7PJQL!}4sJiC9_3m@hM33+{e1wyo{-0(T^=Zd7(K%aj~E@Q>dd_F)8%f!QAOTh*9w$cHpIbO92UNs~k) z_jpa2w4zL+5JFmN_8kc7hd{Fa`#z^M(akAMi2PP7mc*A?s(3VGr1&4&S^IMsBQ5*x zj;|rOBu20D-F}R@*{|2xi@LG)R;J-{QW_Skh>BjbvczTkfDFD^w+tlSVw7b@^yA_o?> zEEGs|T7rA#`W%g}gl4azC0Q`=xjUV8Q2?U&$TN&37 z#Bx7kGK5uP4t@2*p9^`Ab3)18+!f2RNezklmZ-BG}Z<@eU-7rL<^O-r2J z}hJhy`_%TU) z@P0S++3c}1UKPdMkf2vok*~nBsGdslybx$)^B2euj)FhKOiOC-E{25g&2Nd1VS=nY zqpjE{2s?53)c9FM`}l6+$fgu#1k5t~5g%i`j!aS~Y=QeCzmmZre=NCcEXo^n8bfa^ ztq5ffV&1CR>scBXaEv(99cR{o_NP1DODIoZvV*9TPWVNPsOlN^DoVf5Xe&(qtFFsp`^@$V&n zETi?ZYR})xp$Z%NFzf{Phjc%NY_>7zitd%KC-y^pXIR@ll_iXO^p#hsk_W?PPQBfq zxPxU5v3C-gr!h8sAQ#0;u`r%H$^3ac#8frKFiieN|C$G%UikH3+()kjvm$G(d%`fl z>3#>o+3aOnpHF}l^E(J`*pFv=o{rR(J7TJZ{r%%vA|R~ykJw*93g&sU8wZ3=fUku> z8#BWwcy%&xuhbvFdMbvRbJd@*RPC6q{M;x+@*T@f|4ae5PI9Pzt$Kn*317{axetQF zFYbY#;{)i@yLe5?ni6v|00q7rI(f5H?*-0Y1I6ihhZP~M;338Vt{0TH*$W! z9I02rOIA$i5^86Cw)iE6A0YomN_7CUr}9_gS;*1z$C+R|CweU8aahfz656Z?jBO!BdM(#gcOXbL4JJQEa6`sH=im^>HCE3Ap4Z z$DWV*UFWmk`lw@S+pp)7EiB-s;%A&D`3l%CYn`A_yMm1tmUXkIM=`ggEq0hT3Zs)I z6nbe8t=K;ePwHA>SajQ+MIHtqzR`dBu(AcC6#9sy7rZc-i6O1~zmMoVUX|zRB8Jsv zv8|`pAAw=)6&E>aTFj>((7P-1YA%6t6JHam1Lq529>D&B)e0Lp3at8$y+5rVB3iK=fDY$PNHqg zuU0Tki>=;9CIGbi>PSD&3u1t4q6!)92IL9nW}Un*4647CkIcmoA@q!z{WhBcHns-X zzW%l!{Ev=#W;7;)7pq%{=f7%9uQERCuFnO!BL=c%pEUNk;#8iQ=YJ3=r;`>Tf}r6F z`mFIMK}VlUoWw{BLN+8jJ~ozONo*3w!f{tHeSFUTpkMmLl;-Y*SKhrRA<8U6ta^?zio zA_JIm+@dmqhX{_du<|cx3~kpAq>XNiVwB6teKF#>=&1ETj<#bOU9bPVWJ;{Y#DfkV zU-Jqv>0J%!TdzZ)JJ&C4{eS~QW4}cmdMu6so5BuKwH=s5_z||vWeaz7uZDbeDnv8A zo=Zk|m{BMGviY`l9r{-7pQvkCK|Sk+?)WTK^rsv;^L;fD>^t}bzn1i2o|`JkeRnpn z?}@xx)=L0?<>75J)tc7Da& zwC8^|ug0E8pns21<6yWV*m|py8kIf8+-4#AE@@4y`Rgnc6p?{RPPb=UFW&?w{lEI` zH`g$7-$gw9Py;gvZA7gqLyVKYcq(5{0754^%iV6|V&!#nGHb`ZybeFvZ0qs@Ys5=3 z55C^>+|7g$v2@uz?@KuG_Rw=|Sh-3OW?qPK_u8JbP9^X0!p+F9Fo;%Bp`5%Cj##H3 zp|W&i8>{BRBX)`eu()Yw>5i%3UeDd$H~sxNW{i(S8t{rhWL7vO?TjO)34fy1+y04h z9v7-9`)^|YWYUFg?GsqT=&&og6f6fDa1G7RBxS6nl=b4kaUoz%hpcwd;;e}~e!&@G#reLXI6ulo; z5f)#2^-ApCBF4QxJRlp&4JyTwLwRKXzej}D;he<@2yimJL{{2?0pAa@w(p{%`L;mMDAL&kF^heAL&FEYBq`4^_nm7L6JF2Zo;y!^z)KbUJK*?XL#2D5x` zKlu6od!CrL9vW?`W5#s%R-4gHeAw!5(qx$daaWFTdL2l+e$4n-@8Fs81~E*_6U{0Kx7*{t5>CU+s~B$2tL!|ZkGh|K9$|Pz zj|mG&MC#f^4AqE_^Kj;;GC zVh&VTg7uMSWOGZ}5dL}A%(l}J^FBP1(-Y_1<5!pJ$9n9L!p8M7^5T976m}ok*_Fez z7Y_#sWGk5Wvp1tpOa~OVDSVTkoWXYa1RH+R|MvQPc_A%|8N0|OObf-w!64);W5>jA zOuJ2+@itm<+_*9bj%hP>l7pb~zlMB++O4VbRqtb?hY5T5EmWhYzja)4HyI#adnE z%`stZOc%S&b6zkMblHOy6bWxJ+dHr1y=etzf5eBg3DNktOyEffu@vmcoOW$v$03FL z8R;F0L)i7Z`I(H1KW3TvRZkd{V$rbYva^y7cFmsM{UiJebK|eFcb}cde41+Rj~-K) zOegd!G1vpsO5d_L=gUHL&c);nxj~HcJ+s++ND>p<&c{jIo5nIG-pPqh8;IaMb&FKa z8;fZE@>U73BQCBqhAGKlUi5Toyh8*SoTSuz_Ubk`YgTDi=na7X!u{we2Vo?thAgs` ztpj1tPV^EB!AtD8fv$%igrsHtJtw^ZalD*;a*D?>Eucz0@&-j_4d*qa zWXXUV^coky6c8>q*T$|cgR{{%wRo2u=K4udZ+a$zY{r3ymc@DCO!qncVvi}L+~Dpl z=k&)oe;7*=;RAn%i~tFOB|3?R z9cV2nPmW-rMpME!t}*m%{1_2(rx{)CJVV!iXJF7rGwtHZ2+Yax|K`J~3;6=;|G4Zo z;pP#;tisI-aQg9ji1p_#czs~E5PZ3UHFqqVonjc#u<>U7Yd+$9Td-K?vhsWM~#U+HIB9W}jkd?^D=3 zdi`*p7_kUH3@x%f%-s2MiwQigeryyy_yyr%1h?WI@FG|FM$T|1dt|yIbWcFW9a0lI z)^QX1DDmyCEo((FlKvZ@rsT>2u?*6kc%N**2X(46asEc3{rEB2wHOp3`E6ueVH}Lg zgK)NKa>(r7$Vw;w5g3Gh2s-@~1F?c{blE~5fZN)txsrr7qzdn|xoOaV_rJLc%>yYY zO3J#r(EJ4X{^i^djJ$}1xo)d@O5R7d^Ga3p5{ckb7&qXoKMl53bh@^OeJJEtBHoxI z8B9BZR)klXATEU9iz@9K6ekpO*m{`~aJnS*6MXj|eml7$B18fF#g3E=$v%UsVD5*q zdmm9TrRb9pz8jGE+DG#%%`Yf>D)fTdbQc^aTAxH-%s`kqJ91ze+))j^x*zO*r*a6)*fQqJX!HTI)Wp!SY7S~&o$r?Zq(w5{H>8L% z%0QmcC%Y!P8;l7Et!#8$q3&!%jjCcc(rA!7RQX{8{xuh(`<;`~i+cwaXJyrqasKGF zTQuXy_G4b>l`STOy?MP!PhrZ^A{iVnukuq{5BmA-%+6HM{{b6-@BS@nE zRjTPu3vq5WyiuJk5cIyE=8KULxD6Hde^(*}pS!vJp(S*X8+o^~wo(X+kLE7%iBf~d z&9VCayjn;sFw!kfH-@wwEz4-`SqS#FTX-GO52Xh!UeWJJkZsnTEEY)*h~Ws$qCer2 z;$`zE-Me;>`_`AnH1rdg+;h0_{`n86+8x_i7f6Pbv_X%JMRsIY*20=Gv;e7*9O7gz zbC935)W?YP0f4`y36BWYA@E=a&s)R*NmgRVOXe$3`cHr4eD5(d2LB0vpCJXf!3hP6 znp4Qd{M9M4OH+_QxGs8SZvgP5*Ekm*1GDmW;evN@me6=*me!Dr0XbH^Uw&|53*zF$8>=Vz zAV2cdUSvE4Wckpv$PhaLo{F&HP}v?b$7L7z371Z|pU&q&`Blg$OC#q09RY5;ef8sBx^&n!la{S&MDfcBz?A>HFl)SleePn_Vrtk`xct7Zab%`)feVHPP04x*`yF zlX>RqtP7OB(5_qT@ijmQ)C|b{&oF{05~I)qyuv>)|mQ#j)`lZ4@4pmgtc) z1c^P<)2|H9LOIWG=f)KgsI=A?j~0CiMQR>rKfIy^Oh@Rawad?-kw?%co39%R9=yNs z@YWnMENPjjInxUjzD8ng@%7MfxYWc=U5tWm|MSFBl!6UdjW-buK!L`l%Q)!(ROS&@ zH;=lbP^(Ltne;p;oKnk@`Mfn0W~Md~Z4N_%K*ZYRz8a_qmlm5Fj7KJ0j)8FzM}Sk} zqA5}-gE+Q%mG3+X2qQy#ydTU(M@pJ;jQj{IcXqF@U zpG8;hJF7s|;?{p(&#^(#`ST273>{Eng3;xQcm&BCH=_D@J0XT3^L%?=8U%CnmL9-i$qEe9kiwXed3A{%3Oe%t8p=jOdz8u-KP;C42Igy&cB5se-J!3dE$FaPwR0-A0Yejp#6wsG32*#i>nELfrh)iRu;oJXqV5- z^zlF8RZ4H1K6?Pf(C)CXwDv=D4M|y!OFd+Dv+3NK&IAy3q)eY_gi;1-YD&r|)R2m=Q%@snpG&u7!q<%;KJ!7!)M%pn+d+32I%^e@Yyc zBO}(v7jXI$iVZpYWr#WF#QP>c=XB0Poq1$)bFL!b?|l;>2)qhSv27o}GrfmeaTo9N zYfU59>IxLrm%5l%OGD+Sh2SCz7HEpheLk|01_jl=w3o(TLBrgCjd43Ikdt$6 z8LQ$6^?jQ6Ueo@A4r0OJ^R2`PEA`5M=c5h;N?$mA=)wWzo6nKTk_EiUzwzr*mp{Z+ z3ClCy$%a~m9n`=u4psaWI-kCWL2Gv$g}YdOWGqpAel0>UO{0o!%w&j%24`&-~e6wGz2TGYVmixL70yE3@1hm z3iL9MEM|X%LS)V+w@`V3zXoB@Pl$xD?dnT?`#&JivYI04j5Z4TdVK$@XE^e`+SrFJ zc@8n71~PG%X;GTlz3UHey8uRLx+(BZFLF}pS0I1hkMLsRSwlpupqFfT=e2$XSPV3F zb~V<3-{ol)t04&#Ut2N_K~&%_$a^^RSQ#R)S6}Mevmia!`32qaVzA>{^5?S6L^j0K z94QLP2xlLpd3LW4Y4(eD>fH)Pz8BOd_b0v}3<*nhNJ|q6cJuf^AUg*!1J82DScg$y z5XqAfwmaZ3YHGT$(S^cIdBn|Q{~{-E+7Sw(i;$>cFWz_j0HQg^-txMZKrDMuVr&f? z)YIFSzNq~N!EbPuWRW`%b*y}`OJfaUpB{$pMG8aS@+&fhM?z4pA=Ae`D+i%p2LISN zJ42{QzWGNVYY4&Xpu^Uipgga%C+#Bw`Njnv>Ptc3FI5oE$4my*{QaNj4;WFDx1?Q| z8367zJ?g%;3K3En`Wb~=kh2_1wC}Y8InP@D<(QeEpnN@{tTq9NbsR1e?U#dM%1q){ zBW%blUG73vm~LpYad!%eMY~hUYE#Ym+IuK@2+2)<1iuoZj3-wYAW<>K zinXE)nU6dY$j=x@jGKkLCOj=DUWG;Nv_mv9O-)v47$gCA`@#7ZgJ^{LXE41b{vKke zbtrkATOet)I1%w!Livv#uV%U#2x(>6FT5QJaS46@^?W}-#zvjl6}m~FI+%0o;hx9| zM`g#(km4b!N0$6fMFZqR#k^v80z??8W;dl7gJXU|u>Pte1nA#;nV|RsV&AhfkSzcI zegH{3M@~nSpsNv}lp+GwH48!4$YYW3ipB< zKWx1AFqIJS?~QZl4Dxt4)E9_)Vm zG|`JKYa<`$GDQ{@^TMnH)8oUZ!34@BWG8Z=?g00+#)tRDuTiEOW3cD4~2QV?g{Q<;Q( z+yKLXu{LBLk?#fuu|r1JUz30JV<`CE*_OjN3dfY-g3}>1(-GO@_1W46!cf>gMn@(a!P6E85A)G>e5A@ zwZI0bA1C|A%9Vo5*=|HJPpp7$)SCPCm2rr9aqCiyB|oJ3=Q;;(nj)hJ5wceyw2&u8 z|EVr69pZ|v5&fq%37JYJaUpk{AajbHPu1}u_$fIXCFVUuG5)Kz6m9W7p<)}BMEBI|cVmu);Qx6RTrkh2JU=oaPk(VEaqT0>jZm$4_>LL!Ihbad zN0PyF7P@PS0mX;cJ!DhgfRyTyxflB`$ouhQ?)Y^Fs7kgfbzPAKJ!bBJ!O%B=J$?Ip zHH#{!=08b`t^Ey(TnabO*1iOsiwg_2P!D9KMzdCBML=8=bG+fcIYbI>BPj%ubt|t|1A-oEXmv)~jH7|f$a#n;N_Y+9bUtv1P>V^=V z8nLhCScoWA9^vF8MwVZg{(92KA?rBmI~0B@5cnZu_MOid;E7PD{frCpMLbxVaem|& zHYC7W>V>jwiM<*vtRO0ir{nuQ11OT$dBm+m191as;j7m>QRKtt*az1-AhUW+FIlDs znS1@s`hd@cj98of&`3=bNx0K9L`j2!&)ZH^i41^8hleKRWH&f*C{R^N%mO~FU!mbK zIpn^Onf017hsQ_!&q-dqhLop&8wbAsK|=9G$RfKKg%n)H-t?wK(P_V}J>+DdO#K6M z0}~-6@OU+u6D&a~-=#ZIeIcOl`ElYh`wDVrHPZ7}dk${wWNQ(MMaZnjzpLBQ07|Z^ z&S`uIKz{5i*n&0#6zcy9andS7u+{7%{fAYM{D8!IP=OGF;;($3JtVTopvaQ<7g`5b2#D08$T1T4?^xMpMDGBaTH*xJK!=^2Ep^gB5$R~ zA;;hr-L*GzQ1iW2LOwkJ@J$9%XC8fmCpq&#;5rzhvZ7rn0Kb8v*xfmxeS zq5!C>3zX*h_yOvlRQ=|<5P7nmy(qt<1j5|K3SOjVLZLZ7)LMWS8NF>J3kvp!f>G>v za|8z@u0DCgarhZU%SPMOE4=}=Xu4ZVtyCyfONv;9^Z>HYnnb<0>H&sU(eq~sT0!`* zU7=2z5BXnEC0C3q1*e+4ul(2!3~+7`dN*v zbV#@KmF@H~fgG+v&zJYDQDBp@^N-W5DAP$wVV$l7T^pfrt95$@!RP)&TluDguHby& z-9auC(_$?29rpn;7@hz2eb_{b+A0*iTV&vG9HR1@NEgz6kJH{E(nbM9Rl@k7yMQY- z=89-{LYj19@g=%KkhuA(@A%9rayuN*PsERcbtcUzHM?5y?i|!|Z~Y7&lA6vWqlSR- zb)N4(Z3}ixF*!$_z?9!e1*ycr0)WU$W zk3cU~N+Gf_YGNQ9ZbmxSXqr~}YN3PLvzTPF!3)vP;!Rd z%;_W-N_&2kjLS+uedcbq^{-oydBJk4BHjc!muCtjyM9D*y@bTyQrV4!0Ky#6xlpZ0$U^Wekzb8GHU?(Ot_Y3ig;CQ8OH2WPvsq|?eD2|| zInmruYBj!dSzI5gM)s~f?c|4q4{%oKWi-_AF9z6>eFfdY&0gIg05EK0PY+K5JjGv< z!@nP)`Q^pL8;^aV>>Hb){A3Tj`P9Ez+P473fdnhpMil^eyCf*&8#zE*{*lz?b*S&T z&Z};UhcfGDPw96bLdn`B#~)S&c(Z8V`*r3L!oGOlBBgd4N<~g7SVj;+%SBp~QezKj zF+csw2A_y*4pN!M_8y~PevAj|tw%xRb{B?X?jzm5%HA~B_`t@RwU_(I1%l00vr0%z zA^AW5jte){AWBbmRc(a_ViJ9ZIV__g@Yj&O#JV9;>RN1CbZH00or{%CPBX~&`O8@p z9uHyH{f;Bq7m;_(tzZv%V~A5opxvn0fefi%*2T{aAUUR}DdA5Hm@n-bJ#&vniD|Y0 zx8;c;+?b!-d4mn?YpC3R@W+8)3vS}igfv7qG0X?18$psrg{B)*FY;DjCBorKklr_$ z9UloLl%_Z1DX&8fSO;}7!Bh;2%>A$7eZ>o8xhpnnK6f4^at4!AZ`2@j?3by2dS7tn zc3q%wF+=h#+LQaCd*F1+@>;t5ln}6#`#tKlvc!PXr*BMY;oz$A$um+v>w)1_L z#*xcc@`9@$z9UD4H(7dOyeM!cXR|>Y53hfnu_oQuhL|)rf&a+y5M=qJk9Uk4xffDI z_V_qMUVg2ri-sg5x6i1%7|cV-@9qo@$#lRCaD@!Np@+O%Vo>{)JEu{U14W01 zQC>YNLUvP^5({-Z0Ds#{EmnRDS`2>pgvqXf*@&yTWXf5nX1n@}_rEXTAeJyu(HMcW zgD-FH%1lC~ZBzw|ycA0K+o*rz{%xpl*Rt^HB?lAh`qC$pdPp`wr2UjRfU7oLt;aJw*XeG^mTOx}`9clps^vOmr7@5|VGzLamjuckr-bBY z#UPuwRy+0K98@L}t!rf-LTbB+cAIP_R9&_6xMUN6T+2e9wvXI~V%!*(GsYJ1aes=& zMdhJ^Ue7ZhGYIzou^1f+20<9^Ps7xeLcl-aY+BcfhYD?`SG>Znp}iD_n&i+fw!Ku$XYABXoGZ(r7hb#Q7HP4 zV>EW~4hpk$TE&l;Lc@XuWALAJXsmoxEhH=%*ah(aBVbA4Jy?H&Dk<*!LxGCk@Y76zYqLIWC!mcr8Ld@Q~OiM zdG{5MqalVgtMsJtA9~1+s=c~u@h@P%|A#-lum@Q(ou;Gohmif(m8Mf}8QFCc-$(fGaz}?I!p!@W26Om>Z?SX$Dnk4{av+ehbT#@R)~03n*~xvqK)q zv>hXvtSE}Wz|$l~7ZNotsD1R~gTVjzuZy$afylnWm6z^|D6sZ0O)x+aatM1(71~#8YftuRSN1pA0-zRmJZ~J^G2Cuw(I{yVET$(TFP9TP2G<=q+ z#RLlXsV(k|Iw1QqM{lv*K2Ur%<%{yj15hY+x0B4A0bK?GlZ6xh31&AlQK~$H9FmHI zYVw%CE=PRo`LHf-w@5@6n;G#&={wVzjnNELI4CL5>=rfcnF-?!a zPaI#9^zJRB2lusn7~w#{&INGeKSi(&iKeG*DF%$;%oW3cJ>)qM=cM$?3-ZUlHeb+T zLiQZp%wAn{kfRXZlfiF}Y*hm5*~>{#_{uFOzF%f2VsP&n=`(&X>kfDSEqNDmG~Qhk zG+%(Cb_ve;Q^jC)+DJbzT?CA-i(Io%(nG-!K7ok^t03%hZZoh`l~zX~%jI z!dMiUmV~~8eU)~<{H6~0=Zy(4N+u#@(uL#wOb75Vyje<=VGH4Dxkl^GTgb0=b)sRN z0^+f$Ytnz+Ai}$$-^acZA_cGXIgT6v4*OwwvY!Q6Byvj=eL=uKT3YdzRvsh>jju|+ z4Ml$KQ$nKWG(o;A7Tf#tIdaI!?RWi_1$Jt3EH`>Rk(XcpG5_5mWZ}Hr>inA=Fne;p zw5_JWk)E@v)5RVNuh;b4zBmQA%?IE2NBNPAUC&%`*A4WdV`g1g`4*%zQ0q6+%^}l2 zWV7xrk`VQ`HzSqV2mA!A1M5PYAl;{DFqyjs1$*(=D90Lstt;L2f7m~Od20DyqiqR! z&YtgNE@_1Pk(FYzPk3aPd8IHRG8%H8sY%H7h$CCQ@^XeVu_%0lA(@8aEsFU1pj~yI z3d}N(MeQAuAxCv1$zq-sie8g=#_*7W<+8xEjeh_b{!1jiLR^S~qp6IRZ*#-*`bd3= zc_Szv;o-XBO^mDyYSx%zNs#kT|0vGSg5dCaE5M(d3;AOFO9!8@A%D%Vt+ik*#NDafQi#oC)Jf7x(I>ATe8nzW!yf_1~PBZ}=m+Qf^U&gd$w-r*(F;x3oen!s8 zF>k149TE4qxb1f;b_k=@G7ejK4EDH-H4Goz!9UI9^ZMaOq%3}c{w{?+cyPwY-kN_8 z;aJ9nku_Q5*Zk{F87W#0A0(RoOfNT^_l|BV7yF1Bomtpn9He7q70G{(pAd8$yNbTZ{jufj;Fvk=FIl44Gr?62;U%* zBZZJ(MQpD3dXbZ5;HCI}uC~R5$M;C&UxU49$MazA0f^gpo=t5)0AU>^*tyaWWHl4| zcRyzW**~nlY_b*(3cgIOF^Z#r(~jbPQOXEv9ak0_wn)J*E%2>RR2GWzTWi_({)cQ^ zt~|Rov~=>FxlmFm-2^wL%a59U6Hv_CxnKTXb%1UD!5qF5ivnNW@G5rvg)-!)V#3!Q zkezk0tf)Z;WYxM^6yGj`^fT>?#g^9)NB<(9lG`X?e&jsrS$K#r&zz2hj7!0nl!S`D zbQJkbin@_L;|3$qZ?wZ4rpWQYH_58i5c~@=yd4Xjk;?^qlK2^4%ug($y7htE@pB+r*BY6VJ+BIQ6@MH0;^rx~y7>)T-Qx{Vd zbZ#fhv-=z**AE4#m%T#{?Tz(~*)>QDn^N%&dk%Q6{_#?(^aBU<#o%-+CvskJVF{uu zgwolDe}x}bkXNOZ)Z2<=NRE1bEqmJ-a;aa(%>R4_MrSVJG)&i#s*(KuUzSefsim{% zxOpB$gl|3av%LZSZ><;I;0p3g{de~}yC1?TM!8>MR0F$bl#!=eG!UjB^f8+`Ex1%O zJ|a=!MiDYoBaKX-!G}RgrTf7y!mPH*rY5=~mw`7~QO6I!LF9~3;(-AK)p(jn8do5P zz1N*f?`|Qd%Tv~W{)HeX&C!dJ6C23E*46t=-7ScHc0GK~ejf!rp5^r1BS0ZCj08rv z_dzl{V6_@U4}l7}%JRz#5JE6_-Lm5oIAYf|OL)G3fA>_ye=V|**ti&%7kP*>MY6jHV|jrpL-8|YeGY$QPvipG@2Pvr#a}_#PITDXI~u68zO!N3 zG!Jo{nXA_o){x!WP^ylOKXM@9Wc#c0=j1(euxVQkK#T$>m7`bY$#XB~h7N3lb;rD! zVNE;aZxNr`wZ$OI8CHI8*(Qi8yDPLZPmBUzGfOC@{ep10)5#9=07dI7mA|P)pm51V zKhRqPQu}1iyx*#Wl9mQpO#Uhameh9GDS3dMlwFWj*(bnmmu^l5*8%<(?UlK@GstAl z&37WF8s&=9P)fb(2kh@ulPr4c-a)?R#7{n&5+Xg7@2TpfizpU_jY>%} zA?#zxF)G(iNli$S*_EN+v-uB7rpnTYGnt7wtiv~DwhLeRbsu(_jTaKmN&QDeF(n4 zRKKrye?bw38VsRHp~x49tlQ^oQ10*+*X;IP6nndq^l@DZioJV}R{rKXc>F6%qn4XM z(Z$c$IfkW?>mcnwr(5+2KhrkJ3Oq(dd`KYf2Q@f8m*!x6+JI6Ur58g?u0rBWW3f=& zK7=&Neoe`K4~bSnS7+3Vp;TZy{PrzssQarh>NOyRf;Bi-;<@ia_>0>shRO>NV=zFs zCng zqfsZfDe#c)?ehq%h7u7K!=Z1S$Vo{!f&5-K_^aN1X&Il1!sG6yncba1CMx+KpK^qy&y1@3q#7Ky9;YjY0;vOcyISt|y60+o*Uf^P8g zzH))yqkoWeE>J~_mI>?^98amP(Lt9*4{^NH{E3&{lnJ+40_QPlfgA6oPWUOr@ha&E zsI1sb&+HnaK%es-5!{x@#q(5&_TVPMT%)Wt>Lv#)YvSUJe+g7Mx;2^0azfE6W9aL{ zQ^>Eunc45W6~w;TVB7>sC|quGTd5O7ws8b=3uzZ1nr@A{e%uQZE>kk+6Y4?AIv3Z+ zU(+b~n~&Xs*cNzH{TKS)I2;9B=_%Mot)M&A`;Xbh0WvtgjZ$}}As5E%)xC525O!3< zNFDtPg@s(_5lT-0Pj1=^c4runi-2%L?8USCLQtrC9F-2f$W75?_`24Y+E08D2&)Ja{>(gI&lT&7JM-dI5$Z&!}a# zmXJF$m257rF66E+)qFWO4aJ7pRhTU`6iQDV?OjfY9^I^9$P*=kL5JL=WJ7wkCy}exgVf%UA0p2=X28*71D~heUIC zwygFf2utOC(R`*Ea!NjwJZsm7;*X-ib8`I1?Qx_+fs-I)J8exd+TbBu#Z=WPn-~Qw z!EVA8JS0iusEB{lp&%Ev>w9E!O}?j)i+K7yf&nsYX(D%L96{@o z;kRi&Pe|cCP%Bz`2t_Fh`&|>{kn#AIbYiI%MBq3l6r|FTJ=^2N2V7K;QnIavmHdZ7 zQi+BMu8%_~J8h4L*$h;gRuk9k=Aop3fU6w;zCraK+Ml!$0{@|1Tc%IKQ1H^cG*k`YN-T;HRH8Ue6fmL6wizFS9QBIL)w&=r#SR#pTvAK zixP$Kj+{|z3xn8+C>6g=c4Tw8&Du)C1=(A&=NyF_Kv+-g!@nUC2(w=!$eXnZIEV2( z7Dgc`8DiOPyqgL6etc~4M|CKqR7&H^VDgDaIKJIH$A;{?#fM}>exfRI`eP9IHOL=7dmDseY;oNsSE`V$ z0H!O|JRV#eO+(Ix$v{K>gP&2Z^5EAdKF6kQ3qc0*9!EwNka+EwWE1-tGU^W+m7fM6 zKa12jvvVp?TmEsvQRo~b`L!Pe2vQ;pR;}cjcnb>7<7aA_D*?>c<=E5bypXbDX|159 z?Fm0c{>-APgz)LyPt4+SCp<3BFA~%W;pbC-)T2ZcpccI@w|NJd{rA?9OY$m|(XLWx z=bL~yO^<>#aS*sK{nnC`OM|$n-%VRfc*vhuap6{UMt-v*mPFsi5Ubm_A9>{`{cL_` zn|SXnU_&kWutl#RWo4|{DCrgy)CCOnB?%&5BKh~Wje`(DH_=5Zqql!kvFm@VZyoo%{Wdwom_HqaJ7!lOY+xfhi&w{FF5&|o8>rfjKq-g*8 zGsI;Y+zD#<4hfl0~Esft~3sJ3u<`POFz*iK*o=}|Jn%@!06~Sy}a5Or2IGXzR{5r zJbCc>5eF?$;c{Q2X!|0H$tiv?z5EH%9Y-(uJX3_&>S42Y1%41uY(6H(@d(l>6S&d3 z9pG!?Emil8z^pgWQ=W7S@+X+mJNcr(CGg*A4N5KuKv^3x%hnJzbp7EXBMy?3jg>1O za)R&Vxe)?PDiqzgL4WoSBV_mUybYz>1}tvFibq==N(_dEyolK$WA6q3RhEyCC8GNi z>#T#^bz?KX8%#nnCzsGW*&2vtEbC$IqXFNS?Ts({{(@va>x1|kL{R6EgZbA5fXiEJ z-W%8jm(TP@3Or{~n1}>cY&se_;OCeoOj=NsaFwNP<~q1+O82%h;{hZ6tm2yBb0~<# zg&90~3ijHz8Ctk3C|)-%%_XFQ=)104@wXnMsK-|KHYD^Qa8JJd`?&yQI{o|8l}p_a zPV8dCx{wbk{&w{5aBj%v)K(GSN&w&xd-}nNch*xyUrQOf1%*>wAM|E$fM3Wilc10S zTl?#Ep(|=oIr-1%QXv_n4~F?)bufhFW9k`>6;ovYE3NB+NHP@bwRn8nnuB)YQ(OET z`cO@sbXA{h9dx<=JGh&7k~^z`mw%<~K+!7^v9K?jQ1^aVVb3a~TDwc$SczdHQqO)1**siZ{A3GXd4+KI3N9jL32#(NrN61F5mv z=>*=tp=OQ_A1{XhS8+Jhym1i{J!Ko;N81Blolq{hQx_cQwS?TIB#^&(4T+xUc}SGu zQj%WFg8XnR4B_Qzg!Qap^)VlU*b8wkxcjq^LKVWU-~S5Ie{_xs)a*mlnD5APFdr0T zG4cJoC;};6_d|Ec+##7qY{0{G3c_0Vy7;xuLDpo{rAmPX!0+8)=(34`JSpYy)qnhu zphMlu5J!*f#)tK;hAl!vCI!DzBRk-DvR(>g7ozx>o438S+)>zZ1_zS(0!_D8#lXZk(&<~DzXEV;xHlYZ!Sf)z$pb|MMzP(iYZw|S#{TEO0Wgo>z%Ia)js~~Hc zZta^S9SW>&3f_1rh0+ptZ_Q~5A$!psQ9bQ8h0DX*Vy2;Hp# zGx~LRg{~u%`j+vfx^N?ksSC+9za)ub+_t;~rC%fe%(Hv{O6QSlkBneU!ZPyH2_otX zq5-QvPe^=D^PyPMhY5n~&ro{aaa61AKL}BkIO{HCiLy77?!KVr0Bw>RS~+`E$W5Cq zmiU?yL<{zb&3`mNF<7@P<=v;qh$YGFGT|DEeArAsZ8C!7JACRRjD#V`(14yV`YFiT zbmQXInLraau%9pg2k>wAAG^^=K+IXctEJ7G;KKiT`8~HP_&g)E|8MplB=L6WHvh+Zc@I-w+`kRUzZCEHp?82k@;y|VJq90@e z@0zC%watQE>^moZS|OB}o{IteW0?nRW1dK5xGvOX(BZ^4>}eTZeuna-*v4=fZb*GW z`zl8u8A@zCCz6#lAqA546^m5(?g`KH3#^V%-jwE__!9Epuvw6saa8ZCS zWY$=?tPELXUge5QN`NDh7!@iPIysk(S)*_eR7slbQNU}Yk*N|=NG1f>BEG7dVP7D6 zHAS{yd;=w1^10E!Dg)WM8sCE~mZ5ay-C=i-3?y0_JK7JPf!HL%i*d~v;F!5rI->Cz z(lnRWK6T8az?+xp)a6T%ziOdg_#d3m%$vC+U11h9~H7lRZk$Gd6Apo5|()d|lpYRPMU&4+Mm{rA82ew}cix>VkAq09eTp^241be znK=lLy;?^iqycf~#@Nk#FCpK0hPhDoA+Qk2&%gg$4TX?$U-S%=Mkf+x|QVtKqPBH1iMzQ`~)O^2iFsw@&Acnk^u^f#cyoY#s{5v0;Hy z*REZc?Mz5aORSmx@DLKnZeOE1k(cznK+`ByPpJ4JnSfy`fP}l-$JX|%$Tsi#Z1>m^ zWJLxTFkTEmNsZB;Tj>oT>Qklp_tG9HGA4+cY&qfQn_fvq!(X5f{XQNd)CU(CpYNpe zY$*JFN6+M*CS)w+FfeUzA@QlD?*ZW{5JGTCI{NHe$QM!@zWpN#g^6Ex&5E^!c)iGy zw;x_Z;)UJ+?)^!IY?cQH7*7!>X7orW(RKmslR7zx?J#g?JP^tpB?Qlp(f^DFBHZUt$nt#ez>9w<>=9W)##19G*PW1$7|;Sg z`D|$)&1i5KUn&;B9YaP0ch%gO8M1P_p;ck64y9X97FS3tq1dJ*N+U@c=`L$d%lMt} zKlNbgg{21MN7?hk`CJYZtodAGP3A#%O1JOX8mJ)82E$!?3KFPo$_Q|5iGl=@QI0=TKq_wL_)-D$rXVh$c;duw;4c<>W zPv&+3g(KP2qfjVSBMPs@t3Yu>;{@>^F3A4(wTaqn3o1od=-1zepcvjR<`src zC7MVDxaxMkwdNhjbw1_!X8$jQ;A>4C0-r;|C#WG6`~`MbW+fY~$54t~}pWn=dM9%w{zewK(uX6mb0bu~- zq{<&VbBBU2O~5NCI9VSv!#P0_3b-fuUy=zmU|a1V+qu&N6&-e@R(Ekw#+E(r$M^-R z<)=nU#Hb*r?2%c079Y6i5zgdADFeQZ3ulv43X#h;rBCLZATDd*=wR)n4=3+Eog(^z zFkRBlbvm-(+B?v8Mm7`Trz?)j$PQ67-m#NO;URKYE*QBK%>t@ALBB}Y??ZxGsCyoT zJj9O}b=RG6Y&=y%*{#=xkV3MbWHN?_IO}`o-Ywrm?nixbf!#*n`0k*OCUz4_?=4?< zzhR9+pUa4%+o4fl$D2Ig5XKe*jTe7n%<7Hz3AOPEL#`0utm# z-<}^n1+g5boOzx+L~%Do^jkSQQTUP31w%Co2roDyYS_C8IhBSvjdvU%k}_DIy08Ue zDxMOyzsrK;&iU0Oaw*7YYnibK*@rl9?^l66T982c^Zv9;0z_pDJ!SXR0yi7X_(dEM zczWb$Jv;{RRy)k)Dr1CLE&0Nfy?vzlvYB4*-x&C&`1H07^q%lU`l;uVpTUQ{MQ-6w z62kCf=J|R9kW9gG^7-X;D2dqD5K?^)si()Q8A&<7V88r6tJ^zp?ERe9q45z4R|MXZ z-5G>Do#b`gL@9V2b&_^W3qlM{U@CRc8d%JvFme&vK?<|L&CZn~h~M@sk{L;WaIpvB zg>QXyQ1NnnLXk{R#sN_%HDhL zz30c?dv8J^Cs9^1vLaEoBnr{s@%#bz>%Lz1b)N6{ar|)09zu&Mp>eCU2l5ji9m{ij zhGO4+iJ{#ZM-hY1;+XyDh28f8#-+|9L|_=VzQjz8mVK7{PSG8I#IHk6z! zm&bK!8*)4B4}P5ck;8EJ*8%x!P_VJRa#|@3&XczcC9`B8hV6qII``<#zr4HD-sd@? z?M2vAISa}HA7U@1zd*({6&_o}%c%HRr0H`@GPtcVbvQK5!6CIr6#=1xE(9*7Us2|ORR^NvgIsbQgLwuHEvJ?4%gJL8{RASVESlEKl&h;*Fv@Z?7<1GgNf>Pz4oUWuxIN3NhB=HrD+JX{xwNj*Lc-6Lu{- z)GY{X6p__!4O}SPP8Z#eJl~J4Vmi^zQDm;5&~bhAytjLB97sK-P-v2Ch|QHb6#EQk zbA;v#_{_cP9StQ$;oDBm(GKM(SgZYd;#@j%m9hWWLHPiRr~3+Z-eFLr&bEQXtqaJK ze(U<_J7XviqrOu*w2g8I$==o&2!q+@kf%u&Pr-xhCikgoFY=l>AmXp{hjbxxb-_8Ri}EH$~(Vj-38VU{T46gZyjX}`Gs6-CrxNVyp7 zk^i4(1EgNtkk&>0z*EHx1x3VXgv=2^K0(ho^FTCMC|x+K98ZF(S`r^-z8-K_mA?{s zW&z>3A_9V@n@~5)9fNIy4Rw3o;wwgJkcn3pw`y{Xl1jZQAXgXaT-=2&cvwUB&7mtT zg0@h7c~>m2ase=Xw}NhY5}^2x+0tK70@7RA>b!kEUv+hC*_sJ~=bk^vjr}Yd%JC1q zE7(6m6|efAOw1QZ3+hsqlIR6Dfs{{|)=Z$mLupD7hZ{1Ejnz_PXd#dCEpky1gIH=o zHqlvgQ<9(){!idX+qfbh>mgr(6oE z_8*7|pqOgI+IF}}PB>xDBy^#gsPc2tDt+60QV%0HI z;|B8YO&?rxQG+nMGfsz4A?vuNElZNkNoExl4xl7RT;8YUl%#3WI#Q0U)vU+C-P__a9A%%M?M3k{Lxq=5K({oI$N4Q zB&MbM@Y3di;C;?YA4y6`&7y6q+S7m(=1IPm@jeLO5fv18`wvof(>5l*v_h7lG-dOf z)$@6Be%xC35i(U@4oUvPhmzfRqL%_)D7a6r^?qh8WQ)p1s`fTRgfG^$NN z@@;E3i2&reK_#W}1?1AIqH|9-7@{k*4P@V#A$v`Qw8|VT6g3+_gZE$(gbGI$kI3&p zOo*SslZV47vRNkMaU&=4=XxgZ`ilmN@kI%$*X=>Oc1O*M?s_W@A8=9LY1~Eq*RtU8LMZ5J^Cr>AFKn;_~}}< z!JnZx74P=L<`xJLrOA2T+6H{rZbyrnlt7q1O^341G6Z%q<*9Q&M6o1w;_p>`A*o|b z_mRmeWY%sOzOCLso~OM(4Sx+I$M3jXf6XL;@vmUE_o5Aod%5rUcTEm3?JPzWwC)i8 zXUMOa{rCC)Bu8BReh4*^!b8oyfsiWxwbMYQ9?HbkieHiTCB_C45K^YCq(5t3m$WBGybD*(fkq+55_o z7P$Tub07Y`fWn{ueeIR+4DklG+T)q0kis;7XFKXOgpcg&RVU@bL){4+^^3w#EYo9_ zEE54C>}^_&9FtI}SL07B{}95hq=$l3#h_jB&I?!Zs}MFGd~)#cKd7eVyj5}IF%&O~ zTpN}4NB0kD`o>=eqEP-Tzu0=_Aw=6@akyFb(2DIC$0l}J)MUVbPbbrNM=Izm3g(SL!^4h1D&xWi!k{CmkUui>;mwe$w z3Kdi&irh(U)B^9p=DeZt8&Gk3Po#8p7z%d{a+4#;pn}HL6Cr&FX_f4s98ra2Gm(Nq z`W2)&Gwj6n@&xjyg(=mFED?W5+@haiHkj1iAwNE9fZ`H5zB2y|2)W#eXZfWY%ofEf z2?@)Qn25o^>H!G~x3BE@R)B>Gq<$B#mZTSiaT^f;iv zaxuE!@CFpt@X+=cR6+WU7Wex57Laz!$w}wr9TaGK(2Nl*Lk5Xe7U$#(D0iEA_3-T6 zN1kDmtQnnqU99y~)BGePg$k=DCvZXrdrQOXx3}P_x=py`(NhRD6$hFn4oE3}!;kGF z50-6b=8eM~kXEpJbmM0kIA5+vi_>!xTiIAH7O~la*el^A%}ybZV*4hDQ;{7-Y76t2 z1pR^X%(&;@%#DzTHs-U37$4-RIFnX;x1RU$q3=WvD+(S|bdgFp@4ZxyOH2Iu5HsET zXz4E}RLCWa&CAR}0y3Pmy0i{4-@f&-B$9!v^NF;~RW`^BU{zUfQ9>pP-m&mkqQ zh$ve%8Zvanog^loI ztN&)nY6}I-cE8@+)nzEMy#*K7&+{eg$LMx3Kx+CW<&$nH6gb-W`v~>?rU2BxVLhC{=!| za{h!&6JLJ6OMK3qHkSzqePzJ4&U;x=a~X2Bi6#DenS!-BQIntIHekF~y4>$PM+PG} zvHrcEAgR)Cr25J;i26Mj&ALZ~B95)zVfJJp=VBAL>E${U+>X?Ytq(y5i!1cb6A=_^ zK(F%DNe=vV6Q^6>TS2;PeNfs1VaTet{x=`B3emB@5$E*7^=IweWDOvTK2ihimKt9LnIlG5Sp1wiPm?ybD=``cVjj z)AFr^6{zGh@c1`Sio6Sqj$2ZD0CSJU*)DV$3X9i&MAcS7Ou;UEt^0?W1$U%-HGLvD}4G``zNrCTCBh5LW7 zsRE%GW4<(d-uKyRk%g7BOyF(U?GrJt1-W1TibkFDhlqLvt}X2VvRofcVyxAImg8mL z=F2}JgwaXvLR}3MNB(^bxaVB@I3n~ylmQf4I#+H{yh4#{!jByIH=!Dl;rn@UfEoFu zw(z;n2Gbik(fQItAhSdK>K->l{g``r9CrtzJ?>`AW`08n!gLx`_nASrsk$@D!X9~f zoNh@FQ=j)xG8XM94fu!moZ_bKgBjZu!*C%|a1r&C|8Knz;ywnw9G2Vz=Z67<%6v8u zcCey-HQxx_1g~>a;b@`QzC3kDj3PMven-JvPl9~rUrwv)XhEgkH~d)4EV>_MGuofD z0;NmxOG8XiAi*sXc=Oq1$h=oYM@8@hG7>Ak@3TgL7h}FQC+RVASr8<;BSHf%GR8s2 zG>?(2RC~6uOc3&AF#T=Odj--pwncI8kw9MIXSw^f`pEeE5aZ2~GpJ$_7bkvZkKEmZ z#%=H;!SPm7hSmj~bMGn18D2<-recK%!6`oEDl4m${W1XA3LC$;)QANo-8uocE!Dv7 z^scd|XgV@|FZb>4%YTrY^S-@$oE|aXI4mw6y$3lu4-F#yGr>jvZ|QrvBk;dQk&Dw_ z3NGw;TPfdGph{j@ho3VZiiK#Bl~lyQV3sN5snk<=>iDoSFj*9w)*?s0z2k@Uy_od% zf|sDd>Z~;8Tmi|1W=yHYS}2%|vas)!7-Zj7BAamMgL1;NzfoFlQ2YVd9-6}i6-zImJ5gAaElk=Y>~)mxMFQyG!Vk_BYSRljzST&bKZvi2w3BW zUw>4z3!x=qSLd$TLnHTMumMp!gf>53WVqgfT+7dBHjB!j*8B>kqaz1o@OtaEvrQoj zDdX0&;7O2b{yD4m_!yd*Rl{Gzk%DtmXJ1xW9?}fTZ(>=kht#p@U(CRXqOQyeA0)Ix zYX0vWoGvV=XXl#JmiPymihBtdM(W0h<{0 zOT>8zmm)AP2U@spuN4_pK^oCVpDvw!$aBK&Gsk`b5q9=B>X?2))!|o7Ilm8(`qN+_ zckeG0wycL?qH4g$bs)Fdkq=qX6&R*z`-8EMu?nwwHN+NF)XN=EL*c?i1Lo!zyi(wt7`-Y`d+wneMPs7Xs^Dc)RCRl~ z9%ALNW*e;w;i=ACTQ!#}3e~+*O`OpW4RPZ#N3}MPyh_Ucn0Flzm7r19%MCCe6)vFf zXhLq0t_QztYa#m5yH1bG4^Wa#+u`aUC8SU*r=-lNL*}Sgb3%(23e8~BqP6xw0xEGM zHO>c`Q9hQMAteZ*I3f5F;{$2Vl-yPP5Z#<2_tN+~q+3NR<5W@s8D_%u^ao^+XFEl^#!+d`Fe^YW~d1zupsNo zg;MOr+e8Z~kXT7Rd>YOP8fyh_+85QJa4q^}c=0o2MZ1raxA+;tpNBFi2^v5nscsIz z(lHdJ+%;=yx(@~%1Y%~N7myncjto7cG}2(7r9O#1glMCkb=-g#$o{U?PDuM5$o(%> zU?oWx3SCG}<4g9DTN^cofnyp>Gv^ny{lzOFSM*XUT5FI13%1)P!{173N;TBq%Z6$?(W$@!o^&Xxx8)GTokzMGNe7m65*smi)X0I*G%X4*9l0F~GzIQ3L7J?h6obVqBzJ5c z(InmkHIggNk|*c6rW*ToC$QtZ-x@qk*`gu&5W}dGPKEsbvxHEUa$L<-O+(&HidS_2w{TYM2b1&NUPw7C#!5{tQmKTsA>ZB(9j~z$t_0P-7DxB9n!9fEd(o$*`G``IWbVMALS+IYSf>=95vF>4!DS-=|P-u37x z^Pz)2)@O1CYa_ zq#B@ydd(^G6cc~suBp6q@d_nmH_%-U)Ki4$!}RsW|2iRuO(l$uB@iT%PfrCpu0u85 ztix-%$B^Dz_K92^5AvOAEt)wpAiw(+={1*nP1<~1hnA3Nv# zV=u`Ycu)A8pM$rvj_Hs)FWtsqQY`YZEY@Vyoq07YDzI}(?~ zpw(i>^X&Z}6ya)@04nv+6;IYxbO{x{zQ?Xxu(mN8-S5lID0bq9{H6n6AR}fqNDXf4_(viSn2Z@-Cx98(;6mR(|B?ZnI0;`3MSs zoscbl!iEZq#j>!dPDt#zalCPsQ?WzsB`c6%D{NeDU8qFH=6}PcI!l=hOa$TUz|vZym=9MP$8kEqeO%exqE>( z^%VI;Po8Y1szRb9UH$l0C)8d3;IrO%f`WULm$~o|q}tQ}Iqts*3QQLn@(uAI>AGTp zMNTca){9U4IrtA8@A+qKo}3_GSGT6;n%9tWlb)SnWG)zv5x@Mg9|Puuk6I|I7a+p- z-urOj0TfY`VckwDjvPL`PFr@*L6K%N)&6-RQ0!yVadV{>0u~h-f7kwiupetzx9C5B zOPA8u$7^ROX7ji|>5K+NI{K=D4=EJg?(pGb`~s1sf7f1mCnMMRM!N^Tqu^yF$D|zl z2BP*wDxbXdh1%RJ%xng4AjqPxlD?1ug}n}o&65m-RNV!oGBzCKZEHk7_H79TG2g0q z;cx_|sk9wwl<$$YDaWbgU?e0Wx>n~i62v-TRZq*Qh7wk0y-#eeBCi1)mbR-w$g57q zD4(I{+-vSs)AZ^B=AAq#mHjcYxO=L&%p(k{SujgQcLjnSom0{+&fk0F|DH>(0epoL z?PJ#`LE>tohY`yVB;))NAGJ4vpr?E44ryAD&DTtHtbzk^PZZe}R5np!1#Ksz$0ca2 zz<+qXRtOTmW-2Bw%A(s}6~)iuZX*A}D3&T86%=_(G5R~b4y3E$eZ6RP4AB+uKdDFv zqVPwyXL@8d$h5^cFmCSLtG~069nJrQU`UVEc`FCu-W+%)QxBkGSjI;N+Z@^Fci;9L zXMk+;H3xhZA!M9eO>28G0tFhX@D}#ZfU{V}7>OVSavGu5Ji8E#-1}LGA~lteqqyFX zMAmQ_fxrhc?vzb8|6QK=?Dr8j8sZCL!qpL%0N*&3d)JO=)}sd zf~&!28j@*OWPJE!F8cHvghz8^Fx6_^@GXxxS=t& z+C0sX0g@$k`5$wZLLs?Y<3~puuz#3SHSKv5S$<7R4Ecf&v71Ee+`&(fy_8RK(P<&1 z5X}g0J|Bd5nHLcsXU_T7(mPR3A6sJ-r{bDjeRx2l$u(@^N(gWQ{xY7jlGx&D*? zI*K;Ie_0?#2v3p^B*i!iA*o2JcYuH$a%bhO@kV!`yv334lqL(}?*H;%z0?aCL{S=8 z|GXiC$Ddf;kqwG&)?y3qh=K35m6dx9gitnP_(1vAMNnr-B$w_ggfcp_LnW{0=g+ZB zWcyx$iu{hr&&mu?U_v+=uICJCYw`A?u1OFm_brErHXkH4Ry8o`n&5IFAhk%=75vwy z^bPyfAwt|y%pmH$yBU^w9{9LjHtA;~gz9G{ee)WLkc#)|psx2L z*gsRPaQ>Qu9Q%Tb)d@79%rv9~W}ic){E(+`zQCEJ%r?UYHKxL0+r9C#gDx z5Yf&mqFQwe(u%rIcV5S%$AgwB@1Af&c*++6s6B*?^3A>#J3%P6$NyvILU`^mEHAm~ zs3AL8p7Z&uX{dGTtsy9XgDkhVrykuWMj=J&*DC<9@K|Mt~+#85a{ zOjow8CJHg+ly}#E0F{@h~wk3E6v*udkY3f(+$r^Zu3JAw}eJ<3P6~ z6bd`#hhCe3oHORPg1r1lOEOX`te+Z+y9$$bM3>IJ{T0E3;v8gq>W{N{p98$~jGo0X ztV5dbztzup>|k-aqtNr;UC7#*{(V^3kHT49C8c&(Al1v{bvADwq-s_5OVtrVjn*^y zwj0cl`*cW0RiXi$j-}SSzPw;hw{N_1GU|&ko5k^WvsD&2sg^ZPitxiw=eVmaVgG0tk#FzN9?JPcUS7>3Ar`o zKYY`cyAuKt`}JZ@m%|~SY;24AwK}AK+UH}d%!I^=Om<3kY!s3EE&&zlg9UNL zq{}@Wo+Y)0l7qL@0apmoQ*Zs=li@Su6(ovlP~#35@~GZ6k|Zef`KCM<(tup6ZuQ#; z+&=HM)~h#DIiS|Vw|o^R9+C`_7NwovLaaNk!i0%2gg8!qxD~wwFL!xHIOS;}a)~b8 zGuHuvzv0E=X|zGvm8mML(_Fw%J0uc+r9xhB@b6&(XVtXS4inT#x#VHVqWg?g(ABrM-A8w_hm-;9)2yg%Di)2V_yHYQpRgacj_ zna+<`F8@Iu@76c!Uu7UeWNJcsKMdk^b2fTw#x-K}V6 zs3CeXvh$-6G9I_4KP9{gkPiifW`_`-C61DbcuiJw{UD!GPN=fz zDg+Bio>4{>LgKr&hgAm+5aSiV_KDI+=vW<=u*YEXW0l^T;Lz zBNdPfp>)AdL30QVdX?DfzzxYZLJ5laGY~^=m(5>DjDnJptaOhq^BqSaQykS-((D#`_`$Usyfgd zc~fnZXaJlBFOaf6je{T;bwiFJ59H19-k0GoJqjmhxVOb(6kY{JxpGEObPpV5)x}i!)K~6Zi9&!cx zrLtQ-K=L=Yg7*>*P|k9ra2M|dq$gi`ny(6rMgpD*SAKop?+eO%WTgKtzlO&g3bbPCeo!!Rf%(<* zDZu!5OGpkbLGy!C#6^rlZg29m}60V=e%>ZAN%q zXk>w=snzDmx6F_t7dEVY|p>eWv&UDb=Bq4?hdbv?vw|M01hJEpGB0W^9dO0xSy@j;C)g@268syhE z-!;lN2YJJWx#nB z#W((Os&0Ocy!?M1`EY6=uQ~cMd6!$rUFksb4k-mR7uz@`tW!c}JM+phJ{PzMEngk_ zY77~h!yQJCC6Ote+Nee20%Y7}dMi0G(Y>)VI7_9OhXUGaepnF1KpKNB4i9NHNGaW% zOR?ZNzdzSMlQyzY#f+s{*susjQvFymJzK~nBbM$jn-CNS%P!Wt`~ae=0 z;zBM*l0gdL!YKF;dy}55K4h>8aeM2gq9<|8B=VJFD2$)7CqBFea;Subc8TsmHov}C zvt=#PQ0lr<6G#n3uO?06F#Hh1Y+O)pp#xD-JMZ-~(g5RS@x;1g3nElH4d4BZfeP#+ z9v-Sw@KjQJQ~070TvdPW5IE0(oU(<;*$Y!J^S5r0I3-9r|&pDOSK{}|b z6T$~M&Jrziq1sN!jY!oE&TGYXY;pNK7t=Q18oY!QI^kHe`}UAR?-K4K`%(Hb(A64 zP)}z^y8v3q`kJumK0)|Hqh*_uUr^rA?;O{d1ey7?q(yBekSfNsk0VBfoa6jHP`N%u zu6+ij-)cO;ZlRUovM(*9(U%b6_lormt#XX+BqKpqh>=avhWqQEF_)UAR zSs)4<{FRi_>505E8d@|Dt0CvAeokVHD7e{Z6{{Vrp=cxT-JZu!kgwOhk`o;#2w648 z{>V=Yn9AL|5A=!vBlpOY!r&8xM(isrND)HPj9|tF_6*Xv_DLYvx(`AO08K!$zo_=Q zs;40}iFKTIiV9M>&Zw1-zC!r51Pvtc4kD7YjC0=_K$R{xR#2fNpG^B~$kBi^*M-g!)P4)YMP(n*I5z}!I zif>xx$a7UfV&~%NW4q@NNycYY>`emMSy^*Qp5_oe>y})eY714VdvABet048VHFn{5 z8Yossk%{Q#gv@TmI`K$lXnr~4BmVzh`S6$Lb>3gV6o|ciVIc*{-!r#m2pJ&;cg`~M zDIv5c%$JF_r$h3Ow$QDkekcoMrpP?49-CX4M0jqjA@dFr%J2PE3eSzdzySk(Aj6-_v zt5RJ%u6{99M!J%vK_>#L-TYoX*d?S@K<5u~r`t7Ob(pWm0YbK;%^ zm=KY!Wc86l0nfzrwxS{gg&qckw|XI;kP%{ct8;&t=I3deUO*OUm+vNuNkftuzgDSi z?s*R_nMo*KhYYMM#Nti2kYfn^}3G_DIUE$FCM&t^xu?-gS`P96!GV$ zCa59iR~+Uey&YJV%Zk_h<%8NO@6>P9t59A^_$}jQ8KlKC=sl-Nhp1mRcn1;R!JT3# ztbzCs7#pe1Vz{@U+)=bw{dEQMq2qZ&=oNuH#KksVqZbg?HFdl1)@Q(sPyXJ$QGm>u z+bx+JN1@)QbU<}|01`Pei%FH{;i=`IMC@S!@(aGy@zlo|vYGTI75F<5$3xtMk?vAZ zHF_Sa6VeF9X8YFLH-AFG^kl&ug$d+$_Vnz1S|7wohYmaFp7ZC==xg!UW{_uMo5@y_ z6||Z9i;1uOhGHEJZ&EjR@Y<+hlZ7Iio4Z$}p)Px--*r#Enr2O-CR z4DmPco*`Q4PPd1QA9&Zt6G>1DUcOFKw5`}^O2{8zxUdZ>;r#|5$jLqnvdg}`-h zIdIM@4l>zZtvi(JLg=fPx7j(C!Ef$QELWE()J?MMQSNV`fZ<$i`rHMmQFzR{Wh4iQ z`OiKTYhZ!Nfb{sjQ!02!RMj^R8=z2f68(`~QHYISF}pMJ5ng1lt2`|fgxc@!11`5* zz-vxDk|Qh|c|@Gre|Rhk(SiJawCoqbAZMm*#c~$Xm3qwD9qGYkgoewcnHxg?J_zZq z;f3euRzOOM8sr#=G+)TL1Lb4UGM=o)kTeyL7&XETxsslaa`Wdo#`VB1;3WgJk2#$c1k|Q-(s1 z;pj4_UPub|$d|IQgHjFCyo$CrC>eA6RsmKNl)2m3j*_b)^Fx`>H%lWRX#s0Rh5|r2 zfll_TST!W|FaP&%{U3z=0yEv9N65Xz+DI2IpzwFy_j4mpp)4uG2=5;~#1S&ke~|Bh z=i}1f2=+rDoz--t*HRb-ioYqn!_xo};{qj@ZL}c&WlG4Sv}On`QYs+TCx&RO98+zq zL8K9keX-}~UkLgq%lVY_H5eTgNx56mLGxc9Hh#zR{;5%^T#W38_*t$J-RWH@oSLY# z=_Wb%kUx_4%70MM8j~%F*&tN*9P4HiOQRsw@xDBdf5_KiQG@Y!CggwGw!Ld92DbYB zSnc(F$TR1`!^a}_kf!w@GS9>ZDi*mg0s3kvc*u6W3VV-Cnd`kptn46P zaeGqlhcU#vQE_nzkVARrbsvq$^Zqf~*dF%r(d$`!;BEd=IMbwPYGGE<)7pmBzEM&~pwP zfB22)A$SBTRO_^EA}w-k4&ih^G`c^d=f z>nC<0rH4>%3bYe>pCN5P!1#ALx9#!zQ#cm)V_7H9{Y8K zbp3m8&68f5)Mk{Rt!Tx->(g6ha1Nyj@)f&kB&& zk=J$ER5Pe9WAEl$7lLfo$NB`@=lpRs=c&~i4vOc;T3QhP3kiE>Ov4-gU`sPwy{;aF zJWo?M65mQe>A@SK^wDgHIm7A^uXTf{8K@Nh^A9TS@y6#W|3X10Vk`|sLy(e+u}L%- z08=BH4A$~~@ts`C2~=X!5zx%ew23$x+LpK3vY37h*n zv!BRsB4=(9LjvKrZvVXhg+r2+a$X}H{PKZtt8OVaP6aV;(m+_Xk$G z?2fe6}&a?A-4$3hkuRPBbVgdeg*xGYkb^ zXf=wl=Y!&qLSFqCmZ(rR_kfV zfxMH8>8B;s{OzUDOdW-UP1t?%?-r!D6H!*E2SeujO4<-67pP%wE)1eFg0iosDTNAE zkV(oS)|EF2hB|JOtJRKBF8_p1BqasXF6i9+_2Dyc6425oQS?C?wOQl+7f&H$8KxUr z>5+SLqwzM^2uhNT`rfT118$OUZrocXLnc;!*LV(8&v|#4Q7D}kvb&x%pL9_`eh07X zGMg*n4P(BZb(IKtRlSxi8R~{`r`V#tZ3##Y+}+@3?}J)5rexCP$0!7fNq(&BLNM1; z39WS=NNcpezAP(p?kQ@uvy?f*f+h)SD2aUgoC(o!b##1b&+L=Nv*8=#Z`2is;KAJS!I56poKMJ*e9p8hF7 z5!BKvPU`sJN-)SJp=F682wpDy*gJs&6)xxRgFBF1#Kc9IAqMfzb`qL5mjKiImfM?# z5VRZqan=p2LUEP0!0ciS#86!;Rq%QMNl)rTX{`*PP|SNFPmKoYGJo{AB_j*rg;y2n zw$dOw$@PwPwLFR$BFu4qtPPR_n;}&-Um$&@j-vTSH3ZH^NIdkgfza@z-d?>QkXd$E z|NXTx@_B5J|DkvpBF7&)UV7?)VmxF&T^f7>u3zn!jaffK&TKzv!K)xh-r{{7`iT>g zUdc5`Pn>&@%0LHKh7Uw%_~Lmz_l2@MkDBRTP60-TfYo6TpdNE@+>VmQmj^}fO29SC0uq@Vf3ycGFe&!L%LpjbtzDD{Oq^~P?7%4aD^11{jo=nM_>nHK51HaSSobl%N8Wjp zKie7IA^Ujj2FNQxzJ4{+XL%b$F7V;q@TCdlrP7PX_~{hF$?>vn00wWixa0U5A>z<}B`(Yd(%*aGJR15A zn9OopZ?#59F|~}(xYq^+bqBQyUW({x>9;Q?d{%(byC?I#nE^_s6}}`i=|T22a8P(b{UlW~UtlDpc2$oC>4{*F)0 zACVQn_(&-z^D)Dd1}lmd)jLoeE7lZY|&fP*PX3V%&PQ%H@%(!7c&;2Uwta1hY=T12QEQC%PaQ_xE2t4 zFLHJNemZ2@5jK7DWJ2DAUQ1Xn@gY(xz>T>^2F1h;t>vCFfvahckZPF-()o5%mNy~_ ziXX>P45j^oGGzO~66REAUl@X7*Q?WeT)U8Gn|+SXrd}T{{BxIO266(@H9w4#pDp5>hxV?8155mS&@pIhmN~A zp7?`9)PHct5Wxx-4D^KHjE&hO#CC28vET)jG zYgiB+--w(QWmRRic2Kw|0nDF0g!(Jb80-&*!EZN|h^8e70wl~mCUyhBsj{$1jE@46 zs(bEk-D8B@j+xuyWA~w0|Kf!=hR>1dM|?lk=Lg8;j{&%ZK8HZV5qtxJ7-ZC=?_Q~$ zeZEH*bBvS5pvl67oAlu^@~CL-6r5gwjJCL%+sOi89w8R|0iWdEGsm+5po=ewz zGAf{g#>r5*EEM_KkCyAa`HHl^cFtaU*o{~<&}v+{D&!={wNBirgrd^v3qig8h2rJs`|~yQ zc)h0t30}QBV5t2Qxxev;MCn(^VoG|qWNsHqs4TvFtyDthRWgDPSRUY&ApNl_J{-(B zH7V~iyoZLAt>0}p_~3psTct>#ABAd;l-4Q@LFRl-|Nh@z=H%ZPo92@v~EbO_ah@#OWop|8w~0;9+_E; zg!+L8Dzp2liOWy*$4QQliQeTSX&SF>Ve@yQgg&_&Q5|C2Ee36na`NF7lYuPg=eQnK z9kwKnGj`kC@@)~Y)Wyu6EDMk5CFhIAwurY3c`~5Qg5->uro%l_5D-;tzO5NeeESs= z^XyrPx7hI9c?Vh4Zs^F%JarmHDQU6g8D+$>ax$Gif{8fN^sH{^*#ximZ+sQSJW#m0 zM1Va! zNI%@I;k=Pp^Kr`WRC#dkxJ_9{8X zM$8rqHi+%YhhHI+_#KXI$Vw}K@g_kD!FDqQIp^Ea&xAq&Oyj5z4uTB!JK&Duv3O!<*$Uf9Kr-d+o zpI*kqE<~ENo^~Bphu7kqWqW!gTvW?bXxld-(El<|;)X4VkNUPdQs*ZUzh)WbWtkv_ zWB$=kYF;=lOBL|*eTSNf(gSk^DyY0%SzT7qLOM0aeJ))(6t;S6to)86l{J>p!+gsm{R5 zrp@*6V{WAW>Qti)4uazL_`(#6F9{F*FL+?nB?LJJM|I9L!aBy&eSdKXoG(d4)l`-e z3+3s(duAm;k(9b@nY#_%EX6HpthR{L8P$67CkK=-^uM+_aiO8OcTV744N;u^Te7!% zf`mH-2$t?OLt3FM7_$77-l(p%iexm@eC04z> zuB(hpsazHI!1u(j;&;$J=>gdMqhZ^*RfX6c`>S!i{^&aQUk9=BQ{cGchA8bU-X8Ma!JXmkw^eZnp+)T{S`JBZttO z)Ur=v>> zoV=bq`d$%^ykWN5)UY);`W3zZay}0JN?jye?gQ>zCPU|x_9B_d;_OFTY9#cV)CD~2 zg!`26srn=D;Ad8{_%*g2@lQv2#NNI@k<-zD_T_#Op0-!4^TAKVu-Wp6hd)J@*HPtn z7vCdX>G#$2-dWUVaNdZhA4agn$cxhD0ObCZ<))Y#ApXXn^7JAL(F*>=#ue2C35`ns zWmQ@d&co@mb;m(uVeH_mHGZPubLUj*^_xW6XY=o0OL6d<67{LL{DxfjE;(`ft_osq zPCwXusRF(y%?mqU6IcfE`E7j5fnp!Gp6xAaC{+Doe6&fH=+}PuTsJU}93D2 z;(l_n`qVCw*#8a{-LcyWiWv=SkD@P9MCbyC3*1O(9M@D`Z9Q@&+Z1TK)sZiM^zO~> zLkLuEb$B+o89urHeLl#v3_r#HoR1#7hS0c=9&4T_k>P3@#&pCD`Jo4X9iWy$=%pgN zrLTU-_{yYuo`anP&}B**m-xYsG+CP;eMdqPhf|9y7m2@toAQ>O<;Z#0F-aH6iCCqw zv$}c{h?;tJF4g;IwnO9!bVrU$I`7|vTSIiKjmH~^F1Jq9a8WdI z(J?i75a@-ZqftV_{Z|m)k|_KBloq1xe76fVZGam6;X}@Xf{52SzSimYKgyM}JWK*%eDA|7jl%h)k91LA>TAjOd_^Ta~88{~dH3f;Ao}=(p7E>fKzG1%l zGZca5W6@nYPmsF#;qDVOAgT^a>}rZuC|Vh>|asXr9X?{pSvCQ zcJ;w&S2iUxk%ojnsa;m3`vVb%i3nY07UB?GWw?}l615*sv6CJ;<9DT<0uDr0E5P_ryUv zMNYuo9C`ZMCh@=i5jRg#;zmb@+>CODLzfznbz)@o(g_LVT}sh!Y|g{=x5peuMF?>h zyTleYe1ZhY6}UbrnkPPE-8)i$xgvAc`rFPg z{D!HE^ckg4pKM=a8dJ62Gm~Yn{PRKK=yCs8!h|#LE5^XR7uCG(k4HP-q168Gna`{X zD7gH&WuGBiDN-~HXbo20o_O0oIlVIdyU_jejR=&=qxh{ z{Bjb7KMvpRsd>K6@tk9Osxy&Kx2xjE$SN}Vx%>Z7v5??5-lvpqy(PxhS9v=Hnn|F9 z?vFvnTH?~PF+!Zdi5PtnhlIW zHv-ON(UcVnBG>emx$vbe@BmXH(>+4=^X(7auvrnIlP~Noe)OR5TU^t1!5pMNQ_nv9 zUKoMZrA4!Y{0Ov2PMbS$0zR7-l9^^R5Y~UNmD*Aal)bX)G(VD&+br?wA(t+)1m`0E z&3-{fWP^h73L`w4Hq8iMmnSZ(nrZi=zM`<)-teaM5fakPs8!?93`yOEqH4MI{&sqd zdCQ)c$lq|cY2?8PqzD~W>PyrF#kiIE<;ZhnSD(3}t=&q({20Bvw$-C(DrxfDb}`}{ z9%iJ#VM%<#H46`oP!RWuXQ#&PG=#`IZ2Zdf1bH$)LSj!S5iefNKeAI#iSLQ=$ikz~ z5KPM}XCVC-f$Gym(PHYvFy{sPWjl4^n{Yk1SnnS68*N#u$9E$m=fQ!q>B=OsYAlMo zq!B{o!`JFuzK`k?c`wpw+_^`p*Lf<&RH``k5@9NTG&b_?MAZF1xsigyh?k<) zIZ6E#dFl_<-*R{p7h&ZyW$h&>B)8lax0u7u=&0hs_5H`yO=VO^j}!mh%to9k-o!gk zGlrS(1936^+ThHf2%C^S)fq5FM6GF6|%>$i7k>yPF^Oj!~QIB8cDrgZz<^81j#m8HTt4#g{ zle}6~qcqw^mKhB%nYo5+_af%qhOgV~R!KO&WTX>K0Mb?hoOxM|Nf4uq+)-&dVnBDE zmM?w;MP9G-rhV6l-45xOjGl>b+Wbf0$#E6*Y&PrvYUz5YmJ4}4^+5a zr4;shXqkAV-25Js`;Y|WL?q2N-#}hB`(00Zb3||@4}UatKv2p2{`|BnXj%vzX*ppA z{pDL`FVA)(gyA4nsYD8jx3CJ$MfM~2`zW$GJIH8IwKD(ze|2Y1c?N*;?ENdvia6vbI~(mEnIQU|7x$))7Q!WyTkU<&3`{iK zwX;Nvk^kbVglxm3^*P~?{+{KE1fT7Fh6fvw@>ziO$%6)Bck}dxUaell*96@6@^nFQ zLxW?LUpZ0=o*N52+)Zw->fMeLUiab*llM1oxxk{e$ecdqD={wUNKHR?9HF}pA5)Uz zMDau8%NMUtqGa!p*S|c@qUN>Tt}G!dl$X$`__C!T<;BJ0tSv^U@|6h_aoh_lm9mXs zxdF>MMb)wOH2tBxaegj_>|m?;1Dj8hsF-%^qARA5Y1@2N zz3(GZ`vSMVIqpFM5B&K%@a8^R!!EG9hdCf(N2=DHJ;B8ITiPD3^WMb0Qc$)+{S@l8 zFFbrU@)JpPOzeZ|vvAoVn}4b26Ve&Zs;t(0hqLe|wV7&96dz!__*>%({OdYi)f)03 zgtpiFRUA7)?{rQ_S5cwS`gWzbs4LPu?kb92x`Q&AU89FfcMu1i+~aiB3TPOwymYht z5t?craNb|*M)J(2(MrB@6j9~Ye00r4ou#MXuz@0~Z$~W%9(w>^s=?LR&is;>Hr`vsLki@aDP2XyfINeDvv$VW~cq6ZV?ww(%zWydmi^C9+|DC-wZte>a zFOI?VgCi(r-c>dwz7O@L``Qcq3=y*FoIqr&1}N;Dr)u^_AtgV3JVHL0xL7L8Y*MvB zjL+@Ws@o~JyO$|Fc&Y>OX>FZ1%mRt?a{kbhgQCdVu&s>0%oTSy+jup4zQFT@|IJ*H z^T<;WtN40g4Wa*Oh3UPsM*5eLyK?W?Q9E98HD>k(5>LK2w|SCC0^+r(-ZfDXuN^KC zd)sq}gRkc1ZTvyR?VYTP^oj;*dY3LfV%09>mO|Z-$*}oakAk4AIf0qs~?%cy+=AR{hHCb9cm$PWi$hnED;A zRkfeZ4;mrvj$Yk)3riAVWBuEEg9_Y!OSL|DoKHNi8rMsQSEKIZ;lS8a3M5SG+WX?2 zkBAdpyD^;^FL9f)6g4>W2YJDk(ZSE|5cdc7=rh`YfYQ{_UP%Sy z5#cc{_j+O!@;I6OmI;Zyp1yl&QzimG7+p4=K8=js6Hc2oJ5gJkLbp{z3K`-9x8Jb! zk!S&nU#wlt@Ymvg;qpU`ND$TQH;2QJ&bJ$<%tjG?R7#!tp$~$TAD?~q-Wo22R@lwl zNW9O=r0FX@LPVCG#qgB@6mOL+-KHf)c5UP?I^Cy@RGP?}0y=*Yv~ww}f4dm+Orkv6 z1@wq-!SUnv*CLT+L>;X6>K6(p!_Md&7(!CO?lkfKZsh5t=)LaELG0Ik@BSu9AcwPX z<$kUevAa;$5Hi;azbE-0oAP>)xpI5=8PNdZTCh!dXMqm!yY}C2cNtOSzhc<4r@Ivt zhJlfkd+H=c^xBDy%o@m^=GpET14PiUPTLuZL5#I++v}q?B$h;`w2h7+bE_U-gittw zXZPOG;p0aZgKX33G<$^pmd~gydPTyI77K{D1rWVARaG0zxk-e4P@|bxBQA4WFuV{B zKv1K(&v0t^*= z+~xa_GH09i&%*^lGdBgz%G{8$^-Jm8?E1YQtiJiOR+@xTxf@Y??LhHL&!dqgIsNw>Kd0RmeJp62S@k%MV_3r$17>5v1 zdvJgwkV6YM#eW1Bj&{JM{p)50e;vdJPKBqnZ$fUvxiiW%VaO7z=RdR@kLn#Q-_>?~ zL-{4M;0);tNWQYM{=lpgahc(x))Bu#yp_%!ZVp=C+h-Z{$);Q=o@9Dce9Qs~K~w^| zSrZ8B*?&PfJ_1F1Qgm+)-$DMlwU4t2x+qKvb=GA(Pt0dcl6qHJkgsFV)6myVLR#}L z9{DkXT2@oj#Yb5PYX82n#`X|V5jU*88`O~6dZpy&Kn-!BcW-KNyM_SmN0s?r-{2(r zc{>MNJ@MPVIb1)fm4x_QIim5E1)=^mb>W}a^E9uxe&1s~WL(#Fj5`pD{I;nG5|Qt-V<&#C;u5=c&Z6~P0R8v=mvHQFajjVP zLe34Zk)IyrDEs8qcaBZ~S+v@3iS@py zVm3Kzu7M0%(b3-KOf)8}ZXGjFN7c!@{A|Vi$Un}-D-h3$=o;mh>dOJhV^Cl}#I~DU zCB^#H$LvVJr;9e37XnZ#Tkr5tmlKw&M_F?M9+8_jSr#a5tg!#F!$1$aiFnn1L#wG+ zw5i)$s=Z0Z-8~WEjaQh~`C;{?ly?g#zn%M(~#b1Xf3FD4>_^42TI=hqb#F>J7iK2r5y{AorReQeV@L`($H<)XZ4*W zRv3uIs=fRwZzM_;KYxGFeI13O%NlX5`;hni=h=O&#>DnOV?tu)3R;Sy1{_zP5U&Fl zL_h0vXBLQtJ-sjaKk#?YbM#tj< zxwW}xi-%1fu{v_D-!Sq43MwpLs)^2$h~IaO(%vy5BXdx6POSx$e%Wra)r17~k8l%B zbrkhcF2oq?q2%7g1IG`OunlT09K7t0A`u_H_W^t1XqF#qcghP{Hogi1Wg_sCxhG;# zREZR6wv|=s8FUsLQgA!oh1i2Z;$nA>5GUqZFSFzOi0&7gnX{3yaJl^1FT$MxQTby_ zC-x^Ji%+;|3#SMus%eoy&Vxu$_m_0?-UqL}9pNdf)FiZD-sVP-B;x0HwHvK)AegmL zg4Ae1X~-)3ca{*uuf5r-XdH#iuYm_o9qdP%K_uIECSN3poDunR#|r5;o3D?S%^{iN z@;{Sz1T~BuAD^qgAoc~1)(SuBBIeaczx&im$o14)HPv8-t6k)iTpCL>JGJfnQTB>N zm=&%`71N-=l~MX;_;VDdGi`gL)<~RhwoE*4*$0!y!;UKgj4+M#4AvG%Snrk7Arj11 zhzfqiA6-R=_mfenZC_nTgmaYE_w94UY*<3#>M8>=_v!K}-ZKFG$cE}4tStzy((Vd7 z>58D_wi8Dx%2B_kH<9(-0DO6Qj5NM~L@1AN=+ns%#9avJyZve&L4Tc(={~1M>L&;4 zQ+bC`#I=b<#Hj>vw`KE9Y7Zfq>VY$V3_GzGkFHwMHb!0-len;m5(zVT)=o3%ft2AB zZ~D6hAh}19n>U-4IMZGaaI-Wcp#sN#aytUWg%Uq==Gae4}{D((MBkG!`0HHUdK_N1WVt%7Qj1&q+MsMJ991I^6yI^Pgn{H z&g6+L?EenRMAozl6Aj|%s&tPT)uWJZ3wPhP{Rm z4ml-DEfO@W@V+q^ICJt2;#KAD2}A^8U&61EC{`5`O0V0PJi>*1_lH~k-;5(E^wrA# zr9h<5Cx3lKql?s>|BBliLy%n6{q!VY zwhFBfT@RduD*MmQ=#bEglgfwvk`Qlp)$=>!dQTLsui=;1M4e(}PTX&P6w4XVtiF8% zk48ElHi{jJp2dEgf1rwh)YO;O1Lu$-bHw`Rg;Zpj_gtfujzD7LMg4Bcdc;2Y7k+)6 z1G(X>XO*rvk%a9sj`Ys_DDux%Dt%~)Yu=w4+)Iw3V#=g4MW+hc)tPPxUlM_DidoXY6od6Zn}_6j+061j@$ zD#DyvNPcrge4p(LVwH6CZ+wdr;uC8!I;EqLc--3khO;^eUA?~C^jHRU4-7tCm*_%n zN8+Ig*BVr0)k<4U$D(AOR#T0+1lfloBmXQ1ulJD;55oU(py5UhfHN=gy@MmOX|K|2`WghXY6~Tgx4I$d8(rv7e2V_MuR!#rf?< zVN_afzLbBonotC69xZF#B~fZSMsh}$5k@7foLjc;qaVkzPi34(^Xkq2RJOOFHdd%x zf&V0$)*RNT6Mv%E&tfpY<0J{G-`UqtAl_ zyVNI1;KR34GlvcmlXFpnlCe{0NI$)+z-$K1+)BxpeV5VO`dYwnrxhAW!Et-8HPo{{ zr2krU8Vy#D_4V(r=h>p_gJUPA@$m0V#EzgBNNbJnZ7n3yppJ_v@qm-^P}~@a~RG%+wUIcyoGA2?9F~hPNQ~M?wfLk)-?Te?CnyL;Hh(Cf%6d>b_+7x zUq5epHiK~GKN%D*2)K^KSR?B0XkS*7KT-wOb}I+{Mq5)v`mI}QsF~P*i<*mxL^~9H z*#R2V#K=7$W~ykgVWV^IH9~DV?}2$|MO3;zXkIHAMRlOX0HtddT5p(U;3Y@!azuN`=}^Jy^ZLXs2s%DquPZXj&1au)?OdK01tY0<#5yK2N}JE4e_ zTnsv;j<~Et&G%%(ND^nZ+bg3kRI^^OU;ZLQ{IgkN>M6$&EAz!q>dQRJim77vl|{8nE(%VoE395iy9G!WC_0p-v<+dENc~ z<}xyZ+t_TBZ9tK~_&wE{is(PDZPeV=gpwZ?1=)XI!}{9ar}a9qNY6VrmwzGxg|^F4 zqr;21A+H#hYio!SQ|texPSK#&ujQa?Y#8wwtoozfdXBic-T<50XH<=ZkH((1A|dH* zP4VL?NF4S~_|Ef=c&~}J7(953ntpqc@`_(1HK66o7_9~I)2KVgyI~&bmEsXvN(m&S z%i-V1Nlrqk<2Pjfcp8mYQ>1j?g|2(cjK<;jo+x3{xOcm#oTWVdj2gt zP{kQ0ywRZu@t=NF^$yA)Pcl!6fA-IM4nzza_Xr@2a@)%JQ5)j-56N+~OyG!D2DhVn z3|uo^8qF??KxSc)qxni4+?yw6Q)Kl(sjRaZOj9OK9?P>=C^;x(u0A&VeJi53`{FUp zc?3E|7HDRg!NRkEHu1tkL~Ph9CTH-L1lJFlivGAn{Cf+(y!!A74bzH&L5^yO=90O6 zHn0y7dWXNXFli7^p~tMX5~J{&(Wgpt;e;Ko)tA$FzDz3qFq5JOWp zBNoz*{Q0E)-*uwkV=S;au__2Y%Ja(pq3sCjeyUPgHGsVBl$qzZ_aO5%rT)fgNl>;4 zRqQtuMRLjGLw=ka;56WQ%eij`an{92PjmX=U2T=DIv$Vs8s_wm#d5GTYu4T9qL19I z+f}K8l9AKgbkHi`9SK}ZW0TwY6lEPBaySmXLc-rtb4mTfh*hK!mr{R;gyCY*db?`~ zyZqAbd|4UNW1io+78nTgfyL#Q=go*K_56SLKR!i?clt+Fk79(bs7wagB_XYm+A~Z; z9Tf{yrF*I=aGlZ*3@zD$RD&q9ZyGZQcjisI`t%11j&*a7Z5Bo9(9;hxrxy^IYV=t^ zSrEYjK+>5%r;++A~sy?%s#$!-hsxviWJ$gd#T`iI@``duhZ z<~_E(OB=?svL~jZHzNF+y6hJFAtZ)&Z2Yk$mzY(X*_1QhB*xi|Dj9JU=p@~7I<`vz zId7(P>(+Uj!feduerFhzJ*I|B9AAlI?#HjB*cNFT6HAl}4D0@)yy5bqF7b3{>vr4w zk2pESvn*K)6T9GFrHq65B&g~?5$e;~NRJPflJiP}+Z&xWm3705o7c5q7NSQyzAK*c zH$cFI#nHGXK4Li#mwj7j54oXV{rs4b6+#2+cBZF?LjLlREIYOkWS(BQd7JSZu_}1= zzG}A_!afz`tSG+172`tMGsh1i-)NBvf1b{@-Mm#JJL}j zpO1OZ_Us)f>wL0PhWZ2&o{X(!zhFgI^b6|#Mkf>%BxLlnT|h36uZBkD2c`P2RqQaxyvURKpA#IvfYi=A!s&k#q-SwCxi6yW_6|f?Y z!+jq^*b=!hRupJ7^%AIHcUsoxMh(CI)brd#)R{zgu#MEAq{Lp)sr@$^PCXKCvduu@ z)oLY?Rx#q8#r%P`)d_{*`Sd|H8D)A*+Cx{i5ij1ILC*s1aQoz^b155lB5#i+H~Snl z;`PoSIq&a*mJi9BZC~P!gR%W9(-!2tjThUM z){K&{`7K4%>BwhsvW{PT24D6#xzSi|lGwHKQmpp`jH*P z#ug4FBsraDJrIPTb9bE&Oy5MU)K>G^H_uVEukl;J8zZDU713=_6+{Np8-XVe_Yq2n z=w2h$8Px2$pggj36#nV>8t;4`DMqiBEjpr!hc;8#$uBlYk`&ce<>ExtRRfb6Zh~ut zR)>e17LlRZr)|Wg@<8N*7TDle*d~&tS%_EzuUWhQNa1o#u~NNeIn!=j6K3B?|Bh=^pbz zT;FM7^-XW#YM(Q9FXlXSR8-0+dzKNDwN0vfMG2bJ0&d~6k3iX%U@#w44)15(KmOTh z6DOM&ekl`sky`#~fbMEFeEfVi_oZhdShb3wEprKBdxo3a&@^uzqc=IX@$%1dc&#(7X4CmL_|eu3O$Ex`**FHz~4|6#UQ8J_Vq zFI4}DAs~3%Z)r;i>Mq*LYV%z{aH5Y!vE^G7+KKy0{^23o7RO~A^L*jq+?JkR$A~Bo zO7qMMNyK-R*_H*BA^Oo;z!UagC|HeS`!U6WtkIuYa=)Wctk}bEY0LoimJ8Oo8euT$ ztKzxN;0(JL9`C&(_aXY#nXLm_rbr1-a2maS2?@0?9~drK!1FzV_}(8vh|WIEo=Xf! zu=-QQ_+kpqagKBWy}?B1^I1>6itR{Ns@b-wh=E*x7HW2EM+f|O@Ex|VeL=kA=#C`m zC?fi~!nW;vOT@0?Iw!ReC$i4z6i94~2jxyZjg}^e7>iMcf$ToS1((cbn>xU8fF~hX zzn!?TJHKX>`h=9dwrjh3Y=}+6C0pOZdB}1!j(y6nf|0bF+P;4oB<#~bs>|tA_#6M8 z2uNr~+73bQ{L@`9>2ejM4?78Ssj;3PjK7eS{`6aBVGnVUw0Ow4{XG(HWA=?airh`)wu|(@qi{=u{Ffe- z`^bgf-z!agWHya+jTDjiuF3=dl9fg?;!@fz2!8a9d#RHTMnpJ^0T_KJ7dxEw6pr zciltic;q*OT^mWjx7>m1@83}0z~W6aqy)*wUNJuPwun07vE}uZ{U}@JWvQUq3O^&= zFS!>j5K@}tw&7(hYIp2hnse+W!5f_OhR(|()cnz}x`p+5{bb59G3$l8OSu{v>aDoJ zr<^UkFol|t>R)x9(um0WwRxI=zyckkBzIy62hmK|Ueh~R?&g0=x+9c}Fm}e7r zDI#*2TYKK`B0*AnsRLeLg#$Z>RGwr3?7zyFitZLiMmzh^yoL@`&uf;QG_OPK=+lQR z`4dQaADJU1L5*BrTegiRvdFJC891V=3{B3MH5Il?aB@zyuhr=%0Vf_Bym*;Hu2}D5 zbRF78Ol}ko2<_W}P!`V0p8SmU9?wz>2?p{x#vg`Qx4R1u7se2k zeDT`FN)Z&Z&S`X3+(3d#?485KJo_MkJoM5fS8FDzh{BXARAr>O-fp(n+eSH+R5eD~9|#UKfMvb(5o&Xt^d&NrrGbPL*& z(VpFPF26?HEYeA6qI=V>-%p9B@n&@z?G_X&ReqdF4MUK;f`p7< zHz*!o5~EuN5Fx@RCiKV*g*KHV?J_&za{bxHCwr)g#)cj0K~L`y9F}Ujaw{r6Na?v3Y*Vobm6^7p zm5%HPj?_{qkm-i~FOTIKt4?xl%gej{TFHp|rb9~;+eX5*+*-yIGZ56e*|5amC1NOn z_htN5QSjN$z`k%A4rMpy?#+9^G2w`eq=G4u4vK7x_`r_9TYuV_CM*#vv3I57@B}Eg z-v%1*7lf0|$fwcgnTY>eyt2#Q1R1C3Cl~k}Np$?1pSBElh=p9MDsz-PEaxl)kM#7LanK(T#5NFi$D7-f;Nc^UO1@=FB832@ozE^TPgeQ)ieuIKW4RB zGPxpYl#chKgC$WPnFti$E`R_|fBuFkPT~MwK%u|5v^qnuJh0e zH;SHeGE9rRLSjx#=8SX+v1eG0v#(h|?iTJHkqV{A)pLoxBt8z)vz%h#KRHP73Zr=keO?%$`#Aw8H}yPKTyq6Mi%XxJ+H5EBGyX96r;F6WhcEwZn5Fa2U_BnY7R$s<&N;%Dp}C z31!^DzR460lUHV=o5bMB#IL2!s|ho~m6FJ^cogS4XXPf066fz9Pb6R9A&z?IHnwl8 zBX&6j_SB~7NRa>aq^;>aD4ST{)q9)<#l7mwLb?W0owjls>DCd;n4+R;18L-F-&ZqM z{YzY{ecy;1vLf+3rDcPIBvR?OGEZ48BgdS9nS`_v`~N;9TGs7BP-V)c1vOlW8%Vt7QhlNI8nWUzS#hTd-iJn8Jfr3j`-=0J_vgJx)qbG)2L(cbP%E14p*iMS{5E4!F$6iECqVT4_ zTdle*Dtvh5x2F^0$FDB^;&mRJ?A#uC6h23ZF3EY?*N)^IP04(;};xu#Ak3V(DVsVtEm(zJ$DEB&ZQGM_S2|4ef0Hz2XDjr zpKP;fLpjp_rY}U@wM1BeaQ}r7dpJq2zLpeLg09QHy8U*$koUw!;NgaUNH*-~6pfO= z6;bQhRL=F>PK=(dirtIkixDA{ruK+WNeI|mR7gxVdETSj>ILJ>o{Xn&L`c*nHo@wN zBoan{ZCqX4AC;%(oXoqvkh2+O_MJ3SxWZL+L{QQJZht;1roEp+0W<4DyayfPd}R-s zyD`ASskWVSsS9;J9qOr*V~}HN5L1(?Kmavq)mWxS`f*L2GOZe7!Z^~$rs@vL56cU; ze18y$=`jl`fkKo?x7_{0Q3r$eAbXagP!biCA^Tyb6nCBKD!=+_)0MrB3^hiG3SU;nCu)*3ZQFyE2#!{Y#A{Nt{jF8+fg(aw$+Cq|Ka zGrI&Eepr^1kbS8FV*%o+)g%B#Km*Y9;|BhSh5S|mCgms%_? zK)|^V*A6^?jmk^RkI(kSAjw-+-ioULv9|v?Ti<&}N1|J;P)zTv`mqi0FvKbPZk4__eR zWYv&;x+k&W@iKa(;)+}+D@J8`S;Pp;yfw5|hTB8lN~r?^h|J76f1#WZL(wFGqrd*b z;NepF$0j=B?z6{z^{@v*GuXYgc5@-_y%@R3(oOWUTX#JBrbzsExbGj`?~ckn(tcw* zcu>x$B6(W#H=MpcGkK@wN`je=#2%v6Mc^N*$M52~P;2e1oU!=?A|>mJ8)y0ulb%|i zRCor-pYroFyS<64>&UkwgSU`%CPzwmZZ|SFYI8gl7)BC{VDXs|Zxn3NHyq0TfxslH zu|ExW5w-tQi`>UDr2ex!uE`<|$2YgzjyATFi;EY3maZ6*TNl=(_@(J!9d_CBtg8wM zbR61v<5x2Z49|#_1$hw@2G8e3qT=iRCM!y-pG!g;o2d5bOd#XYbjyaik4R{uEWJ9t zz6Z2&w7ZU5!+9wF)x@)1Na0G8;}#o6d_v#MqZvCSo!_1n*Yp4d%JLWDjs76j#Fg=2 zzW@r)bOtP(9757xZsGFQabn53yHjHP3GrC5xX;KXhUftYrGh;RBv9epz`~Lo)Sv4e zHH>(IBKyRiMJ@p(SeLgyuULVPt2)EYIwlmJ{E;S?e3*pz6y9JI@4U3toJ;k3AZ$S;Ypl6Cub~KB@aC%M&3Vn16V* zJ%$69L;gamBobcbA2__~h$8b}U(|o^LP4ttZ$gM6LMz=D`!~gsv%h^FY+<>E7-zcE z8NdG#>2bM+blbZK+s!;`Ka!0GYx*r_kB`86+VG(HAuW{t{Q2}TrwrlP@WUvpSOmtj zbSO_%?K-!nD}rVt5JIcBzwMD3@q2InEBUn=Dyms@ z-}A2b*C0C1^LJyAnXD(zXCMR>cC%x}atx@5c-tI&fEA@$(VdFF6yRjJ^At;B4dS<+ zPNoX$L5kY>g3(ipD7-q+aeePmF=My}N%K4~NhZE? zg)Mi%gT$W+gFhv@iB^<{w0=%3RIQH&2K*dHcIRZI?}JJt#zqJ^vkxO^vL;}!|34HS zrBUYzSwiW!$7syaSrRSW_*{l!ixlnpC5~D@Gw9a!%|+Ax`4S*2nVqY#IVj=r13UqeGcLRocsocF4b<{q)^q zT4EFu$s=)tplB+bUW0TID}&c6raN>HTqSeVX0d>{emuyuxW2Pa0q!^3ck-_npf@?DQch-j#zATYZ6x-SQOXb$ZVIb@EzOdGC> z@K@k=C(pr}&t1rQ82y2qjRYl@2qu~8qpEE?=X1AmG;OkUiJ+Lm`O}67{%{Lq$lezI z%=ZHhNs>HAqB)@I7&+4`wiRg)y85mZDP>xm{5py1^o zUo+)Af@>sr9@N(%HT$yUFC|kn7|zT(en=s=nkFY(E&d}R62D>|3T?u^ICDfZM-nfU zcz>1)TuAd(Hpxv7Li|a7zPiN{1hiP6QWvH{O!A*ff%IfzPR;Js7BWb}#{LUr>3l)L z#t($`F8znZBa{5L*{-1MEz@uec!M|*3I2TN^?4y1c=xho;?CJOnct#iQIc8q`tS1= zl(Va!D4LleF^5=hGmmp4H=t@nHSQEl#OGN`)P4~27wZ0sOI#=qI2kLvAcg2Zh@)d{ zBcbdfSCkE7P}`+aR? za0ZD^FMM@9)lkO%enjA)Ac_9c!k(k>35Ap&jOkYH$mI|yD@`v!7O6Pb!5ogf2byn( zT&>o>i>LAV^BCg17F))nG>M9g#4EE$lu^@tke6=Xo5VE0J#m8J~$elP(y&PepFUHM>FU=0)HnN)b zxEM0=gQC+Klh+l3xCwfFz47ZLF8e*puY5lgZZ=BGyOz4nn+?@Bt%{I*jjQD#uCzUPCZ9;)c|MU5GTUt+86@t-Eph`$~M8hBg9I~-JQQ7-I4GOM>m zoSg*mKk)uGi~lD$NHnZQS|3Al)T!gWiA)FNXZW~VX_g8y?na$3j%Ndf9t_c(YUejqLUe-xZ$R2N+r#ZhT#K_vwY6cvzALb#NQ zlypjWcXxMp|LN||LkK8}sDOYp4G zT5(Cc#vgeott?+uhywp>yxs~ks*soI%d|@@a;~#6JfW=b!90J4+2xWZBoT^?{3!5% zLh^C)pbO!UVm|FDUP%td$z6EuzN@}A3e*0>N$JxIZuvQM)MkH>{lOnWfeu-)tCuYo z`oWE4=H*#L|Yp($j%K z*&E00Pv&6rcW0=w>?){yFwRx_APH&9C+r=S{NS%lqq|*$523j6RoBog@^w+PDE_wt z;S=Qnq%m#CH6XF#MpPm4za-MWi3Gr}-cdw*au@t897Lb9;z8s?QJ3cWrx21!wQnT> z$c`!-7ZX?v0cI6T`Wo-iV^@M&rVD?Ne{|KT`&kf#2KqLwxs5@rIwRJr6q55iR&!G* zw;dD)qs^mV2!eerHfayH0+^M%*4J&OgU@A=EKPb2h;$9SPqHorvDcP&of`gvZOx+k zX4E7K(%(}^tHOdnD{_~hoJELB_=oSq(+c(m9~Jyx??BkAc6C9THc0!%zVkNQ4F$rC>2evtXG&o;oDyCczE7J8kWvx zjMXh<0pO0rUOWJL@OedgYMjRlaxMx(%Lks2`lXErC&&xpJ{@bZ$X5a83nc}WT0gj# zyS!YU-G#`D6Q5tDsX^>-?I_XhF>si{*KxZs4$0|q{sjTf$UJc^^ztexq;6r(62HHM z%;R!6c2$HxJjP%4gC}51Y;InkmV;cB43)csk5C}jR3MFq3}m#{_b$bbL8u^s9LZl+ zBwhI4@OW1SydL~H;XDdNexzlIu8F@PKKgNZT9^YAkH=!a+<6KyV*@G_^@$Ms&(CXP zj0lQL$ewIz`a@xB_mk5Xu_(yGsiK+G0?IzN9pBh^0}dZj3NrgukRJa5RivCF@-6x4 zyt(l0oG%6{(!$vw?oM!KO3Wg7GTYv||L+7jHaF$HD_94=<)9UBX+dy*_$uesXKZlI zs>{`Oz5!w5c${1M=X3vR6JOnS0OIN&;s}n@A$6=B?SR&EPB2iSH`vNW4qBzvW*XvP zElQh*=YInXGK?NrihTjwm>O+u6(MBJ5qSaM`v%0z3J#a}o%1$tHQ8~m3luudC)QXY zq}xAW_3Vx(iaN#kj*is=1{ZIn!TA^Xy&o}q^r;GT`oo_8Gn#{FFN}K|^(>_Sr#n}E zX9#?yEvP1LP!1T>h`hpv-13zzmTbqM* z>=wSs6fzHfbVMAY$?4~OyFQ;R$O#T6o$of?-$8IHpCrqJbg0(LyC5nV1@+<=r1>6k zfZ$W?O=WUjO;%UKIpv7x~&D}W?{k=o(rJ9pRM1$Lydw`zM0Cm z&q3++OHd&xkNmd@r%!8-Aka~=^#P#*Q(Wx~*|BbAgxG>?3Qh;RSA?uwi! z?~sccI)i(#z{*slFxXBSNhyY6Bc}DW;2Y%<$P9=r`$Be+o4=Wau$YpakdcOpcDBPE{(c`)yp4`!sLLqQtxZMZRbkS`>G)g7_~Wjz_IAFH>J zs*5DArJyf}$UGF%t(u1vno@_3r2r6N4o&6bOGRb}35yP%sz_QX*$Pht8Kg^Xa9P+-K-|^kn&HtU$Y#QI54yMx zc})@w`*PBr1KhIZ63BE$#s`SIM@R;-a-NP&rJB`f6UJ`?*WcFsS}F&&(`&mb2X zHD*6sLPE$c{^wyF$lcEJews=PmH1TxFDI%XiV>?nBu*2F2*@g6^$tODL0FT5mImYy ze^?@}{E5P<1*$V@A3TO`yVPtaW53Za&_ZbwhjH46_Csh~C7nBrG6iSXQ;5qaaHzD#o&k(=leG0PR_gjs`*k}eQNulrC|lNf@d z_Nu2U{vf-`yTcNW%b>^VW0&)VY}rLX>pO^T_pub1tF5)3GUqTvT{}ZTtgR z1y^>}Cuo8f)m8>6Ap%Eyw?m(@QWP@s<;!gSIWKkhd4wGKA@_u0@|%VaL9#>owtw9t z6kvH5-y;wMX$K-LFGeqckDY)#pU*hN2k;Yd*MBn#~@D(!2HKcZ0)xe%xQ%`$%3+Y7FH7hm9f>+LGuDhEn5dI_n zqUb_5vg&t!IplE+1(9j^M9WuDBdFKW2L&2+_Nb7h}r2M)x$M2~+#H2rb?cMW;S z3Nj5p))RybiPX>O7iJ(u_i2sXlVd26d!oI18yk||rZU~MutZS@cfC9OJs}}}-B-*W z2NJ8qlh|hIP-=Y6eM$2-5YOl?l;7?OX*Ig4BswW5cxOqX%VQsE)NeS+(K|yKy{>9e zh&yD^9kc~_kgOn2zdh4%7lPI9zryGr;WhBt#So1@mCj%v7G~6AJ9s=e~LyYUh3HVBh zQp-E!AU&I6$3I+;A@5$o=gu1oV2-`U$ia+(bfx1r6%%5}06V{1rehH$Y;Qcp9ZiPt zJFH^9`|qI0X#=<1O9l!#i-Pdi3!tFjPLP3(2)Kj@QmDJ@g3HE1eR~xH1Z+or)^wbQ z`mu>e$IbRopjjE(qvMIJ$ir%!zp;UW@cXux5#Jz_%v@e>kq0>if8^t93Pcw5FVq&v zej``$11a(6&!IGtp1S0LA>=$QQ+BKS4-yg#p76-bpx`bsV~6lM@E2EnZ`Gv%p{<}q z@*xxgNiq26%^7Rohzdt z>rLA4SB%nNXtl0tKvo2ewAfCC1t(Bm&~#Z}ECJFUjf@)4+JFy_%t)xCBJx^p+qc3v z0EQ#b zB2Y9f8`H@hUgVdTM%5Cl3-KsTC;#`-jD zOqL=2b^(KaPaF!%5^>W%&;5mR#*gVo*=|9O^~n*$dGwTuNCbLCgM9MPSI~6Q};iILKS`}x$jcd>5~6xpsGx=7uG zL{%b-Q`Fpt)eyCN4c$xj1H#F!8nE>%R;`QFvJ0| z)gpft$xXn%&*a6Ocv)oBJWnX_(;S?xPf>APc7deU7twPL+YlA)xxANX1hKAWMM^B! zz_~X6mlnPhWY}DfDtUetqBu*f!IA_Ul1za2N77P0sXP;*sj8gL`G= z;s3v1`mm#M6}huYV7~ltgIvcK@6r`RAf$@fSwQSMis>Be7wl7nl*|EQ+`S_d?saKi zn1~1@)Pxu)j_twgF9!wYTiQ7XU_LFC3qbP2lcfs;$xu-jA?fy)0%}r3T29L!B5%*` zoz`|vl%PqkbSi!Uas~eTN5d}-Ij3dYleq|qM82CR>WPI61rpVpZa$EQLumQi-UQm8 zgx7`(gh1-^&-9NzJAkRlE7|y(e6X%bo2H1Phpg%QHKkTlD4gvrH4WAIdPAfI@mYr; zg8_pZ&A0|$mAelc2B;xP>s@M>MLeWsO+PGQZU&5&(Phqzd*GPnyX%|$7E<@<8bAG> zfZ{;%Q2=HJ!Fcnygj-_4XNvnR395R!PS%cP~xN&GK5O1HjK?7 zwfHm5y)^}J`@4x%-*A4N%K_S{p^K1&es?3$Y{++Ui0A!- z_0;6ZnD548r(R{SMfl$@_Y5Jg!Bf^O9wmskT`ka3WJe*jcHfutwm{<6=`U8|&*#2D z8~B^j5}dl!zKmUa1NKiihhGV>gClDnvmG%Ode$o$^=ESv*|p<}eXwUm9>$axjdkgf zbHmf_k5U%MgJhh4xknv|I$e>Uakoakzd1dyOIIP}%Ez57QUm17H#?!wz65grtt>Hl z5<`INj$yc@B$&&YOZAvsgOc(V@e8LqDBxeq*w=s0!8IUA>KA7LO2m5o_JoxkMF|bK z@~Fpyb3-vn4Y?Xv;ZZsND@p(zOD!3Lr?ci;bxWdj&Ri*%;~JxB-;c;meA09jtoSo_gt2q|@!j2(tVk@LV% z{x8-_2n;Ixs8DkclDyhA4QAbu|6i?0%MK&JT*!#bHmd-IX+0-F>=k%E*-c8;?1&sx zZsg=r6M_Csh6jEz~zZck22 zFY+x=@Y8JP2OH_@sYt#Q%I1Ih1uTc6@GnfB(u#t}c|0n(d}a$wi}XGxUwi;TM{A<} zenBANVIcNI=)AA={T?yh)&bW*Rr8io1(1u_xZ_ObhGg)RYUc};AgH2JL}g|M$zOaW zSEw6`{GUfrw8|TSQT9)|*`zrnGq~@$Z$AniPBB#?~z?&JvpDmWk|8A>E}%m1Rn`ilT1eqE?h!Z6U zNB%Lj2>v?MeaF*D7xM-Gn-zZ!MXmv68||+DvWCK&Yiy^l??6~avSLavLN8+knS1Z2 zLprVzqSm|w<>AFf*lIVC%aU>z@4)$SK*h}JS{IZisa`cOe+wC;3|E%seIeFmaG)pb zHKaJ>(R{U&0Zj9ck*SSJ6liVy;Suf(1oK>}FaAYv(XTBV zn9_mF%bku*LL`u0jl5Lemw?B;es?9IJCLhPDtxPQ5(MkVnl$PRA!Z_0U%^Wmyk*uF z%A;Z+vHpcJ0gWT%dtM>C7AqA#D`hv?i@DT}=hDB>f}zq&91fgcH}B4#~M#>2?0rqdFLJqkV?l=T1~ zkU12#Acw@?lGq86j!=Z(fm^`a1{sw+KSq{Z&ewY^-|DIenOb8$hw>JPeW#Z1Qo$k8 z3%_ZU>r4XnWH&;ev}8c$MvE9*#UW%4MNM-yM?=|{w8vON-yvIEM`W~!8A=GtW|L@~ zQP^4ZwyyFPcq@I6#39B-whtSldfqjG$JFDaw$rN+G8Z}Ob@&&G(-soH3&%j{To<(p z$z#areCJ_lxs%EUEsfI$@f6A7GlQ_IM!5X&C5T&`)al^$B9X zj(*`c5k{uaS=PsZkHRveOWqzbLS)zPKNa3xkXoWkpvb=q35hlDzJ0es4!p$Ttf&AY zSldp&piZQ|LJZi%|T{TdI%orJdW|nfcWo6cQ22=NAaOK4kr!T zU>%oru>*$)^3nDG+ONEaKt!joNfCsiYyWNHM$#ZV`&&5jI=ckH>$1fJ5NkUH%sYQ21%h zO?jOig>SbTKDaRrzR?c2_s(_SL)^yuL{%38sD50yVM_^_-kCRAY{Wog#p#KX88e99 z-xn$vwm_ELPABHyIzb(?!*=>d8x*N<^UpS}p=grFRF^CzAhK3=bs=08d?}lSge{nW zgUwpJ&?X3s_aA$hrOtqLLd!A3r2+`S4zAdh9s|EFI`vssKV%^xAur1N6teOG!)KWR z$%8On z2U2L45)(9tQ6S4_94Bs1u;eD}w~m%WzVlcA3QPP%-tLR{?uMIz+e~jb$)y@dRc|z| z3Oz=#TW7mjf}fF{NMQ* zQI@(kVF*eQ2^8NF7Eqk2$7JzC9tcpf$@3We269|>o~aKXpkQA&Zh9quQ2AJM`6mVo znO(P?obJ5@rJv5OQ&QbVo;`Y>r8o7#gXvAdibxe?xx8&Tom_>d2CpMrY zD)m=+K`@!>Rg*_Ukfq;6@{Euc+`e6yo@Y&fh^RD-n42#0kI3KqbLTx|Dy)cAeUyPf z|H>${Xn%+_EnKNNnT7zpHzf+;dXO$nZWHWo4HbLd?Q++9AW0Uh-a2&6>VX(5$K%B<+T*6n);?L8%bf$8zyyS}_VQQXm-dp@8ILl9~MXY@mqeY!k24=_|6EfoO3!uY&4rCIQNWe4bT!p9T}5TOYj&{oWFN^*yavNI6=KB_2;=T zgEjc#)%Or0;N-AWP600KtY*D8av(MR%FSE}8OW9RW|jSv6-BySeBv0+2SMLVd;P0p zA=LY++Y?$GFn9Y;NTehR!Y3NH1c{^|MSHQuE%P5F+D%Nn>{W#FpPy_nnm?eds{9W& zTNC(g@>5yFn?Mj@luRYRbS|?9?%fM+;v5|im#)?IV7wQZi*<<(cvTdmY3fW_jt(*fPAlBcfczat%Cv*IC18q)~9=)F%7Z5CpZxbfoCVfNr?m zoz@}~XX5smz=pi;wlCugHc-L-c3dl&5;^F5lWdiP}2uWnxmzoLe8Z&wi15H^ZpbFOXLBZe zD_jPYF6z=;bg=^+l5O6u&nA#OyYQ_vY!=xBs}#3;cOkPh-uVZ6DG+)72)vepkfb&^ zEyYR;sRN2k1&xznzGMC9(efS8U0PHjy_1D}ed*SYw)2ppU7LDJ$r1AGeDknwBnKH) z&y#OlV1UdfPX`4E1%C6=;1Q5WoKi+?5#~mo1!0b z4^<&)!x;qcy}ZNEWcQ(rap(!N(;2emdc^u_Ll9YFNl|yrz4t_#F&-8Tj!*o4r!f&MQ(|vk3RLc*F(T>F8jwrre;VnCS{Nw)dsb%{pv=4Q$Uxt zf1Pl@FRcrtIVk zU3dby*?-uHZX1Dhj%X$hy&U*%ej48vT7txviVYn7E#O)rFXNI=4=z~2|JGR@k<0se z!qoiB$nza}`g@`wWDT@Zd2Ij&nHDF1#QeZbxg^h>ARHo;AO6N@Q$WCrR*zk_AxJk- zFLUEuhWuNz#X_eckU)Rq)oU9!r2MAVD4G->LT+HimbIHf%tvd7))H*wBv9N~b@(4B zl(BXfZR{wzn}eH1Zl6Y}JIu0Fgke=Le37*a|MqZ1*kKLSU4_5)Zs#B8U?I6(@1!qg}CB1ohB z!^=K554pJJ2UknpLP=4>HM!PeWHH*Y*e~CYJP=Xh!z??bMD)S3dyWxYt0|qC+;NZ{ zQzxHest&|AqpsXM3&4oGr(VKvgKPBrsRu@n!1`*1&ZTh@=#(wsdKW+pfqP`n;yHwn z;R+@Bj9vuD)+FAXVDKj+-sxC!2Bp{XzU?n8KX^*DTGMXoPQ+Z_Lsgh+bP z!05gSFdh=Lj`b-7eaoR3rb|Pho7K~Op?e7uY;03^UuL7E_o3CEIh@Eh_40#H71qd( zR>#h2#R-KKT}t2{5Qa#re@D-$jUoDx9*M$<3B(GJq^Qk*MrsdSG}%LUkg?fqvblmm zD9ooJdwky*McHwp=%85eNnN|QJ$=sM&w8Bg54Dk9Za*~>&u?(%jQRWt%Ne;yj|XS> zrXcm9zZfufM5bvh|AdK3Py%+9D#)y&sIs4Xax)LWS@O3n_gWzsmJnE8dx(=)jjgY+cVz0`zCAxg??aa2zb5_eZbs9mljhXTbPVzt~5 zr}29In?NYI@(2Y;WwAq)Wo7M!Pv($+V}<(C#U2QEQpB~~{R$o$ z#jZ0edz}4&=a4-YRa2%`fzlL5a06 zx0nifU01aY$U1|PxWDD1g5HpF^`+9}MQc!6)JVNWzzj`lFQ3k0M?o28yNYWd2>jx) z7*v?wqQGwp3g7kUAg3(Q^@rd+sFBu7eo5H}S*gs?{A6BGzPxat=;03OwB+sGgQn2X z_1s$gJAmr&!u1mqU&xz{d7dnL6$M-LKPnzNfY@Hw7dv;Yps|(v+3=50D8CtEJL)b5 z7;oybVz*PIRjcJ!(pvy|EL&GGPyR!3id#2QLMy=Obm~NGa1zov-Ue$8?1L+1eIThF zF?7y-%Y8R252-uZPgS_+03$#0t`2(vyfbueP%AY9CUQ?)g~uK02NjJ3QaHen`ANCw z0W)Ms7``O#VFLeJk#O#B`;ZaazpcUsQ?5_pA4cn)nL(M*EX z!EXu@xS|ZVoX+1ad9;Ys%7~olU85?fP%H&3}!2idp5gXq9~reOhxzSP<`CA+%4M$MOtkX9<%mPY5sgF<&G#MrFQzt<6MUr>0rf9 zmoW&Ni)>C$r35GCb_!gM^ZbeTgnMpK46=fa7_#IgAiVmj><^R+`6J^WHnDRcZ&IAw zF;)p;Q!T`Nd3>Py`ue!y)d8p_z&fQGJVB!65X&H0brL!RrTk@Yp9I-J z!OnaAvXLgJEK*fzHP`@vzw32v|3U6z>w25NIk?BijorA3g_4Xm%Okm^ptR`a;S>Bv zP%tXesE~dSl8PCXrpB8f!MnlSk9q`h<%9;UzQ2H$XOD2O?-oOGQ)lez5g!!SnSR>H zrGT{gJR03^1K>e~&Ftj=7cg7d4OpzZP?D@k(|?5l>XJMX0{6oq-L1iN`d=ah;VJ|X zm~JCSxyRd7sl*WP!0bP^`Uq+`E|$%RFG1Q;M4xT%&N+{e$!oqZht!&z7aEFEp!zCp z>-^+pNVWv+ctLltdzimQ+(QHP;}%Wrgr-nS=s^2{Dhs^7+OmAO`4)xB2(P>=ZG(z& zuLb_2awz{prudJ;02*3fSN4@#g1f->cjLGEkf)l0uY4^6lK6i1uQmOGBy|B!rg$B2 zDH$cF7y6Ep7cHV#3iZLg(|fA{|34_C`|TIOodf|IPdp-q3Lva`apu%71WHy-uo{+a zpdrVO_mh+ev{t{WQyE22V_&5=- z%f6K(Q2%%}JEMaPMf4lfEQ+i`P2?=WIGY4yec=+?Mp%&lg6!Gr!!&3;-lO}k%M6-K zVwqcp&+n_DwR44S8DdU^tyzf%AePC*B<8$3W78M9#-DaWOn~##A;N?7Z1cJ) za(l1;Ry2+b%uG|ZiSKYh@GD$5owGnxk+4=Ip*n#W{rqIbHD;09!4mNz9u_!P#k`KF z_6C>RW+M+qzMapN#EdGY4N{G?OG*_6;9h8895F#N6qx)=Fr;&VSZe}v&v_OUG0R+Z zSxpICYOu$}JN+HP zyOw74Dhvl9xom}1u3@VSprlK&iVP;#&m-&M6ltLJu5Xv&e47FgSZ%C z_N$o1lYW8C-vw6bradqkv=yHJx&wYKPjXJwjUh*q5bxJc1mr7YJ%5~tfrQnvD_s(9 zP%8VYU*m`ky5pU^wxylH?+GQj_zQPvxULwHxK;!S>n?XBM}46o{IwX}v&)ceP^NA> z`3-7^^XumO_K}C1X!BjVm&j&xp|wsh5CUG`CQ0AigIEhYpF#c>hzsE8HQ)UO5vXxW zF`)@CE$#YDyjqaq=EZQOZV}?dY$Ya&UqMO+)q>eScZkO!;7sGGK>=H&RDL`NENsFP zDLy}f`1!8H2#GZ)AQZ87Fb{y}gyK`xFG`Txinkjc?Ts9pS__5a=pdKDA+b_M5UDf{ zyBo9dp7?>%_fNn{{IT{enN}!{6r%}p#fFx!#+o>s z738)QiY5E~5VEhgbR;S#v1fM<_aY zjcfS`2LiGm*5B&Bh3unLai2Zagjhdv!YrqoQ0MZc*#_{iHl>;DKL zFI6B z|DX;L^rT&BhS&ieg%oy8$YF7oEN1))1%5(#jE3zWydz`m$N2muTGY(^_A&?QQyH=xo9uO_R)-~Igwg}x_T z(`C$1khdoAvSb*7m#@&b-(-L|9zq9GNm8g(e;FTOUxvaJE~R0Qo%3jwptRy0929+h zmUu!`0);uGUg^9Y24Oy7w6}<3k?zstZV=8d$YGQi`R;`Wm|yx?%Y2)VYHdFyeAyMO zlw7XUS4<)fvd@>dC-#s#S4}=AW z2yXW*>a5f}S9YnM{q6DN4}%?~IiHDIb^o$MNcBH&TGgnYxZ6rH30t!1BwlrT*&P+Kl~#>E^T_l&K>p=8~em&FwW z4lbPjU19tX=f*Ensbvh3ksUNN&t2rF%S?tmj?anN{3@INIC&X*cCoNW@JK@7S|s@w6Qd6ow_h`UgzVpdny2!>$OG;jwetS{UDYus1k*Q zs5&@???T}3VcwlYRmde+rpy>&hf-WcvyzSfAam=V*n%<*6wXStZ@ivF{@5xn$Y?%6 zCiY_MKz=sTdv>?ac0vjKod&2+Y2=|n?kLkIr~pD~3jgbSa0-QrZbAJt&!GA+v1{WX z2$Fu^iFeh#hIk)5Uy?n%4B_0;(`jP|DEa>4AEN{V=%C1#m53{W1m8=v4wJtjzgG(T z`sZQfjXzHPI))!=*CviV&Z;2&Y&5~W{T|d8vqU_PZi48F z6sao;O?hLCk-rIx^^mtHbmH>WM$2_THm$O*>T7k#yzF~>qU8hBdUBG=aK%AmDP6wy z+qcj|R8pFsJ%fVjyKz~5Mnjz<8G}zd6IdlSi_;RYgZtO7^7j5*5XXYu_D7x>^7Ut{ zt)`72+mc?6R?iHgnimG`7e7EzLg}bCZ5~ASWKHL-T!RK&t?HiygissG@)uum4srv| zCWi0FqQJGA>PNh~kjGBVty^mb9nXfe9t-b6Ii0`6vvzi9XuRs%Z{!W_b>d53V`iY- zt%jCt(i1S0^SOIzl!$L(xKQnD4)k?~&899?K?yZe&4mCh==}aF@sruPuj?!4vT9s~ zl6NKI5x&h}OBWcsmaqi&RxZQStllWNS`#babO&;3yk>tDq(GOCij&HR?=J43W$8bSNNH7nsi93M!5|YR5 zxx)}|&AWNy&41w6L~qV6tO7aP<|j_SxIu@}XtJB;IsFE?bqZrbR_i@cJHG82&kjA1PPI^Ls$)yLH>LYyFV?^MXYMp*fUX za@*U^`3@y!^mBX+Y>?i~>Mnil9g@duppOj=hd>rW&*{{wQ2*6*Z9h^5Fc&^Xh3f}{ zuiE$zyeC1BBJ+~%z}OE88yY7gX?*oiIvXNE$hQ#)qWiy)`sy};7q3M7p5k=mZRLhaU_ zno>nF2x|WPb9{3G3e*xnxipdVbf6h?QRj5fZcFx@v z%Yl5KG$ClKpVx2E8wC_JHQcg~1Lv7GrR=v2D4Znm=W1dvq&fD49e3}e;Hp01U&jBy z=?yuL^nxH%k{aHUIFf<5!%M0`4;@;{%*MS@_tA=12 zh&MjO7ukCbr7}-1a&*}KkAm}#$LfE>cp^p143$(y!%jls6X9#`y=V5``!ODSJoesu z@11TUM2N^rM)pV<(cfIk0-ubi%C6Z@Ue{ju0MW*xe|GBLKbHk>8 z(d2YrBh*Ux7FHa*fKr-`7mews{jqrNBaPB2KdvaST};VE3BwZa zwU56;Ld&1^^HwxaR`$rM{nmM?dm9@SWOO=@X%Uwf?KY774p;r!L=eK5>aqm_@*#h2 zV4l(z3%UO-HmnTsL*p%(KP`_2z`Lg=nV-K9)Y6hEZ;9}rh>2Z;ri59jR~X*RrVpS_{4txc_CB{c}z>!D?z!#t++nherUjaWFv)0a7lHeC4TFB$}Q(N$kHQ` z-zS>$b#p~fl)TQBwU-CYY~>`4{ZkOWJP=seYj~=!msj;Gj>fQ^gr`JoYU$R>&|E|=ayo<7@4Op9I+U;jZMkWB*`7@yKaGFU_H_)PtH z!D$~^!m@o5ih#~yJqkP0sM8z{3cG&c10;oHhvQMwLI|?van$RDT0(n_wfhLfI+8!0 z(x!v>eqVvIfH8y%Q+db%Kat4f1g6wpAMDJ2rz8=wLQK!Ozve$%VAbLv-hKMj`RO$K$dyGRR!b@N3>Vd*o%* z+2&3!1vT|kx3@&%0B0UnU|XPj+V@oA`0wsQdUV5p{1aVBectn;xThTw)h9Rc)7QYm z)7+n3`8MPxt&)_*6e7lQ2ZF1rSd=PkK2wuRk1z~xGd6N`P%tPtk_!4k?0X&O2R?CN zDAnsi%&ZLM$9V^Mk0K!OBl8RK(|%sE+pb$#R|C}t{%!TL7Eo=WbpJCI^)U#h(BSxr31AbUP}wDJY)sI!GK zD2t$>lmqjlg%DylIwyu@KS7{-$wvz(eyAwaymUl=0gOJkr>PwNLjlJLIt4Z+P%FD$ z>~OOh@{bD0JoA_#JMXyTV&PASybyF(BTfqv4TCzlf8TGi>^RFQ$OUJ6*Weef# z6i2<2!XXBepYHua3mVvcC4(xS15SPKQNJG_U}#!PBO+%Z*)T5XFu)jc<1)F^y_8Wr z_l=J70xrnEI8d&B_dHaK?bk`$S3t`qL9}aa89b)dW-F9nfi@4;O!uin=(*?F@zP!b zx(z?it@@rt5$w5z!TiIJBdhd@CesEQXv}TqIA)+Ua9V6T@g=k~^(*UsnTNXBPt8fa z9>{iX{xIdB7x_HYlDKux190-wjh(tHQ2eSJPrk_vc}zYnf6Vn7nyxWPUvuq57K|~9 zY>ruwd2n%B;hzB{$LK8xUbckS76!Sq>6YNHclG#*iUV|h*>#LzYXyjtvK`v}h{9iJ zdj8XY4_^AMIkpaV(7tca`zVqPsw~qAf2g@Ysn8+A!YRiUW@s}vuF4^tzFWjg`rpv< zsCY9;Z~&@h8?F-26Ct~&Wp83@q@nATMjZ_;AK(!E)+Tip)ZFO*RMndRm42hgSxx=W z`80Yh+2AcSTraO(Z$1G3LL;6Hh9W2p%Z|EBYXjNOw}o!YKY{ohnJ-wuXygz*lHn#D z1l_D#-hbppk*Xi}(9lXZ)RM?{JmsH5u`SbX**D`MA1xEe6?h=46b@pH(*>v&H4nX( z{U5x(L13IT6#>ayy>;rsh`W%5czoEQ<0@2lX+&dw5HJZDZ~^)I$m^-gWAIw_ z@%@(BCV>P_9H1xWfiT@nAg5SgFtP}mlZ1Sf|0 zA9d8Dpi0!~B^+}L0NJ!lH`2DCZ~OobE;eKn*?SQ zgw5m2Kka8JCpdcBuGh#`@7BP*K>{d@(D5IQ{0-5goafRiUxVCq#Ru7Yeh^cXYC@`5 z058NhpL|LE20=!g|2p-bg2luuz1Dw55Pb8y%K`%f%6( z4?JV8Ly z3k5H}up7z=gV?ci@bkV57`kUo-o9}K*<`r7eTv`!{SUpKJBta(ae|nAq(}m}Mie{c z>d-^%G~Y`qe;EiA`YQ79!yn`nDI_=IE{0@7sKUy(s!$LKYaFrg9GF6`BLfC3 zt;=>B)L%CAoOmJ%xL0qG)e%{eQi@R$uLbglR=2a!PHHHwlNsWgbM z3iN1slMkLzT)o`74?t~6sDEGL1w?S*qC?&dLHK-=q*5?F;F`3o7xP|&#~FoK$)yy8 zO)Gt!P_&19Vb)i~CHGWUi$Ob>aVCpoq|l+z3Zd=~Q3OawTRm!Wq!>l{Y4V8(h|aI@qejyv2#&I=BY%H@5*RaYk^cAo}$G;20c@p&N~Wt)S;-IvInZkYV$ z0VjC9<^9X)=Z6#`>o^FTSk11|<^ZQ8n+p4X8xZqFV_?e20;0X- z)}}(dA%9iIM*5NjMA|7c$_`yZ*t0IeyE1IZ&eC(IS-KbO8zplxNGHH;;7jPjgHdFT zz2g6v%MW3!-Y^nHP@#YeM4L781;`Pv`1f|>4e*rBC0BSo1AZFsr{#Elq3nynijO|c zprmN6xevS;BsKGz(u~v%2Z=#lvbj|G$7CdU`0N;s)Y>rY@6}Q2=&`K4^3*3(U*ClW}%W0Gsn*g~IU+N=)R? zz5jtDoPoG=bs?3P1?oZ6%f-)$kEcxTzDMVgp6qEibXhO0y({Bq_0kC#! z>}02M24g4eVXeib({r+vBYQarSQXLWhXsbnnQ_OM`;7x+I<-FM?)3odsJZ0hicG*L zt56Sn$DH ze(^vQM>3_f@{0ZRypp;k;s+t(m#=5^TpRNH{g4}7NQWG=-aiG6w^3}MILiUw4y2Es znC+DNL16SX%c}~`kR6awV!ypqe))$FDtu!@Yu~bianHUio3;yt z-r7(Ik{ty9l7#DtBIh7DPLSk7?I`k>I?tP)nU4%Y1a~RpcmbzEc>RQY9*Hi!`{pT| z4zbC^!PM{HAv@J*Ya;d|DC8j+J+>rwAyNUn zb$nS!VuECXD`E#(>YI_8U-}AhcG%0wuhby!f|SGf!ZRqL9bI#X<%1kW_48|Q#gW$| zx;*d5EU-FZqU`j!jRKqmqF4tXK*YJL+SRQBC|K<8HSsG&$m_4FbluHC$lGVWXK+ak z0u<(w?PR^cmsNHw;jRTFzgmuap!5tfLtVf9yOsd1POY*1wt^5qCS*rPE)01i(lY0= zc_I5{hO~bo735n-@dygHL3~u*^&biJNFjt@>tE*($hYn6Zj11P*NwL(%+1{A5& zV)ZVa5BX0-(7$**jna4bS_2+3fCXhP$O{0ZvuD9@H5-gtH?0p(G_7*I=~rg*j2~+qo~H)SEe4cBaBy9z_x!4 zij~e;aesUl1(q6EFS-2xU#Ha8LbpFdfM(l+Jh@?%Gp;zpM)?zA9$PWTcjX}8KSS-U zV(rNN<)a;Oy@zB{Fc{H{8U1%9}OLi^^GT&CV4+?`xRUQGk`&cc#uPo?2be~as{s~GTe zI}@sx+j`1{y7#*rUBN7C)ag<*74oxHJ2QQntFGDx(*Y0lA?a>+l^yX2*nDLSAxgcA z!X}p0p5Cbd%(}a_v_v0bIXlohJX{IMp9JT-uke6nNYmTIlSdGC<9N>J%_IcyX;-oD z4M0x5!Ye$I_mEcmFXD222B@&xIC3viBlpQ&7E{bFa%i?u-(X-n?VBx6pWtL6M~US~ zNJj&CjSJBHyPuAn$OA9j-75r-$a^0WG`PX~=)dd7&8NANuBUo_(-wj<-IZ0wLQ4in)~EbWp>Yao&j=(BW%EF&vcav*>Oti4k;?!1@)%&Id|E;ch* zLk{B7-s#oESAtg!=jI#vOcbL1C7=>4AmfvL)t6c$Np)H6YiLMPPf-DZ!JK{)_aVVxwH2XNH$5)%H8kygt4)`jdz!0j=8yYX%S8BA1DS2NW> z+DAK@`>kq_(Q)NCu`UjoJIFQ>crHT0!%F2U-Y)QAnp8TT)r7=ROiTQgI53f-=~Zy? zMkcYL>zd>V;806;TSh_+9B*C3>(o618H8BR8&@z8|L(`X#~U@s!ERpI^5He`ZW8B` zDXj&?%H9N9JrOW>j=g-~!3=H|8dr7mzJk{4cPXQ~mq9&zYcYk68u{-P32J7Rf@|e{ zj_R>8$f~M;u`O#0McG=uN)PTq{-O-ce_1;acWM3R<+yD~2)tWzeRdE^_fl46V!Kh? z;Vg@6s4>KG{;cF+9RSb8|HOD`=aC1AYQQqVID}j{-WxF?gUAbc-*+#^L(q=}6HDy_ z$RNmPp0*qXotGAK<}Es>+_dWYCejG<=C%GdZ}=gppWoCVuMb7u{n?Z=oC>KfU)t zoRGRZ$F`oOIbfXiA@Rm<;L4HEX>S{W!lQ*8`jvMmm?Lj)YRm;Jh}C!|oFbqgMOxj# z>m%ga6uNKYpXT#_&)k--cSC^K*2XR#3mCThGs3|8lY+jWx$)`JEH+z_Q3X zP8xtqfyILPw+`er-~5)e`#Lg$Y;0ftS|RD)suz(?saYu zejxQHYn2muJQ5njXL5o_Wy-q|r~1n=&U-LHuLOQ)V+2I?(*tfNAbG+$Ix>+S2^HsyBlI@P~hs zdjvurL)NFxd}&Dh9=6##-3M6el}HCs3P|ywJQ-0Gfpqb`+>>=vhz^8O4oo=|5?SLF zL<~W^Lch=P;ywy_7n658YXp*uG1;VrJy7(ic0uLFZ^4xV?XqgT9tdF0UnNdmkL=p7Z{)A%LIhE>SGuwk6nC)Fq~Yo`3&Afu@r2gSr=|&xxIWdPN$#On0o9T`8c5rkX)g zLJ?WgIv9Ic+CzvBOUs6AGYTnv(&rHs2A(}7(H_LokhG5fYRuyz1e)cwSZ(V$qsdfmNf}=q~EP+5Yyf%f> zMb8E(;*FwbTIPU~w9E{;8*NZ9Wm4Ut*a)qU?(?+EO_I*w0&Zidw0;;T;L8BkIF zBUexP05Z8gy5DHAgqrR*Ig3Q*P{4SFwHGe|%DHZ+glTaD_EJ}@mB$509gH}zUO#=$ zTKD3^OWEK_s?j#A6bAKIA-=R8{s9%zW8EQk`wuqZ@LjJRNou6OqpqCPQ7-(sD*1;WW7TcZQqpwIuuZ_MvU1AWiBWtalg$l zxCq7ZkC^aJ-#2^o4U!4k5&SX0O`*vFfPK%OaZ@cElFoas_+TG^#>jtvt?N>t%;U}* z0TyE@Z>^6rcZvd^2gWmj69&lRmC}PN^nDPY@ELC-Yzlm;*o_!eqanB|^Bqoz4(Yxz16xrKIDJT3L?D~KC8sf1-A`L+y)4mAc7Q61%yq$(n@&)1;^FgSqqq@y}vlSxD zWatiqiXfE4QswY@F$6361zpILhMaIG^39Y(sJM_?uU*psv3!pZBjzon&v`2OrI0{2 zg<7>na0ZfH3;%NaDjNz?2qdcS$OEj4P&3E<0k9{X{YxTE0ug^}+6$8G!HxXT*!km6 zFwS_(KYz6b66Py%bDHSEr_?p+&s%)RPLgw>x-bbP{=~czXR;w@A%=#V;3mo{{q9{p zjSqRD|A_ywuS05MgESd-5fZhsZ>}|0f?tYfjQ{R+h>1}Cp>6#2G%xFHsA>41pgx7< zYS|6&dsOYwe5(!8`4z`P&z(ok5B(kz4rYQ&28saSk zpEDHyLWvWD^SMVe$jnW=PoCHo{FVu@`}YeFR{sspCHYoxYg^+dq1*=lr#1DDvz;K% z>E;;oq$;G7?>{7`Hv`eu!FxY{9YeIG7V+|<(>c7CXum%G3tV+P*X}Xgg)9S!E6!

      ~O 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%0Ay^0L>E^5d< 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


      qMjjSpAwyuoU0>_ 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 z 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Ξ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%0Ds&K-QSNgz{UXI%BY+M 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 z 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

      T0|W>0E5>Qe{-&)p?g{+^7&z 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�t=Y-*IJtGYz2lfKVK4`{ep=@4>{%H3^7NG=~!$* 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�VoSlt{s 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%0DRo#>sz6FGM43~q>MxpPG~ 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

    2. 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�oMj%unioH1J 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ⅈ5SYla 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

  • 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